map映射
在vim配置文件中经常会看到map、nmap、imap、vmap、vnoremap、nunmap、nmapclear等,都是什么意思呢?
map前的n、v、nore、un等表示下列含义:
nore | 非递归 |
n | 普通模式生效 |
v | 可视模式生效 |
i | 插入模式生效 |
c | 命令行模式生效 |
un | 后面跟组合键, 表示删除这个映射 |
clear | 清楚相关模式下所有映射 |
-
Recursive Mapping - 递归的映射
其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。
:map a b
:map c a
对于c效果等同于
:map c b
默认的map就是递归的。如果遇到[nore]这种前缀,比如:noremap,就表示这种map是非递归的。
-
unmap
unmap后面跟着一个按键组合,表示删除这个映射。
:unmap c
那么在map生效模式下,c不再被映射到a上。
同样,unmap可以加各种前缀,表示影响到的模式。
-
mapclear
mapclear直接清除相关模式下的所有映射。
同样,mapclear可以加各种前缀,表示影响到的模式。
这里列出常用的一些map命令,默认map命令影响到普通模式和可视模式。
:map :noremap :unmap :mapclear
:nmap :nnoremap :nunmap :nmapclear
:vmap :vnoremap :vunmap :vmapclear
:imap :inoremap :iunmap :imapclear
:cmap :cnoremap :cunmap :cmapclear
可以试试这些命令:
命令行模式下建一个mapping
现在普通模式下,按b,可以进入插入模式,随便输入一些字符
nmap b a
现在普通模式下,按b,可以进入插入模式,随便输入一些字符
命令行模式下建一个mapping
vmap b d
现在普通模式下,按V,进入了可视模式,并且选定了一整行,按下b,可以删除整行
命令行模式下建一个mapping
imap b a
现在试着给正在编辑的这个文件输入一个字符”b”吧 :p
命令行模式下建一个mapping
cmap b c
- 命令行模式下, 按下b,会出来一个a
好了,到此vim的按键已经被你弄得乱七八糟了,试着用unmap和mapclear清除这些mapping吧。:]
映 射 与 运 行 模 式
有五种映射存在
- 对于普通模式: 当输入命令时.
- 对于可视模式: 当输入命令并且 Visual 区域已被设置为高亮时.
- 对于 Operator-pending mode: 当一个操作符正在进行中 ("d", "y", "c",等等之后)
例如: ":omap { w" 会使 "y{" 和 "yw" 一样, "d{" 和 "dw"一样.
- 对于插入模式: 也被用于替换模式.
- 对于命令行模式: 当输入一个 ":" 或 "/" 命令时.
没有独立针对选择模式的映射. 和可视模式在 |Select-mode-mapping|
中的一样.
特殊情况:当在普通模式里为一个命令输入一个数时,对 0 的映射就会禁用。这样
在输入一个带有0的数字时不会受到对 0 键映射的干扰。
参考:
http://haoxiang.org/2011/09/vim-modes-and-mappin/