Vim

按键映射

使用 :map 命令家族你可以定义属于你自己的快捷键。该家族的每一个命令都限定在特定的模式下。从技术上来说 VIM 自带高达 12 中模式,其中 6 种可以被映射。另外一些命令作用于多种模式:

递归 非递归 模式
:map :noremap normal, visual, operator-pending
:nmap :nnoremap normal
:xmap :xnoremap visual
:cmap :cnoremap command-line
:omap :onoremap operator-pending
:imap :inoremap insert

例如:这个自定义的快捷键只在普通模式下工作。

:nmap <space> :echo "foo"<cr>

使用 :nunmap 可以取消这个映射。对于更少数,不常见的模式(或者他们的组合),查看 :h map-modes。到现在为止还好,对新手而言有一个问题会困扰他们::nmap递归执行 的!结果是,右边执行可能的映射。你自定义了一个简单的映射去输出“Foo”:

:nmap b :echo "Foo"<cr>

但是如果你想要映射 b (回退一个单词)的默认功能到一个键上呢?

:nmap a b

如果你敲击a,我们期望着光标回退到上一个单词,但是实际情况是“Foo”被输出到命令行里!因为在右边,b 已经被映射到别的行为上了,换句话说就是 :echo "Foo"。解决此问题的正确方法是使用一种 非递归 的映射代替:

:nnoremap a b

经验法则:除递归映射是必须的,否则总是使用非递归映射。通过不给一个右值来检查你的映射。比如:nmap 显示所以普通模式下的映射,:nmap 显示所有以 键开头的普通模式下的映射。如果你想禁止用标准映射,把他们映射到特殊字符 上,例如::noremap 。相关帮助:

:h key-notation
:h mapping
:h 05.3