看到VIM高手们在键盘上健步如飞,觉得很羡慕,使用各种组合键,快速的完成各种操作。这些组合怎么来的呢?有一部分是VIM默认的,而有些是自定义的。VIM的自定义的部分,你也可重写。
vim里最基本的map用法也就是
:map c a
|
这里把c映射成了a,在map生效的情况下,按下c就等同于按下了a
当然,常用的Ctrl,Shift,Alt自然也是支持的。
:map <C-a> a |
:map <A-a> a |
:map <C-A-a> a |
- 令Ctrl+a对应到a
- 令Alt+a对应到a
- 令Ctrl+Alt+a对应到a
到此,我们已经可以做很多事情了。
如果你发现你的映射不起作用,很有可能是你的映射被覆盖了,一般是你所安装的插件干的坏事。使用vim的verbose命令,例如你的ctrl + h被覆盖了,你可以查看时什么地方覆盖:
:verbose map <C-h>
例如在我的机器就输出:
<C-H> * <C-W>h
last set from ~/.vim/plugin/minibufexpl.vim
这里告诉你在minibufexpl.vim插件干的,
然后创建如下文件:
.vim/after/plugin/mymap.vim
在mymap.vim中做你要的映射,这样当加载完其他插件后,就会加载你的插件。
如果这样还是不能解决问题,可以直接去对应的插件里面,把覆盖你映射的那些行注释掉。
不同模式下的键盘映射
使用下表中不同形式的map命令,可以针对特定的模式设置键盘映射:
Command 命令 |
Normal 常规模式 |
Visual 可视化模式 |
Operator Pending 运算符模式 |
Insert Only 插入模式 |
Command Line 命令行模式 |
:map
|
y | y | y | ||
:nmap
|
y | ||||
:vmap
|
y | ||||
:omap
|
y | ||||
:map!
|
y | y | |||
:imap
|
y | ||||
:cmap
|
y |
一个典型的应用:
:map <F10> <Esc>:tabnew<CR>
其中:<Esc>代表Escape键;<CR>代表Enter键;而功能键则用<F10>表示。首先进入命令行模式,然后执行新建标签页的:tabnew命令,最后返回常规模式。
但是map命令远不只这一种,在不同的模式下,同一组按键可以被映射到不同的组合上。
Vim的模式众多,但是一般被提及的也就是这么几种:
也就是最一般的普通模式,默认进入vim之后,处于这种模式。
一般译作可视模式,在这种模式下选定一些字符、行、多列。
在普通模式下,可以按v进入。
插入模式,其实就是指处在编辑输入的状态。普通模式下,可以按i进入。
在gvim下常用的模式,可以叫作选择模式吧。用鼠标拖选区域的时候,就进入了选择模式。
和可视模式不同的是,在这个模式下,选择完了高亮区域后,敲任何按键就直接输入并替换选择的文本了。
和windows下的编辑器选定编辑的效果一致。普通模式下,可以按gh进入。
就叫命令行模式和Ex模式吧。两者略有不同,普通模式下按冒号(:)进入Command-Line模式,可以输入各种命令,
使用vim的各种强大功能。普通模式下按Q进入Ex模式,其实就是多行的Command-Line模式。
- Normal Mode
- Visual Mode
- Insert Mode
- Select Mode
- Command-Line/Ex Mode
对于Map,有几个基本的概念
同Vim下的其他命令一样,命令的名字往往由好几段组成。前缀作为命令本身的修饰符,微调命令的效果。
对于map而言,可能有这么几种前缀
递归的映射。其实很好理解,也就是如果键a被映射成了b,c又被映射成了a,如果映射是递归的,那么c就被映射成了b。
:map a b :map c a |
对于c效果等同于
:map c b
|
默认的map就是递归的。如果遇到[nore]这种前缀,比如:noremap,就表示这种map是非递归的。
unmap后面跟着一个按键组合,表示删除这个映射。
:unmap c
|
那么在map生效模式下,c不再被映射到a上。
同样,unmap可以加各种前缀,表示影响到的模式。
mapclear直接清除相关模式下的所有映射。
同样,mapclear可以加各种前缀,表示影响到的模式。
-
命令的组合
表示非递归,见下面的介绍
表示在普通模式下生效
表示在可视模式下生效
表示在插入模式下生效
表示在命令行模式下生效
- nore
- n
- v
- i
- c
- Recursive Mapping
- unmap
- mapclear
这里列出常用的一些map命令,默认map命令影响到普通模式和可视模式。
:map :noremap :unmap :mapclear
:nmap :nnoremap :nunmap :nmapclear
:vmap :vnoremap :vunmap :vmapclear
:imap :inoremap :iunmap :imapclear
:cmap :cnoremap :cunmap :cmapclear
可以试试这些命令
-
命令行模式下建一个mapping
nmap b a
- 现在普通模式下,按b,可以进入插入模式,随便输入一些字符
-
命令行模式下建一个mapping
vmap b d
- 现在普通模式下,按V,进入了可视模式,并且选定了一整行,按下b,可以删除整行
-
命令行模式下建一个mapping
imap b a
- 现在试着给正在编辑的这个文件输入一个字符”b”吧 :p
-
命令行模式下建一个mapping
cmap b c
- 命令行模式下, 按下b,会出来一个a
好了,到此vim的按键已经被你弄得乱七八糟了,试着用umap和mapclear清除这些mapping吧。:]
版权所有,禁止转载. 如需转载,请先征得博主的同意,并且表明文章出处,否则按侵权处理.