迄今为止我们已经说了很多mappings的内容,但现在我们要再次实践一下。mappings是 使得Vim编辑更为高效的方便快捷途径之一,有必要多加用心。
有个概念在多个例子中出现过,但是我们都没有明确解释,那就是多字符mappings的连续性。
运行如下命令:
~~~
:nnoremap jk dd
~~~
确保你出于normal模式,快速输入`jk`。Vim会删除当前行。
现在试试先输入`j`,停顿一下。如果你输入`j`后没有快速输入`k`,Vim就会判定你不想 生效那个映射,而是将`j`按默认操作运行(下移一行)。
这个映射会给光标移动操作带来麻烦,我们先删除它。运行下面的命令:
~~~
:nunmap jk
~~~
现在normal模式下快速输入`jk`会像往常一样下移一行然后又上移一行。
## 一个更为复杂的Mapping
你已经见过很多简单的mappings了,是时候看看一些复杂的了。运行下面的命令:
~~~
:nnoremap <leader>" viw<esc>a"<esc>hbi"<esc>lel
~~~
那是一个有趣的mappings!你自己可以先试试。进入normal模式,移动光标至一个单词, 输入`<leader>"`。Vim将那个单词用双引号包围!
它是如何工作的呢?我们拆分这个映射并逐个解释:
~~~
viw<esc>a"<esc>hbi"<esc>lel
~~~
* `viw`: 高亮选中单词
* `<esc>`: 退出visual模式,此时光标会在单词的最后一个字符上
* `a`: 移动光标至当前位置之 _后_ 并进入insert模式
* `"`: 插入一个`"`
* `<esc>`: 返回到normal模式
* `h`: 左移一个字符
* `b`: 移动光标至单词头部
* `i`: 移动光标至当前位置之 _前_ 并进入insert模式
* `"`: 插入一个`"`
* `<esc>`: 返回到normal模式
* `l`: 右移一个字符,光标置于单词的头部
* `e`: 移动光标至单词尾部
* `l`: 右移一个字符,置光标位置在第一个添加的引号上
记住:因为我们使用的是`nnoremap`而不是`nmap`,所以尽管你映射了字符序列中的字符 也不会有影响。Vim会将其中的字符按默认功能执行。
希望你能看出Vim mappings的潜能及随之引发的阅读困难。
## Exercises
像刚才一样创建一个mapping,用单引号而不是双引号。
试试用`vnoremap`添加一个mapping,使其能够用引号将你 _高亮选中_ 的文本包裹。 你可能会需要```<``和```>``命令,所以先执行``:help `<``看看帮助文档。
将normal模式下的`H`映射为移动到当前行的首部。`h`是左移,所以你可以认为`H`是 “加强版”的`h`、
将normal模式下的`L`映射为移动到当前行的尾部。`l`是右移,所以你可以认为`L`是 “加强版”的`l`、
读取帮助文档`:help H`和`:help L`看看你覆盖了哪些命令。考虑考虑这会不会影响你。
将这些mappings添加到你的`~/.vimrc`文件中,确保用你的“编辑`~/.vimrc`”和“重读`~/.vimrc`” 映射操作~
- 前言
- 鸣谢
- 预备知识
- 打印信息
- 设置选项
- 基本映射
- 模式映射
- 精确映射
- Leaders
- 编辑你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 锻炼你的手指
- 本地缓冲区的选项设置和映射
- 自动命令
- 本地缓冲区缩写
- 自动命令组
- Operator-Pending映射
- 更多Operator-Pending映射
- 状态条
- 负责任的编码
- 变量
- 变量作用域
- 条件语句
- 比较
- 函数
- 函数参数
- 数字
- 字符串
- 字符串函数
- Execute命令
- Normal命令
- 执行normal!
- 基本的正则表达式
- 实例研究:Grep 运算符(Operator),第一部分
- 实例研究:Grep运算符(Operator),第二部分
- 实例研究:Grep运算符(Operator),第三部分
- 列表
- 循环
- 字典
- 切换
- 函数式编程
- 路径
- 创建一个完整的插件
- 旧社会下的插件配置方式
- 新希望:用Pathogen配置插件
- 检测文件类型
- 基本语法高亮
- 高级语法高亮
- 更高级的语法高亮
- 基本折叠
- 高级折叠
- 段移动原理
- Potion段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?