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

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/

-----------

vim帮忙文档:

1.3 MAPPING AND MODES                                   :map-modes
                        mapmode-nvo mapmode-n mapmode-v mapmode-o

There are six sets of mappings
- For Normal mode: When typing commands.
- For Visual mode: When typing commands while the Visual area is highlighted.
- For Select mode: like Visual mode but typing text replaces the selection.
- For Operator-pending mode: When an operator is pending (after "d", "y", "c",
  etc.).  See below: omap-info.
- For Insert mode.  These are also used in Replace mode.
- For Command-line mode: When entering a ":" or "/" command.

Special case: While typing a count for a command in Normal mode, mapping zero
is disabled.  This makes it possible to map zero without making it impossible
to type a count with a zero.

Special case: While typing a count for a command in Normal mode, mapping zero
is disabled.  This makes it possible to map zero without making it impossible
to type a count with a zero.

                                                map-overview map-modes
Overview of which map command works in which mode.  More details below.
     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

Same information in a table:


                                                        map-table
         Mode  | Norm | Ins | Cmd | Vis | Sel | Opr | Term | Lang |
Command        +------+-----+-----+-----+-----+-----+------+------+
[nore]map      | yes  |  -  |  -  | yes | yes | yes |  -   |  -   |
n[nore]map     | yes  |  -  |  -  |  -  |  -  |  -  |  -   |  -   |
[nore]map!     |  -   | yes | yes |  -  |  -  |  -  |  -   |  -   |
i[nore]map     |  -   | yes |  -  |  -  |  -  |  -  |  -   |  -   |
c[nore]map     |  -   |  -  | yes |  -  |  -  |  -  |  -   |  -   |
v[nore]map     |  -   |  -  |  -  | yes | yes |  -  |  -   |  -   |
x[nore]map     |  -   |  -  |  -  | yes |  -  |  -  |  -   |  -   |
s[nore]map     |  -   |  -  |  -  |  -  | yes |  -  |  -   |  -   |
o[nore]map     |  -   |  -  |  -  |  -  |  -  | yes |  -   |  -   |
t[nore]map     |  -   |  -  |  -  |  -  |  -  |  -  | yes  |  -   |
l[nore]map     |  -   | yes | yes |  -  |  -  |  -  |  -   | yes  |

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值