如果说Vimscript有一个特性使得你能够按照你的意愿定制Vim,那就非键盘映射莫属。 你可以通过键盘映射告诉Vim:
> 当我按下这个键时,我需要你放弃默认操作,按我的想法做。
我们先从normal模式的键盘映射开始。我们将在下一章节讨论insert模式和其他模式下的 键盘映射。
随意在文本中敲写几行文字,然后运行命令:
~~~
:map - x
~~~
将光标置于文本中的某处,按下`-`。注意Vim删除了当前光标下的字符,就好像你按了`x`一样。
我们本来就有个按键用于 "删除当前光标下的字符" ,所以我们将`-`重新映射到稍微有用的 功能。执行命令:
~~~
:map - dd
~~~
现在移动光标到任意一行,再按下`-`,这次Vim删除了整行的文本,因为`dd`的功能就是删除整行。
## 特殊字符
你可以使用`<keyname>`告诉Vim一个特殊的按键。尝试如下命令:
~~~
:map <space> viw
~~~
移动光标到一个单词上,按下空格键。Vim将高亮选中整个单词。
你也可以映射修饰键入Ctrl和Alt。执行:
~~~
:map <c-d> dd
~~~
现在在键盘上按下`Ctrl+d`将执行`dd`命令。
## 注释
还记得我们在第一章讨论的注释么?键盘映射就无法使用注释。尝试如下命令:
~~~
:map <space> viw " Select word
~~~
现在你再按下空格键,一些恐怖的事情就会发生。想一想为什么会这样呢?
当你按下空格键时,Vim认为你是想执行命令`viw<space>"<space>Select<space>word`。 很明显,这不是你的本意。
如果你仔细查看了这个映射的结果,可能你会发现一些奇怪的事。利用几分钟时间, 弄明白使用这个映射时到底发生了什么,以及 _为什么_ 会是那样的结果。
暂时搞不明白也不要担心,我们很快就会再次谈论这个问题。
## 练习
映射按键`-`为 "删除当前行,然后将其粘贴到下一行" 。然后你就可以一次按键就将一行 文本移动到下一行。
将那个映射命令添加到你的`~/.vimrc`文件中,以后每次启动Vim你都可以使用那个映射了。
试试如何映射按键`_`,使其将当前行上移一行。
将这个映射也加到你的的`~/.vimrc`文件中。
想想如果你想取消一个映射或重置一个按键为默认功能时该怎么操作。
- 前言
- 鸣谢
- 预备知识
- 打印信息
- 设置选项
- 基本映射
- 模式映射
- 精确映射
- Leaders
- 编辑你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 锻炼你的手指
- 本地缓冲区的选项设置和映射
- 自动命令
- 本地缓冲区缩写
- 自动命令组
- Operator-Pending映射
- 更多Operator-Pending映射
- 状态条
- 负责任的编码
- 变量
- 变量作用域
- 条件语句
- 比较
- 函数
- 函数参数
- 数字
- 字符串
- 字符串函数
- Execute命令
- Normal命令
- 执行normal!
- 基本的正则表达式
- 实例研究:Grep 运算符(Operator),第一部分
- 实例研究:Grep运算符(Operator),第二部分
- 实例研究:Grep运算符(Operator),第三部分
- 列表
- 循环
- 字典
- 切换
- 函数式编程
- 路径
- 创建一个完整的插件
- 旧社会下的插件配置方式
- 新希望:用Pathogen配置插件
- 检测文件类型
- 基本语法高亮
- 高级语法高亮
- 更高级的语法高亮
- 基本折叠
- 高级折叠
- 段移动原理
- Potion段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?