VIM - vim的几种模式和map映射之间的联系

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 

 

  1. 命令行模式下, 按下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/

posted @ 2021-04-16 10:26  7bGWFm  阅读(1093)  评论(0编辑  收藏  举报