我们已经学了一种不会让我们发狂的键盘映射方法,但是你可以注意到另外一个问题。
每次我们像:nnoremap <space> dd
这样映射一个按键都会覆盖掉<space>
的原有功能。 如果哪天我们想用<space>
了,怎么办?
有些按键你平常使用并不需要用到。你几乎永远不会用到-
、 H
、L
、<space>
、<cr>
和<bs>
这些按键的功能(当然,是在normal模式下)。依据你的工作方式,可能还有其他你 不会用到的按键。
这些按键都可以随意映射,但是只有这6个按键貌似不够吧。难道为Vim称道的可定制传说 有问题?
不像Emacs,Vim可以映射多个按键。运行下面命令:
:nnoremap -d dd
:nnoremap -c ddO
norma模式下快读敲入 -d
或-c
查看效果。第一个映射作用是删除一行,第二个是 删除一行并进入insert模式。
这就意味着你可以用一个你不常用的按键(如-
)作为“前缀”,后接其它字符作为一个整体 进行映射。你需要多敲一个按键以执行这些映射,多一个按键而已,很容易就记住了。
如果你也认为这是个好方法,我可以告诉你,Vim已经支持这种机制。
我们称这个“前缀”为“leader”。你可以按你的喜好设置你的leader键。运行命令:
:let mapleader = "-"
你可以替换-
为你喜欢的按键。尽管会屏蔽一个有用的功能,但我个人使用的是,
,因为这个键比较 比较容易按到。
当你创建新的映射时,你可以使用<leader>
表示“我设置的leader按键”。运行命令:
:nnoremap <leader>d dd
现在试试按下你的leader按键和d
。Vim会删除当前行。
然而为何每次都要繁琐的设置<leader>
?为什么创建映射时不直接敲入你的“前缀”按键? 原因主要有三个。
首先,你某天可能会想要更换你的“leader”。在一个地方定义它使得更方便更换它。
第二,其他人看你的~/.vimrc
文件时,一旦看到<leader>
就能够立即知道你的用意。如果他们 喜欢你的~/.vimrc
配置,即使他们使用不同的leader也可以简单的复制你的映射配置。
最后,许多Vim插件都会创建以<leader>
开头的映射。如果你已经设置了leader,你会更容易上手 使用那些插件。
Vim有另外一个“leader”成为“local leader“。这个leader用于那些只对某类文件 (如Python文件、HTML文件)而设置的映射。
本书将在后续章节讲述如何为特定类型的文件创建映射,但你可以现在创建一个“localleader”:
:let maplocalleader = "\\"
注意我们使用\\
而不是\
,因为\
在Vimscript中是转义字符。我们将在后续章节 讲到这个。
现在你就可以在映射中使用<localleader>
了,使用方法和<leader>
一样(当然, 你要使用另外一个前缀)。
如果你不喜欢反斜线,请随意更改它。
阅读:help mapleader
。
阅读:help maplocalleader
。
在你的~/.vimrc
文件中设置mapleader
和maplocalleader
。
增加<leader>
前缀到之前章节中你添加到~/.vimrc
文件中的映射命令, 防止那些映射覆盖了默认的按键作用。