众所周知vim的学习曲线很陡,但是正因为陡,所以学成之后不仅可以装B,还可以让你没有女朋友。 我无时无刻不在装B的道路上,加上vim特性多的罄竹难书,就像那天在freenode上#vim里的某个家伙说的, “我TMD已经用了3年vim,现在才知道还有这功能,vim界真是每天都有新鲜事啊”——哥自然要写点小众的 东西进一步提升B格。

常用的光标移动功能

hjkl这些基本功就不说了,另外像we这种基于单词的移动方式我自己很少用,甚至 不明白在f命令存在的情况下它们的存在还有什么意义。其实vim(和任何文本编辑器)里的光标移动无 非两种:纵向的和横向的。对纵向移动,numbers插件加上{行数}j{行数}k或者直接 用/?命令搜到想去的那行都是比较快的;而对横向移动,大多数情况下我都用f{字符}或者 t{字符}(当然还有FT)直接跳,另外一行里有几个相同字符的时候,可以直接用;命令重复跳 转,或者在F命令前加次数也行。

还有,在很久以前不知道从什么地方抄来的:

1
2
nnoremap H ^
nnoremap L $

^$分别是跳转到行首和行尾,但是这两个字符的位置……虽然我用的是HHKB Pro 2 PD-KB400B, 按起来还是挺别扭的,所以投机取巧地映射为上面那两个键,效果拔群。

快速编辑

说实话用vim就像玩轮滑,会玩的比走路快,还可以玩玩平花、高空动作,不会玩的是在自杀。不过话说 回来很多高手都是在屡次自杀未遂之后练成的,所以以下内容只是我的自杀记录而已,不一定合所有人 的胃口。

IAD应该地球人都知道,不用多说。我自己常用的还有i后缀和Visual Block模式。

i后缀:当光标在一对括号(())中间时,输入ci(可以马上替换掉括号内的内容,这招对[]{}<>也适用。把i换成a,可以连外面的括号也一起替换掉。ia也可以跟在d命令后面, 效果是只删除相应区域的内容,不进入Insert(不好意思中文不会写)模式。这个功能还可以识别 html和xml里的标签(tag),cit可以替换标签中的内容,dat则是删除整个标签,怎一个爽字了得。

Visual BlockNormal模式下输入<C-v>会进入这个模式,可以选择文本块,然后用I命令可以 在文本块前面插入内容,这在需要往每行的固定位置插入或者删除内容的时候非常有用。

另外,其实还有一组强大到犯法的命令:q录制操作和@回放操作。这在你要手工处理格式化数据,又 不想写脚本的时候非常有用,不过严格来说不算编辑命令就是了。

窗口操作

Vim里的窗口操作全都是<C-w>打头的,包括选择窗口。但是其实可以少敲一个键的,好像是很久很久以 前从这个人这里抄的:

1
2
3
4
noremap <C-j> <C-W>j
noremap <C-k> <C-W>k
noremap <C-h> <C-W>h
noremap <C-l> <C-W>l

复制操作

gvim下面操作X剪贴板的默认按键简直是让人按得惊心动魄,所以我是这样把它简化的:

1
2
3
4
5
noremap <leader>y "+y
noremap <leader>p "+p
noremap <leader>P "+P
noremap <leader>x "+x
noremap <leader>d "+d

这样当我输入<leader>yy的时候,就能把整行复制到剪贴板里。

其他

其实也没有了,想到再来继续装。