阅读(971) (0)

Vimscript Leaders

2016-02-24 16:02:49 更新

我们已经学了一种不会让我们发狂的键盘映射方法,但是你可以注意到另外一个问题。

每次我们像:nnoremap <space> dd这样映射一个按键都会覆盖掉<space>的原有功能。 如果哪天我们想用<space>了,怎么办?

有些按键你平常使用并不需要用到。你几乎永远不会用到-、 HL<space><cr> 和<bs>这些按键的功能(当然,是在normal模式下)。依据你的工作方式,可能还有其他你 不会用到的按键。

这些按键都可以随意映射,但是只有这6个按键貌似不够吧。难道为Vim称道的可定制传说 有问题?

映射按键序列

不像Emacs,Vim可以映射多个按键。运行下面命令:

:nnoremap -d dd
:nnoremap -c ddO

norma模式下快读敲入 -d-c查看效果。第一个映射作用是删除一行,第二个是 删除一行并进入insert模式。

这就意味着你可以用一个你不常用的按键(如-)作为“前缀”,后接其它字符作为一个整体 进行映射。你需要多敲一个按键以执行这些映射,多一个按键而已,很容易就记住了。

如果你也认为这是个好方法,我可以告诉你,Vim已经支持这种机制。

Leader

我们称这个“前缀”为“leader”。你可以按你的喜好设置你的leader键。运行命令:

:let mapleader = "-"

你可以替换-为你喜欢的按键。尽管会屏蔽一个有用的功能,但我个人使用的是,,因为这个键比较 比较容易按到。

当你创建新的映射时,你可以使用<leader>表示“我设置的leader按键”。运行命令:

:nnoremap <leader>d dd

现在试试按下你的leader按键和d。Vim会删除当前行。

然而为何每次都要繁琐的设置<leader>?为什么创建映射时不直接敲入你的“前缀”按键? 原因主要有三个。

首先,你某天可能会想要更换你的“leader”。在一个地方定义它使得更方便更换它。

第二,其他人看你的~/.vimrc文件时,一旦看到<leader>就能够立即知道你的用意。如果他们 喜欢你的~/.vimrc配置,即使他们使用不同的leader也可以简单的复制你的映射配置。

最后,许多Vim插件都会创建以<leader>开头的映射。如果你已经设置了leader,你会更容易上手 使用那些插件。

Local Leader

Vim有另外一个“leader”成为“local leader“。这个leader用于那些只对某类文件 (如Python文件、HTML文件)而设置的映射。

本书将在后续章节讲述如何为特定类型的文件创建映射,但你可以现在创建一个“localleader”:

:let maplocalleader = "\\"

注意我们使用\\而不是\,因为\在Vimscript中是转义字符。我们将在后续章节 讲到这个。

现在你就可以在映射中使用<localleader>了,使用方法和<leader>一样(当然, 你要使用另外一个前缀)。

如果你不喜欢反斜线,请随意更改它。

练习

阅读:help mapleader

阅读:help maplocalleader

在你的~/.vimrc文件中设置mapleadermaplocalleader

增加<leader>前缀到之前章节中你添加到~/.vimrc文件中的映射命令, 防止那些映射覆盖了默认的按键作用。