想起一个笑话:

  • 问:要怎样才能生成一个随机字符串呢?
  • 答:让一个新手退出 vim

为什么要学习使用 vim ?首先是有意思。它是基于模式的编辑器,与别不同。其次是显得特别专业。狂敲键盘,光标不停地在字里行间辗转腾挪,不需要鼠标就能做所有的事情。

至于怎样学。有人建议打开vim之后输入:help查看教程,认认真真看个把小时。但有更好的办法:直接在terminal输入vimtutor打开教程(有中文版)一边动手一边学,只需要20-30分钟,你就上手了。

用上几天之后,你可能觉得vim没有别人所说的那么强大,于是上网看看别人是怎么用的,多半你会跟随别人装上一堆插件,定制了好多命令,折腾一番后vim变得很慢有明显的卡顿感。一次偶然的机会你看到了一个号称“是21世纪的编辑器”的编辑器,它更酷。如果此时你离vim而去,那vim带给你的就只有挫败感和浪费时间。

所以为避免这种情况发生,请你先不要太早装插件,定制命令倒是可以有一些,比如显示行号、语法高亮、自动缩进、快速回到normal模式等等。

可以学习一些简单却十分强大的命令。之所以说简单,是因为你不需要学习新的命令,这些强大的命令全都由你已经知道的命令组成。

不知道你有没有发觉,入门教程以及网上其他一些教程只会教你删除一个单词或者删除一行,并没有教你删除从光标所在位置到同一行指定位置之间的单词,例如要删除下面这行文字中从 happens 到 till 之间的所有文字:

Magic happens when you combine the motions find and till with operators

你大概会图省事一直按x,或者先按dw,再一直按.,直到删光till前面的单词;这里介绍另外一种方法:dtt命令。

dtt命令由三个字母组成,每个字母都有其意义:

  • d 代表一种操作,这里是删除,还可以是yfcv中的任意一个
  • t 代表一种匹配范围,这里是‘直到’,还可以是fia中的任意一个。举例解释比较好: 有这样一个字符串:(How are you ?),假设光标在a的前面,如果你想删除直到问号前面的所有字符,就输入dt?;如果要删除直到右括号前面所有字符,就输入df?,可见ft的区别就是一个包含第三个字母,另一个是不包含;如果你要删除括号内的所有内容,(注意当前你的光标是在a前面)你可以输入di)或者di(,都是删除括号之内的内容,如果想把括号也删除了,就输入da)或者da(ai的关系也是包含与不包含的关系。
  • t 代表一种对象,这里只是一个字母,还可以是一个位置,比如^$开头和结尾。

如果你掌握了上面提到的常用命令,可以去装插件了。想装什么插件才去装,不要搞个 spf13 ,装一箩筐插件其实没什么好。 首先装个管理插件的插件:vundle,很多插件都支持用vundle安装,所以先装个vundle会方便很多。按官方指南一步步走也不难。 然后装个 autopairs,这样输入括号、引号会方便很多。 再装个YouCompleteMe,用来自动补全,官方说明比较详细,所有特性都装会比较麻烦一点,用vundle安装,等一会儿就好,如果它提示你要重新编译一下,你就按文档运行 install.py 脚本,如果运行脚本时出错,就按错误提示来做。 除此之外,推荐一个插件vim-easymotion,用来快速跳转到页面的某个位置的。

最后附上我的vimrc