##vim的安装
强烈推荐使用gvim而不是使用vim,因为gvim提供了比vim更丰富的功能,例如颜色和光标的表现。
###安装依赖库
:::java
sudo apt-get build-dep vim
sudo apt-get install mercurial
###下载vim 源程序
:::java
hg clone https://vim.googlecode.com/hg gvim
cd gvim
hg tags
hg update [tags]
###配置与安装vim
:::java
./configure \
--enable-multibyte \
--enable-perlinterp=yes \
--enable-pythoninterp=yes \
--enable-tclinterp \
--enable-rubyinterp \
--enable-cscope \
--enable-sniff \
--with-features=huge \
--enable-gui=gnome2 \
--with-compiledby=gavin
make && sudo make install
###vim 插件和配置
可以查看我的配置,地址是:https://github.com/gavinlin/vim-conf
##普通模式
当我们使用命令gvim [file],来打开文件时,gvim是处于普通模式的。gvim基本上有三种常用的模式,普通模式,编辑模式和命令模式。
其他很多编辑器默认只有一种模式,就是编辑模式,可能很多人会奇怪,为什么vim要分这么多种模式,而且默认是普通模式,而不是常识中的编辑模式。其实因为普通模式实在太重要了,很多操作都可以在普通模式中完成,这也是vim不同于其他编辑器的魅力所在,越深入学习,我就越认同了这点。
###undos
vim里面的undo,也就是撤销操作,可以通过在普通模式键入u来执行。如何从其他模式进入普通模式,我们只要按下Esc就可以了,通常是你键盘的左上角。u的强大之处在于,你对文本做的所有修改,都可以通过这个命令来撤销。这是我们经常会用到的命令。虽然人生不可以重来,但代码可以。
###组成可重复的变化
有一段英文文本,我们想删除最后一个词,光标停留在最后一个词的最后位置,如何做才能做到高效率的删除单词动作?
:::java
例如我们要删除以下句子的最后一个单词。
The end is nigh
有三种方法,分别是
:::java
db x
b dw
daw
这三种方法都只是打了三个按键就完成了操作,但是这其中有效率的问题,怎样比较?
对于第一种情况,db是删除了本光标之前的字母,直到空格,最后还要键入x来删除光标上的字。但我想重复动作的时候,.=x。
对于第二种情况,先使用b移动到单词头,再使用dw删除整个单词,.=dw
对于第三种情况,daw中的aw是a word的意思,所以整个命令就是删除一个单词的意思,.=daw
显然,当我们想重复删除一个单词的时候,第三种方法是最高的,因为我们只要按下.就可以重复动作。
###数数
vim下面的数数也是一大亮点,我们使用ctrl-a和ctrl-x来数数,什么意思呢?还是通过案例来解答。
下面有两行css代码,我们需要新增一行,并命名为.news 坐标改为-180px
:::css
.blog, .news { background-image: url(/sprite.png); }
.blog { background-position: 0px 0px }
普通的做法是先yyp第二行,把blog改为news,然后f0跳转到第一个0出现的位置再用i,编辑模式来修改。
下面让我们来看看加速的方法。
:::java
yyp
cW.news<Esc>
180<ctrl-x>

我们使用180<C-x>,来完成这个动作,其中<C-x>直接跳到本行数字的位置并进行减操作,前面的180,就是减180次,所以最后结果是-180。
###可以重复的话不要数数
有时候我们可以通过2dw来删除俩个词,也可以使用dw.来完成,这里更推荐后者,因为当只想删除一个词的时候,前者需要做的动作更多,而后者保证了撤销的粒度。但是这个不是绝对的,要根据实际问题来处理。
###联手抗敌
大部分vim的操作和移动命令可以组合来使用。这里我们可以看到他们是如何组合的。
d{动作}的组合很常用,例如dl删除单一字母,当然,我们可以使用x来完成。daw来删除一个单词,dap来删除一个段落,同样的还有c{动作}和y{动作}。
gU命令可以使单词变为大写,例如gUaw,gUap,又或者gUU
下面列出一些操作命令
| 触发键 | 影响 |
|---|---|
| c | 删除再编辑 |
| d | 删除 |
| y | 复制 |
| g~ | 大小写切换 |
| gu | 转为小写 |
| gU | 转为大写 |
| > | 向右tab |
| < | 向左tab |
| = | 对齐 |
| ! | 通过外部程序过滤行 |