Vim有个称为"abbreviations"的特性,与映射有点类似,但是它用于insert、replace和 command模式。这个特性灵活且强大,不过本节只会谈及最常用的用法。
本书只会讲述insert模式下的abbreviations。运行如下命令:
~~~
:iabbrev adn and
~~~
进入insert模式并输入:
~~~
One adn two.
~~~
在输入`adn`之后输入空格键,Vim会将其替换为`and`。
诸如这样的输入纠错是abbreviations的一个很实用的用法。运行命令:
~~~
:iabbrev waht what
:iabbrev tehn then
~~~
再次进入insert模式并输入:
~~~
Well, I don't know waht we should do tehn.
~~~
注意 _两个_ abbreviations的替换时机,第二个没有输入空格却也替换了。
## Keyword Characters
紧跟一个abbreviation输入"non-keyword character"后Vim会替换那个abbreviation。 "non-keyword character"指那些不在`iskeyword`选项中的字符。运行命令:
~~~
:set iskeyword?
~~~
你将看到类似于`iskeyword=@,48-57,_,192-255`的结果。这个格式很复杂,但本质上 "keyword characters"包含一下几种:
* 下划线字符 (`_`).
* 所有字母字符,包括大小写。
* ASCII值在48到57之间的字符(数字0-9)。
* ASCII值在192到255之间的字符(一些特殊ASCII字符)。
如果你想阅读这个选项格式的 _完整_ 描述,你可以运行命令`:help isfname`,另外 阅读之前最好准备点吃的。
你只要记住输入非字母、数字、下划线的字符就会引发abbreviations替换。
## 更多关于abbreviations
Abbreviations不仅仅只能纠错笔误。我们可以加几个日常编辑中常用的abbreviations。 运行如下命令:
~~~
:iabbrev @@ steve@stevelosh.com
:iabbrev ccopy Copyright 2013 Steve Losh, all rights reserved.
~~~
随意更换我的名字和邮箱地址为你的,然后试试这两个abbreviations吧~
这些abbreviations将你常用的一长串字符压缩至几个字符,省的每次都要那么麻烦。
Why Not Use Mappings? 为什么不用Mappings?
* * *
不错,abbreviations和mappings很像,但是他们的定位不同。看个例子:
运行命令:
~~~
:inoremap ssig -- <cr>Steve Losh<cr>steve@stevelosh.com
~~~
这个 _mapping_ 用于快速插入你的签名。进入insert模式并输入`ssig`试试看。
看起来一切正常,但是还有个问题。进入insert模式并输入如下文字:
~~~
Larry Lessig wrote the book "Remix".
~~~
注意到Vim将Larry名字中的`ssig`也替换了!mappings不管被映射字符串的前后字符是什么-- 它只在文本中查找指定的字符串并替换他们。
运行下面的命令删除上面的mappings并用一个abbreviation替换它:
~~~
:iunmap ssig
:iabbrev ssig -- <cr>Steve Losh<cr>steve@stevelosh.com
~~~
再次试试这个abbreviation。
这次Vim会注意`ssig`的前后字符,只会在需要的时候替换它。
## Exercises
在你的`~/.vimrc`文件中为经常拼写错误的单词增加abbreviations配置。一定要使用 上一章中你创建的mappings来重新打开读取`~/.vimrc`文件。
为你的邮箱地址、博客网址、签名添加abbreviations配置。
为你经常输入的文本添加abbreviations配置。
- 前言
- 鸣谢
- 预备知识
- 打印信息
- 设置选项
- 基本映射
- 模式映射
- 精确映射
- Leaders
- 编辑你的Vimrc文件
- Abbreviations
- 更多的Mappings
- 锻炼你的手指
- 本地缓冲区的选项设置和映射
- 自动命令
- 本地缓冲区缩写
- 自动命令组
- Operator-Pending映射
- 更多Operator-Pending映射
- 状态条
- 负责任的编码
- 变量
- 变量作用域
- 条件语句
- 比较
- 函数
- 函数参数
- 数字
- 字符串
- 字符串函数
- Execute命令
- Normal命令
- 执行normal!
- 基本的正则表达式
- 实例研究:Grep 运算符(Operator),第一部分
- 实例研究:Grep运算符(Operator),第二部分
- 实例研究:Grep运算符(Operator),第三部分
- 列表
- 循环
- 字典
- 切换
- 函数式编程
- 路径
- 创建一个完整的插件
- 旧社会下的插件配置方式
- 新希望:用Pathogen配置插件
- 检测文件类型
- 基本语法高亮
- 高级语法高亮
- 更高级的语法高亮
- 基本折叠
- 高级折叠
- 段移动原理
- Potion段移动
- 外部命令
- 自动加载
- 文档
- 发布
- 还剩下什么?