在vim我们经常会碰到map,map就是快捷键,本来很好理解,但是在vim里面,事情就变得复杂了
最基本的map用法是:
:map c a
把c映射成了a,在map生效的情况下,按下c就等同于按下了a
但事情就这样结束了吗?天真了,还有各种各样的nmap, omap,noremap,nnoremap,这都啥意思?
其实这些乱七八糟的map写法,其实本质是前缀+map:
//n和nore分别代表map的前缀 nnoremap = n + nore + map
前缀代表着各种不同的意思,来源于两个概念,一个叫vim的模式,一个叫递归map。
模式
vim模式众多,设置一个map的时候,可以指定它在哪个模式下生效,这就是模式前缀,经常被使用的模式和前缀为:
模式 | map前缀 |
Normal Mode | n |
Visual Mode | v |
Insert Mode | i |
Select Mode | s |
Command-Line/Ex Mode | c |
比如说nmap,就意味着该map在normal模式下生效
nmap = n[ormal] map
递归
map还可以递归,这个很好理解,比如:
:map b c // c被映射到b键 :map a b // b又被递归为a键,也就是最终按下a等于c
默认的map就是递归的,但是我们可以让其非递归,就得靠nore前缀
noremap = nore[cursive] map
小结
有了递归前缀和模式前缀,明白各种map的意思了吧?
//在normal模式工作,且非递归的map nnoremap = n[ormal] + nore[cursive] + map
有时候设置了乱七八糟的map,想清除掉怎么办?
- unmap
- mapclear
这两个命令都可以用来清除设置的快捷键,且这两个map一样可以和前缀结合
这里列出常用的一些map命令,默认map命令影响到普通模式和可视模式。
:map :noremap :unmap :mapclear
:nmap :nnoremap :nunmap :nmapclear
:vmap :vnoremap :vunmap :vmapclear
:imap :inoremap :iunmap :imapclear
:cmap :cnoremap :cunmap :cmapclear
查看map的帮助:
:help mapping
Ref
- https://vi.stackexchange.com/questions/10573/what-is-gained-by-the-extra-sid-level-of-map-indirection-recommended-in-help
- http://haoxiang.org/2011/09/vim-modes-and-mappin/
发表回复