🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
我们已经学了一种不会让我们发狂的键盘映射方法,但是你可以注意到另外一个问题。 每次我们像`: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”。你可以按你的喜好设置你的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`文件中设置`mapleader`和`maplocalleader`。 增加`<leader>`前缀到之前章节中你添加到`~/.vimrc`文件中的映射命令, 防止那些映射覆盖了默认的按键作用。