vim有一个强大的功能就是其映射功能,可以将各种按键映射成不同的功能。例如:
|
map <C-a> A "ctrl + a 映射成A |
可以方便的映射定义各种快捷键。但是需要注意的一点就是vim有很多模式,不同模式下的映射方式不同,map只是普通模式下的映射,同样是<C-a> 可以再不同的模式下实现不同的功能。所以先来看一下vim的各个模式。
vim一共可以分为五种模式:
- 普通模式(Normal Mode)
最常见的模式,打开vim不进行操作即为普通模式。
2. 插入模式 (Insert Mode)
可以输入的那种模式,普通模式下按i键可以进入。
3. 可视模式(Visual Mode)
可以选择多行、多列、段等进行操作,普通模式下按v可以按行选择,按<C-V>可以按列(块)选择。
4. 选择模式(Select Mode)
与可视模式差不多,不过这个选择之后,按键后会将选择的地方替换,与win下常见的编辑模式相同。普通模式下按gh可以进入。
5. 命令行模式(Command-line/Ex)
普通模式下按” : “ 进入命令行模式,可以进行相关的操作。Ex模式可以连续输入多行命令,普通模式下按Q进入。
针对不同的模式于是乎也就产生了不同的映射方式,并且这些映射方式可以互相组合,map为基本映射,对普通模式、插入模式、可视模式、命令行模式都有效,然后会有不同的前缀表示不同的模式,主要有:
- nore 非递归模式的映射
- n 在普通模式下有效
- v 在可视模式下有效
- i 在插入模式下有效
- c 在命令行模式下有效
对于递归:
|
map a b map b c 按c会直接映射到a |
inoremap 表示避免映射的嵌套和递归,imap则没有这个限制。
举例来说: <c-e>在插入模式下表示插入光标下面的字符(参见:h i_ctrl-e)。但是你有某
种原因希望使用 <c-e>表示别的含义,例如表示插入字符 “E” (随便举的例子),同时,你
希望保留<c-e>的功能,但是需要映射到别的组合键表示这个功能。那么该怎么办呢?你可
以先重新定义<c-e>的功能:
:imap <c-e> E
然后把原来的<c-e>映射到别的组合键,比如<c-t>, 你可以这样
:inoremap <c-t> <c-e>
注意这里你就不能用 imap 来实现,因为这样会出现递归。嗯?不明白,那么你可以试试这
个错误的命令:
:imap <c-t> <c-e>
分别键入正确和错误的命令,然后在插入模式下键入<c-t>,看看屏幕上出现什么,你就会
明白的。
一些映射举例:
|
inoremap jj <esc> "按 jj 可以进入普通模式 map <F10> <Esc>:tabnew<CR> 按<F4>新建标签 |
参考:VIM学习笔记 键盘映射 (Map)
vim的几种模式和按键映射