更多的映射

我知道到目前为止已经讨论了很多关于映射的东西,但现在我们还是要再次练习它们。 映射能让编辑 Vim 更富有成效,而且也是最简单、快速的方法之一,所以更多的专注于此是有好处的。

有一个概念在以前的例子里出现过多次,但是我们没有明确地讨论过,那就是映射多键序列。

运行以下命令:

:nnoremap jk dd

现在确保是在普通模式下,并且按下 j 紧接着按下 k。Vim 就会删除当前行。

现在试试只按下 j ,然后等一会。如果你没在 j 后快速按下 k, Vim 判断为你并不想激活这个映射,然后就会执行 j 平常的功能(向下移动一行)。

这个映射会使得移动变得困难,所以让我们删除它。运行以下命令:

:nunmap jk

现在在普通模式下键入 jk 会和平常一样向下移动一行,然后向上一行。

更复杂的映射

到目前为止,已经见过了一大堆简单的映射,所以是时候看看更多猛料了。运行以下命令:

:nnoremap <leader>" viw<esc>a"<esc>bi"<esc>lel

那是一个非常有趣的映射!那么,赶紧试试看。 进入普通模式,把你的光标放到文本中的一个单词上,并且键入 <leader>"。 Vim 会用双引号把这个单词包围起来!

这个是如何工作的?让我们把它拆成一块一块的,然后来思考每一部分做了什么:

viw<esc>a"<esc>bi"<esc>lel

记住:因为我们用了 nnoremap 而不是 nmap,所以,如果你已经映射过任何这个序列中的键,那也不要紧。

希望你能看出 Vim 的映射不但拥有无限潜力,而且能变得多么的难以理解。

练习

创建一个映射,使得和我们刚刚看到的类似,但是用单引号替代双引号。

试试使用 vnoremap 来添加一个映射,使得能把任何可视化选择了的文本放到引号里。 你可能会需要 `<`> 命令,所以,通过 :help `< 来研究他们。

在普通模式中,映射 H 为移动到当前行的开头。因为 h 是左移,那就可以把 H 看做是更“强力的” h

在普通模式中,映射 L 为移动到当前行的末尾。因为 l 是右移,那就可以把 L 看做是更“强力的” l

阅读 :help H:help L,查明刚刚覆写掉了什么命令。 并确定你是不是在乎这些。

把所有这些映射添加到 ~/.vimrc 文件中,务必要使用 “编辑 ~/.vimrc” 和 “载入执行 ~/.vimrc” 的映射来做这些事。

原文地址:http://learnvimscriptthehardway.stevelosh.com/chapters/09.html