vim的map学习

VIM 参考手册,学习 vim 8.0

键映射

{lhs} 表示用于映射的命令,{rhs} 表示被映射的命令 。

列出映射

首先我们应该先了解vim的映射有哪些模式,以及模式的标志。当使用命令 :map 时,可以列出已经存在的映射有哪些,前面两栏的字符对应的模式含义如下表。

字符生效模式
<Space>普通、可视、选择和操作符等待
n普通
v可视和选择
s选择
x可视
o操作符等待
!插入和命令行
i插入
l插入、命令行和 Lang-Arg 模式的 ":lmap" 映射
c命令行

{rhs} 之前可能还会显示一些特殊字符*&@

字符代表含义
*不可重复
&仅脚本的局部映射可以被重映射
@缓冲区的局部映射

{lhs} 以后的第一个非空字符到行的末尾或 |(表示 {rhs} 结束)都被认为是 {rhs} 的一部分,允许 {rhs} 以空格结尾。

如果 verbose 非零,列出键映射的同时可以显示它在哪里定义。例如:

1
2
3
4
:verbose map ,tt
n ,tt <Plug>(table-mode-tableize)
Last set from ~/.vim/bundle/vim-table-mode/plugin/table-mode.vim line
114

:verbose-cmd 说明详情。

映射命令

这一节介绍各种模式的映射命令。

命令含义
:?map {lhs} {rhs}映射命令作用的模式中的可嵌套的映射
:?noremap {lhs} {rhs}映射命令作用的模式中不可嵌套的映射
:?unmap {lhs}删除映射命令作用的模式中 {lhs} 映射
:?mapclear删除映射命令作用的模式中的所有映射
:?map列出映射命令作用的模式中的所有的键映射
:?map {lhs}列出映射命令作用的模式中的以 {lhs} 开头的键映射系列

保存和恢复当前映射可以参考 :mkexrc

当两个映射以相同的字符顺序开始,它们是有二义性的。vim 会读入所有的字符后进行判断映射哪个命令。

映射特殊键

特殊参数

"<buffer>","<nowait>","<silent>","<special>"、"<script>"、"<expr>" 和"<unique>" 可以按任意顺序使用。它们必须紧跟在命令的后边,而在其它任何参数的前边。

<buffer>

如果这些命令的第一个参数是 "<buffer>",映射将只局限于当前的缓冲区内。局部缓冲区映射在全局映射之前被应用。"<buffer>" 参数也可以用于清除映射: :unmap <buffer> ,w :mapclear <buffer> 当一个缓冲区被删除时局部映射也会被清除,但是在缓冲区unload时不会清除局部映射,局部选项值也是如此。缓冲区局部映射优先于全局映射。如果缓冲区局部映射和全局映射完全相同,Vim 使用缓冲区局部映射。

<nowait>

如果映射以 <nowait> 定义的话,Vim 立即使用完整出现的映射,即便有一个更长的映射使用相同的前缀。

<silent>

定义一个映射时不在命令行上回显该映射,使用 <silent> 参数。

<special>

用于不希望看到设置 'cpoptions' 时出现的副作用的场合。例如: :map <special> <F12> /Header<CR>

<script>

<unique>

如果给用于定义新映射或缩写的命令的一个参数是 "<unique>" ,并且该映射或缩写已经存在,则该命令会失败。

<expr>

如果给用于定义新映射或缩写的命令的第一个参数是 "<expr>",那么参数会作为表达式来进行计算,结果作为实际使用的 {rhs}

特殊字符

CTRL-V可以作为用于映射和缩写的特殊字符。当 cpoptions 不包含'B' 时,反斜杠也可起到 CTRL-V 一样的作用,这时可以完全地使用 <> 记法。

映射反斜杠使用<Bslash>,避免嵌套。

要在 {lhs} 中包含一个空格,在前面输入一个 CTRL-V (每个空格之前实际要输入两个 CTRL-V)。如果你需要 {rhs} 以空格开头,使用 "<Space>"。

什么也不做的映射是在在 {rhs} 中使用 "<Nop>"。

本文结束感谢您的阅读
感谢打赏,继续前行!