我们已经学了一种不会让我们发狂的键盘映射方法,但是你可以注意到另外一个问题。
每次我们像`: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`文件中的映射命令, 防止那些映射覆盖了默认的按键作用。
- 前言
- 鸣谢
- 预备知识
- 打印信息
- 设置选项
- 基本映射
- 模式映射
- 精确映射
- Leaders
- 编辑你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 锻炼你的手指
- 本地缓冲区的选项设置和映射
- 自动命令
- 本地缓冲区缩写
- 自动命令组
- Operator-Pending映射
- 更多Operator-Pending映射
- 状态条
- 负责任的编码
- 变量
- 变量作用域
- 条件语句
- 比较
- 函数
- 函数参数
- 数字
- 字符串
- 字符串函数
- Execute命令
- Normal命令
- 执行normal!
- 基本的正则表达式
- 实例研究:Grep 运算符(Operator),第一部分
- 实例研究:Grep运算符(Operator),第二部分
- 实例研究:Grep运算符(Operator),第三部分
- 列表
- 循环
- 字典
- 切换
- 函数式编程
- 路径
- 创建一个完整的插件
- 旧社会下的插件配置方式
- 新希望:用Pathogen配置插件
- 检测文件类型
- 基本语法高亮
- 高级语法高亮
- 更高级的语法高亮
- 基本折叠
- 高级折叠
- 段移动原理
- Potion段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?