============
Vim有个缩写词的功能,它类似于按键映射,但是只能用于插入,替换和命令模式。它不仅功能强大而且极具扩展性,不过我们这里只讲解最常用的功能。
我们这本书里只讨论插入模式下的缩写,运行下面的命令:
:iabbrev adn and
现在进入insert模式,然后输入:
One adn two
在你输入完adn后面的空格之后,vim就换将adn替换为and
缩写的最主要的用处是用来进行输入校正。运行下面的命令:
:iabbrev waht what
:iabbrev tehn then
再次进入insert模式,输入下面的文本:
Well, I don't know waht we should do tehn.
现在两个缩写都起作用了,哪怕你在第二个缩写后面没有输入空格。
============
如果你当前输入的内容不是关键词的话,vim会用缩写来代替你的输入。非关键词就是那些不在iskeyword选项里的词。运行下面的命令:
:set iskeyword?
你会看到类似于iskeyword=@,48-75,_,192-255的输出。这个格式比较复杂,但是它大致上说明了以下所有的词都是关键词:
所有的在192到255之间的ASCII字符(一些特殊的ASCII字符)。
如果你想阅读关于这个选项的具体描述,你可以用:help isfname命令,但是我提醒你如果你不想读的比较痛苦的话,最好在阅读之前喝点酒。
如果只是想用缩写的话,你只要记住只要你输入的不是字母,数字或者是下划线的话,缩写都会有效的。
============
缩写不仅仅只是用来进行输入校正,它还有其他的功能。让我们添加一些可以在实际的文本编辑里用到的东西。运行下面的命令:
:iabbrev @@ [email protected]
:iabbrev ccopy Copyright 2011 Steve Losh, all
把上面的邮箱和名称换成你自己的,然后在insert模式下试试。
这个缩写可以用几个简单的字符代替你经常要输入的一大段文本,这个会节省你很多时间的,并且会减少对你的手指的磨损。
============
如果你认为缩写和映射差不多的话,这是对的。但是它们的用途是不一样的。我们看看下面的例子:
:inoremap ssig --<cr>Steve Losh<cr>[email protected]
这个映射可以让你很快的输入自己的签名,在插入模式下试试。
这个命令也确实很不错,但是存在一个问题。在插入模式下输入下面的文本:
Larry Lessig wrote the book "Remix".
你会发现Vim会扩展Larry的名字里的“ssig”。映射是不会考虑映射字符前面或者后面的字符的——它只对你输入的字符串进行映射。
删除上面的映射,用下面缩写来代替上面的功能:
:iunmap ssig
:iabbrev ssig --<cr>Steve Losh<cr>[email protected]
再试试缩写
现在vim会考虑你输入的缩写词的前后的文本,并且只会在需要的时候进行替换。
============