vim_thumb

Learning Vimscript The Hard Way — (3) Basic Mapping/基础映射

基础映射

如果说,Vimscript 有一个特性可以让你最终放下其他转而使用 Vim (bend Vim to your will more than any other),那一定是键盘映射 (the ability to map keys) ,键盘映射可以让你告诉 Vim:

当我按这个键的时候,我想你干这样的事情,而不是你常常做的那样。

我们现在就要从常规模式里面的键盘映射开始。在后面的章节里面我们才会谈及在插入模式和其他模式里面的键盘映射。

向文件里面输入几行文本,然后运行:

:map – x

将你的光标移动到文本中的某个地方,按一下  (减号)。注意 Vim 把你光标所在的字符删掉了,就好像你按了一下  x 一样。

我们已经有一个“删除光标所在的字符”的键【意思是一个键映射到一个键还不够酷】,因此让我们做一些更有用的东西。运行这个命令:

:map – dd

现在将你的光标移动到一行里面的随便什么位置,然后再次按一下 (减号)。这次 Vim 把整行都删掉了,因为 dd 干的就是这些。

特殊字符

你可以使用 来向 Vim 表示特殊的键。尝试下面的命令:

:map <space> viw

将你的光标放在一个单词上面,然后按一下空格键。Vim 会高亮选择这个单词。

你也可以映射诸如 CtrlAlt 的辅助间。运行这个:

:map <c-d> dd

现在按一下 Ctrl+d,就会运行 dd 这个命令。

注释

记得我们在第一课里面讲到有关注释的内容吗?键映射是 Vim 注释不起作用的场合之一。试一下下面这个命令:

:map <space> viw ” Select word

如果你现在按一下空格,就一定会发生一些可怕的事情。为啥呢?

当你现在按了一下空格键,Vim 就会觉得你是想他做

viw<space>”<space>Select<space>word

【这些按键】所做的东西。这显然不是我们所希望的。

如果你想仔细看一下这个映射,你可能会发现一些奇怪的东西。花几分钟,指出当你使用它的时候,准确地说发生了些什么,为什么。

如果你真的没搞清楚,那也别担心,我们马上会告诉你更多。

【译注

看样子,确切的过程是这样的:

第一个 viw 正常运行,将当前的单词选中。

紧接着是一个空格键 <space>,可是它触发了一个递归!它调用了一次这长串命令:

 viw<space>”<space>Select<space>word

这次,v 会关闭高亮选中,然后 i 进入了插入模式!

然后紧接着的 w 及后面的内容(w ” Select word),将会在插入模式中被输入。

这是第二层调用,结束之后回到第一层调用的第一个空格之后,把后面的内容(” Select word)也在插入模式中输入,然后最后停留在插入模式!

这里的关键点在于,键盘映射是会递归的!一不小心就会触发一些极度怪异的行为。

练习

映射  (减号)来删除当前行,然后将它粘贴到所在行之后。这可以让你用一个按键下移你文件中的行。

将那个映射命令添加到你的 ~/.vimrc 文件中,使得每次你启动 Vim 的时候都可以用到它。

指出怎么可以映射 _(下划线)键来将行上移而不是下移。

将这个映射也加到 ~/.vimrc 里面去。

【译注:

我的方案是:

map – ddp
map _ k-k

猜一下怎么删除映射以恢复它原有的行为。

【译注:

哈哈,貌似将键映射会它本身就可以的呢!例如:

map x x

这样就可以把 x 的映射还原的!

后话,发现很傻,原来正确的删除映射的命令是:

unmap xxx


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

原文链接:https://www.huangwenchao.com.cn/2014/10/vimscript-hard-3.html【Learning Vimscript The Hard Way — (3) Basic Mapping/基础映射】

发表评论

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