Vimscript编程指南

缩写

============

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的输出。这个格式比较复杂,但是它大致上说明了以下所有的词都是关键词:

  • 下划线;
  • 所有的ACSII字母,包括大小写,包括它们重读的版本;
  • 所有的在48到57之间的ASCII字符(即是0-9);
  • 所有的在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会考虑你输入的缩写词的前后的文本,并且只会在需要的时候进行替换。

练习

============

  • 在你的vimrc文件里加入你经常输错的文本校正缩写。并且确保用上一节的映射功能来编辑你的vimrc文件
  • 添加你的个人邮箱,网站和签名的缩写词。
  • 罗列出你经常输入的文本,为它们建立缩写词。