Tuesday, April 30, 2013

完全使用VIM一个月

之前的文章讲的,我是因为考虑要买一个HHKB键盘而决定使用VIM的,到现在已经使用有一个月了。虽然最终没有买HHKB键盘,不过学会了VIM这个也是一个让我觉得很得意的成就。现在自己很庆幸当时狠下心来学习了VIM,真的不愧是编辑器之神。

自己从毕业工作开始,使用过好几种编辑器,SourceInsight,Eclipse,UltraEdit,SublimeText,NotePad++这个单子还可以更长,这几个是自己感觉比较好的编辑器。期间也有试着学习Emacs,每次都放弃了。VIM自己一路来都在用,可是只是在需要远程简单编辑Linux上的一些文件时候用一下,VIM从来没有成为自己的主编辑器。这些编辑器中我使用最多的是SourceInsight和SublimeText。SourceInsight在看代码方面,特别是大型项目代码的时候,真的是有很大的优势,可是其编辑功能真的是太差了。SublimeText,我从看到它的第一眼就喜欢上了,可能是因为它的配色很和自己的胃口吧。自己特别喜欢SublimeText的Ctrl+P功能,Ctrl+D,多选功能,Column Edit,Per Project Setting。还有就是它选择丰富的插件系统,因为其插件支持Python,插件开发变得相对容易。还有就是其跨平台支持,这些有优点让SublimeText出道不到几年已经变成一个十分流行的编辑器,自己这次转换到VIM,在选择插件的时候就是参考了已经习惯的SublimeText来做选择,只有在VIM里面基本实现了日常开发需要的功能,才能够抛弃别的编辑器,100%使用VIM。

使用VIM,就是要全键盘工作,在编辑代码的时候抛弃鼠标,要想实现高效的浏览和编辑,定制自己称心容易记的组合键是必不可少的。你可以轻易的在网上找到别人的VIM配置,自己加以借鉴修改成适合自己的配置。自己的VIM基本配置一开始就使用没有修改过的The ultimate Vim configuration (vimrc) 只是插件从一开始我就选择自己要用的。在使用过程中,再慢慢修改到自己喜欢的配置。慢慢的,你的VIM配置就十分完整了。

VIM的学习曲线相对于除Emacs外的编辑器是很陡的,可是你一旦掌握,你就真心会喜欢上VIM,你就恨不得所有的日常使用程序都想要VIM的Key Binding。实际上学习VIM跟学习任何别的软件或者编程语言一样,没有什么捷径,唯一的途径就是使用,让自己天天使用,强迫自己只使用VIM,遇到问题就Google一下,找打解决办法。以我自己的经验来讲,当我强迫自己只使用VIM来做工,只用了一个礼拜,自己就很习惯使用VIM了。

对于一个代码编辑器来讲,最重要的几样功能只要实现了,就基本上是一个可以使用的编辑器了,高级功能是要在实际需要的时候再学习的。因为我是做C编程的,而且项目比较大,光C代码文件就有1万多个,所以,以下几样是我认为不可少的几样功能:

  • 代码跳转,跳到定义地方
  • 快速代码查找,在整个项目的所有文件内查找
  • 漂亮的代码显示
  • 自定义组合键
  • 丰富的扩展性 (加入特有的编译构建系统,或者特有的外部命令)
  • 项目管理,或者对不同的文件夹进行不同的设定 (Per Project/Dirctory Setting)
  • 快速打开文件
  • 基本的代码补全提示(对于大型项目真的是实用的)

SublimeText对于上述的功能都有很好的实现,而且SublimeText也还有Vim的KeyBinding。可是自己对于这种混杂的Key Binding不是很习惯。在习惯了Vim后,虽然Vim没有实现所有我喜欢的SublimeText的功能,我还是果断的选择了Vim。

对于我选择的插件和我选择的Vim Key Binding我会再另外写一个blog来讲述。希望有更多的Programmer跟我一样,最终选到一个自己十分喜欢的编辑器,不管是Emacs还是Vim,还是别的,只要你真的喜欢,并且能完成你需要的所有功能,那就用它吧。

Friday, April 19, 2013

VIM杀手秘技


该文内容来自: http://stackoverflow.com/questions/726894/what-are-the-dark-corners-of-vim-your-mom-never-told-you-about 并没有列出所有的,只是选择了投票比较多的。的确都是一些很实用的技巧

:w !sudo tee %
在Linux系统下面辛苦编辑了一个配置文件,要保存的时候发现要root权限,怎么办?这个命令就是让你不用以root权限来运行VIM但是可以编辑系统文件的命令。

:earlier 15m
把当前文件恢复到15分钟前的状态, 这个时间参数除了分钟,还有很多别的格式。

删除指定范围 diwdi(di"
diw 删除当前词
di( 或者 di) 删除当前括号内的内容,光标要在括号上,或者括号内
di" 删除引号内的内容
相同的命令还有ciw , ci( , ci" 还有dt, dt), dt",ct, ct), ct"

:! [command] :.! [command]
前一个是执行外部命令,后面一个只是在:后面加了一个"." 好处是把命令的输出直接放在当前行。比如你要在文档里面插入当前日期,就可以用 :.! date

:%!xxd  把VIM变成Hex Editor
:%!xxd -r 从Hex Editor变回去

:g/rgba/y A
把所有包含rgba的行复制到a寄存器里面,然后可以用 "ap粘帖,这里用大写A是取为了把找打的行追加在寄存器里面,否则就只有最后一行被放在了寄存器里面了

:verbose set xxxxxx?
有时候.vimrc的一些配置会被一些插件或者autocommand重新设置,要找出哪些地方设置了这个,就用这个命令, xxxxxx这里泛指VIM的设置项,比如 :verbose set cindent? 就找出来哪些地方设置了cindent

q:
查看命令历史,这个我们应该经常不小心就掉出来了

gv
重新选择上次的选择

gf, gF
gf把光标移到文件名上,比如c文件里面include的头文件,按gf就会打开这个文件
gF跟gf已经,这个命令认识“文件名:行号”的格式,可以直接跳转到指定行

Wednesday, April 17, 2013

HHKB和VIM


前一段时间在网上游荡的时候被别人下毒,看中了HHKB键盘,网上编程人员对于此键盘都是推崇备至,引为终极解毒利器,于是心痒痒准备从日本Amazon购买一个Pro2。在下了决定后面几天,基本上每天都要花一些时间到网上找关于HHKB的文章看看,过了几天,没有下单去买,因为对于HHKB已经退烧了。退烧不是因为忽然觉得这个键盘不好了,而是因为考虑到如果我买一个HHKB,自己应该很快就会习惯其布局,那么以后自己不管到哪里,都要准备一个HHKB布局的键盘,否则就会严重不适应,特别是那个特别的Backspace键,一个使用率特别高的键,一旦适应HHKB的位置,那到标准键盘上面岂不是每次都会打出来一串"\"来。而自己现在又没有钱买上两个HHKB,一个放家里,一个放公司。于是,我就退烧了,因为开销太高。

在考虑HHKB期间,让我有一个意外收获,就是自己现在改用VIM了。起因是因为当时决定要用HHKB键盘,那当然是用VIM或者Emacs来作为编辑器才能够发挥其特殊布局的好处。基于自己已经对VIM有一点基础,于是决定最终选择VIM。网上参考了不少文章,终于把VIM的配置和插件搞定,这次是我认识VIM以来做的最好,最完整的一次配置。选择插件都是尽量在相似插件里面选择自己最喜欢的,而且考虑到Sublime Text有很多好功能,特别是自己天天使用的功能,比如Control+P,Project,Ctrl+D,就优先安装了那些实现这些功能的插件。现在自己对这次所做的配置是十分满意的,自己需要的功能都在VIM里面实现了。然后就是对键盘做了一些Remap,对于Ctrl和Esc应该怎么remap自己是考虑和实验了好几种方案,这个可以另外写一篇文章来单独写,自己最终只是选择了把CapLock换成Ctrl,而用Ctrl+[来作为Esc,这个是VIM内置的。在强制自己用了VIM两个礼拜了,我不得不说,我现在很喜欢VIM,简单快捷的编辑真的是让编辑代码感觉很爽。自己在VIM里面做了好多remap,尽量把常用的已经命令remap到Home Line的键上面。

我现在用的VIM配置已经放在github上面:http://github.com/yongzhy/vimconfig 自己还在慢慢的在使用过程中做一些修改,不过基本的,必须的插件都已经在了。还有一个没有解决的问题是代码自动补全,我倾向于用clang来做代码补全提示,不过由于公司的代码结构的特殊性,自己还没有找到一个好的解决办法,所以这个功能就先不这么急。