vim_thumb

Learning Vimscript The Hard Way — (9) More Mappings/更多的映射

更多的映射

到现在我们关于映射已经说了很多了,但是我们现在正准备再练一练它们。映射是让你的 Vim 变得更高产最容易和最快捷的方式,所以这里有必要再仔细关注一下。

有一个概念,我们已经在一些例子中见过了,但是我们还没有正式地讨论过,那就是对多键序列的映射。

运行下面的命令:

:nnoremap jk dd

现在确认一下你在常规模式,然后快速连续按一下 j 键和 k 键。Vim 会把当前行删掉。

现在试一下先按一下 j 然后等一下下。如果你不是在按 j 之后快速地按下 k,Vim 就会认为你不是想触发这个映射,转而执行 j 默认的功能(光标下移一行)。

这个映射会搞得你很痛苦,所以把它删掉吧。运行下面的命令:

:nunmap jk

现在在常规模式下面键入 jk,就可以像往常一样,将光标下移然后上移一行。

一个更复杂的映射

到现在你已经见过很多简单的映射了,所以是时候让你看一下更大的福利【a bit more meat】。运行下面的命令:

:nnoremap <leader>” viw<esc>a”<esc>hbi”<esc>lel

【天哪】现在这是一个很有趣的映射!先去试试。进入常规模式,将你的光标放在一个单词上面,然后键入 <leader>”。Vim 会给当前的单词加上引号。

这是怎么做到的呢?让我们将它拆开看看每一块都做了些什么:

viw<esc>a”<esc>hbi”<esc>lel
  • viw: 选中当前的单词
  • <esc>: 退出可视化模式,这会让光标停留在这个单词的最后一个字母后面
  • a: 在当前的字符后面进入插入模式
  • : 在文本中插入一个 (双引号),因为我们正处于插入模式
  • <esc>: 返回常规模式
  • h: 光标左移一个字符
  • b: 光标返回单词的开头
  • i: 在当前光标的位置进入插入模式
  • : 再次向文本插入一个 (双引号)
  • <esc>: 返回常规模式
  • l: 光标右移一个字符,这会让你的光标停留在单词的第一个字符处
  • e: 光标移动到单词的结尾
  • l: 光标右移一个字符,这会让你的光标停留在后面的双引号上

记住,因为我们用的是 nnoremap 而不是 nmap,当你的目标序列里面出现些什么别的组合【被映射到其他键】的时候就没什么关系了。Vim 会对里面的键全部调用默认功能。

爽吧(Hopefully),现在你可以看到 Vim 的键盘映射是多么的厉害【原文 potential,具有潜力的】,正如他们的如此深奥(unreadable)一般。

练习

创建一个跟刚才类似的映射,但是这次加的是单引号而不是双引号。

【译注:

nnoremap ” viwi”hbi”lel nnoremap ‘ viwi’hbi’lel

试一下使用 vnoremap 来添加一个映射,可以让你在可视化模式里,为你选中部分的内容加上引号。你可能会用到 &lt;</strong></span> 和 <span style="color: #0000ff;"><strong>> 命令,因此有必要去读一下 :help `<

【译注:

vnoremap <leader>” <esc>`<i”<esc>`>a”<esc> vnoremap <leader>’ <esc>`<i'<esc>`>a'<esc>

另外,&lt;</strong></span> 和 <span style="color: #0000ff;"><strong>> 的作用是,将光标跳转到上一个可视化选区的开头和结尾。

将常规模式下面的 H 映射,让光标到跳转到当前行首。因为 h 是向左移,因此你可以将大写的 H 理解为加强版的 h

将常规模式下面的 L 映射,让光标到跳转到当前行末。因为 l 是向左移,因此你可以将大写的 L 理解为加强版的 l

【译注:

noremap H 0 noremap L $

感觉在选择模式下这两个键也可以是相同的行为,因此我用了 noremap 而不是 nnoremap

:help H:help L 查看一下你刚才的映射覆盖了原来的什么命令。看一下这些被覆盖的功能你是否真的不要了。

【译注:

然后,H 的原生功能是跳转到当前屏幕的第一行的第一个非空白字符(如果有,如果全空白就是第一行末尾。)L 的原生功能是跳转到当前屏幕的最后一行的第一个非空白字符(如果有,如果全空白就是第一行末尾。)

将以上这些都加到你的 ~/.vimrc 里面去,记得还是要用之前的“编辑我的 ~/.vimrc”和“source 我的 ~/.vimrc”映射来做这些。【加强一下肌肉记忆】


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/10/vimscript-hard-9.html【Learning Vimscript The Hard Way — (9) More Mappings/更多的映射】

发表评论

电子邮件地址不会被公开。 必填项已用*标注