Learning Vimscript The Hard Way — (6) Leaders/命令前缀

命令前缀(Leaders)

我们已经学会了不会让你以后抓狂的键盘映射的方法,但是你可能还没有意识到其实有更多的问题。

每次我们做诸如 :nnoremap <space> dd 这类的事情的时候,我们改写了 <space> 正常会做的东西【正常情况下这应该就是这么一串字符】。如果我们要输入这个内容,我们应该怎么做?

有一系列的键你平时在 Vim 里面是很少会用得着的。 , H, L, <space>, <cr><bs>,他们做的东西你几乎永远不需要(当然是在常规模式下)。根据你的工作方式,你可能会发现其他你永远用不着的键。

这些键用来映射就是安全的,但这才六个。但怎么来自定义我们的 Vim 神器(legendary)呢?

映射键序列

不像 Emacs,Vim 映射多个键来得更简单。运行下面的命令:

:nnoremap -d dd :nnoremap -c ddO

试一下他们,在常规模式中,快速按下 -d-c。上面第一个创建了一个删除整行的映射,而第二个“清空”了一个行,并且进入了插入模式。

这意味着你可以用一个你不在乎的键(例如 )作为“前缀”键,然后在其之上创建映射。这意味着你需要输入一个额外的键来激活映射,但这个额外的击键可以很容易地被肌肉记忆所吸收。

如果你觉得这是一个好主意,你就对了,这又要说到 Vim 已经有一个专门为这个“前缀”键工作的装置了!

命令前缀(Leaders)

【译注:

这个 leaders 真心不好译。其实就是前缀的意思嘛,起码在读到这里的时候我是这么认为的。

既然如此,我就翻阅了一下网上其他的翻译,看看有没有约定俗成的术语翻译。

不过还真是稀少啊,最后采取了这篇的译法,其实也相当贴切。但是后面的话还是在文中直接使用 leader 好了,这个术语其实感觉直接使用会更好理解。

Vim 将这个“前缀”键叫做“命令前缀(leader)”。你可以任意设置你的 leader 键。运行这个命令:

:let mapleader = “-“

你可以将 (减号) 换成任意你喜欢的键。我个人比较喜欢 ,(逗号),尽管它会覆盖掉一个很有用的功能,因为它相当容易输入。

当你正在创建映射的时候,你可以用 <leader> 来表示任意“我设置的 leader 键”。运行这个命令:

:nnoremap <leader>d dd

然后现在试一下先按你的 leader 键然后按 d。Vim 会删除掉当前行。

但是,为什么要操心这个 <leader> 呢?为什么不直接将你的“前缀”键直接写到你的映射命令里面呢?这有三个好的理由:

首先,你可能会迟些再决定常规的 leader 功能。在同一个地方定义以后改起来会方便些。【继承性】

其次,如果有人阅读你的 ~/.vimrc 的时候,他们会立即知道你写 <leader> 是什么个意思。即使他们用的不是同一个 leader,他们也可以简单地将你的映射复制到他们自己的 ~/.vimrc 中。【语义性】

最后,很多的 Vim 插件用 <leader> 开头去创建映射。如果你已经设置了 leader,他们就会相应地工作,并且你也能够很熟悉地去使用。【统一性】

局部 Leader(Local Leader)

Vim 有第二个“leader”键,叫做“局部 leader”。这个的意思就是说这个前缀仅对某类文件生效,例如 Python 文件或者 HTML 文件。

我们会在本书的后面谈及如何对特定的文件类型设置映射,但你现在可以直接创建你的“localleader”:

:let maplocalleader = “\\”

注意我们使用 \(两个反斜杠)而不仅仅是一个,因为在 Vimscript 字符穿里面 \(反斜杠)是转义字符。你迟一些就可以了解到更多。

现在你可以在映射中使用 <localleader>,然后它就会像 <leader> 一样工作。(当然,除了使用的键不一样。)

如果你觉得反斜杠用起来不舒服的话,尽管改成你喜欢的键。

练习

阅读 :help mapleader

阅读 :help maplocalleader

在你的 ~/.vimrc 里面设置 mapleader maplocalleader

在所有前面章节映射的键前面加上 <leader>,使得他们不会跟现有的键冲突。


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

原文链接:https://www.huangwenchao.com.cn/2014/10/vimscript-hard-6.html【Learning Vimscript The Hard Way — (6) Leaders/命令前缀】

发表评论

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