1 Introduction

help map-commands
键映射用于改变输入键的含义。最常见的用途是把功能键定义为一系列的命令。

1.1 format

  • 正常格式: map [arguments] {lhs} {rhs}, 将某些{lhs}映射为{rhs}.
  • 删除映射格式: unmap [arguments] {lhs}
  • 清除映射格式: mapclear [arguments]

{rhs}特殊用法

1
2
3
.             " 表示不可重映射
& " 表示脚本的局部映射可以被重映射
@ " 表示缓冲区的局部映射

1.2 arguments

help map-arguments

1
2
3
4
5
6
7
8
9
<buffer>                 " 映射仅仅作用于当前缓冲区, 之后可以在另一个缓冲区
" 设置同样键值, 不同效果的map
<nowait> " 不考虑二义性
<silent> " 不在命令行上回显命令
<special> " 用于定义某些特殊键有副作用的场合
<unique> " 定义命令的同时进行键检查,判断键值是否已经存在
<Leader> " 其中<Leader>的值有mapleader来确定,默认为'\'
<expr> " 参数作为表达式来进行计算,即最后为计算后的值
" 插入顺序的列表编号,之后返回

2 Format

2.1 Model

关于vim模式, 见说明.

1
2
3
4
5
6
7
8
9
Null              " 在普通, 可视, 选择, 操作符等待模式下生效
n " 在普通模式下生效
v " 在可视/选择模式下生效
i " 在插入模式下生效
c " 在命令行模式下生效
l " 在插入/命令行/Lang-Arg模式下生效
s " 在选择模式下生效
x " 在可视模式下
o " 在操作符等待模式下生效

2.2 修饰

1
2
3
4
nore              " 禁止对{rhs}进行映射扫描, 从而避免嵌套和递归,
" 通常用于重新定义某一个已经存在的命令.

un " 删除映射,其中可以更随上面的各种前缀

2.3 清除

mapclear—清除相关模式下的所有映射

1
2
mapclear                   " 清除普通模式下的所有映射
vmapclear " 清除可视模式下的所有映射

3 Rule

3.1 递归映射

递归:a映射为b,c映射为a,则c映射为b

1
2
3
map a b 
map c
" 上述两个命令等价于:map c b

3.2 二义性

help map-ambiguous

当两个映射以相同的字符顺序开始,它们是有二义性的。例如: >
    :imap aa foo
    :imap aaa bar
当 Vim 读入 "aa" 后,它需要取得另外一个字符才能决定应该映射 "aa" 还是 "aaa"。
这意味着输入 "aa" 后映射还不会展开,Vim 还在等待另一个字符。如果你接着输入一个
空格,那么将插入 "foo" 加上空格。如果你输入一个 "a",那么将插入 "bar"。

4 键表

1
2
3
4
5
6
7
8
9
<k0>-<k9>                " 0-9
<S-> " Shirt + 键
<C-> " Control + 键
<M-> " Alt + 键 或者 meta + 键
<A-> " Alt + 键
<Esc> " Esc键
<Space> " 空格键
<Tab> " tab键
<CR> " Enter键