一文讲清楚vim的map映射

map主用自定义快捷键,如:map a b    ,把b映射为a键,使之按下a的时候执行b快捷键;

一、map介绍

在vim配置文件中经常会看到map、nmap、imap、vmap、vnoremap、nunmap、nmapclear等,都是什么意思呢?map前的n、v、nore、un等表示下列含义:

1、nore—— 表示非递归,map默认是递归映射的

2、n ——表示在普通模式下生效

        如:nmap <leader>s  :wqa<CR>   #表示按下了leader键(我的设置为了\)和s键后,执行:wqa命令,<CR>代表了回车

3、v ——表示在可视模式下生效

        如:vmap <C-c>  +y       "表示在可视模式下,按ctrl+c复制选中的内容

4、i ——表示在插入模式下生效

5、c——表示在命令行模式下生效

6、un——后面跟按键组合,表示删除这个映射

       如:unvmap <C-c>   "删除映射

7、clear——表示清除快捷键映射

        如:mapclear、nmapclear、nnoremapclear等等

上面的一些映射是可以组合使用的,如:

    |COMMANDS                          MODES
:map   :noremap  :unmap           Normal, Visual, Select, Operator-pending
:nmap  :nnoremap :nunmap       Normal
:vmap  :vnoremap :vunmap        Visual and Select
:smap  :snoremap :sunmap        Select
:xmap  :xnoremap :xunmap        Visual
:omap  :onoremap :ounmap       Operator-pending
:map!  :noremap! :unmap!          Insert and Command-line
:imap  :inoremap :iunmap           Insert
:lmap  :lnoremap :lunmap           Insert, Command-line, Lang-Arg
:cmap  :cnoremap :cunmap        Command-line
:tmap  :tnoremap :tunmap           Terminal-Job

二、相关参考

键表

<k0> - <k9> 小键盘 0 到 9 
<S-...> Shift+键 
<C-...> Control+键 
<M-...> Alt+键 或 meta+键 
<A-...> 同 <M-...> 
<Esc> Escape 键 
<Up> 光标上移键 
<Space> 插入空格 
<Tab> 插入Tab 
<CR> 等于<Enter>

特殊参数

有些特殊参数必须映射命令的后边,在其他任何参数的前面。

<buffer>

<buffer>如果这些映射命令的第一个参数是<buffer>,映射将只局限于当前缓冲区(也就是你此时正编辑的文件)内。比如: 
:map <buffer> ,w /a<CR> 
它的意思时在当前缓冲区里定义键绑定,“,w”将在当前缓冲区里查找字符a。同样你可以在其他缓冲区里定义: 
:map <buffer> ,w /b<CR> 
比如我经常打开多个标签(:tabedit),想要在各自标签里定义”,w”键绑定,那么你只要在每个标签页里分别定义就可,其作用域也只在各自的标签里。同样要清除这些缓冲区的键绑定也要加上<buffer>参数,比如: 
:unmap <buffer> ,w 
:mapclear <buffer>

<silent>

<silent>是指执行键绑定时不在命令行上回显,比如: 
:map <silent> ,w /abcd<CR> 
你在输入,w查找abcd时,命令行上不会显示/abcd,如果没有<silent>参数就会显示出来。

<special>

<special>一般用于定义特殊键怕有副作用的场合。比如: 
:map <special> <F12> /Header<CR>

<expr>

<expr>. 如果定义新映射的第一个参数是<expr>,那么参数会作为表达式来进行计算,结果使用实际使用的,例如: 
:inoremap <expr> . InsertDot() 
这可以用来检查光标之前的文本并在一定条件下启动全能 (omni) 补全。 
一个例子:

let counter = 0 
inoremap <expr> <C-L> ListItem() 
inoremap <expr> <C-R> ListReset() 

func ListItem() 
let g:counter += 1 
return g:counter . '. ' 
endfunc 

func ListReset() 
let g:counter = 0 
return '' 
endfunc 

在插入模式下,CTRL-L插入顺序的列表编号,并返回;CTRL-R复位列表编号到0,并返回空。

<unique>

<unique>一般用于定义新的键映射或者缩写命令的同时检查是否该键已经被映射,如果该映射或者缩写已经存在,则该命令会失败

还有很多具体的映射相关的内容可以参见:help map

猜你喜欢

转载自blog.csdn.net/lianshaohua/article/details/108388945