vim中的调试和补全(windows平台)

来源:互联网 发布:数据保留两位小数 编辑:程序博客网 时间:2024/05/20 17:09
vim一个历史悠久的字符界面编辑器,可以说是GUI编辑器横行时代的一个少数派。(与其类似的自然还有emacs。)在没有用过vim的人那里,看到有人在用vim必然十分惊讶,居然还有人在用这样非主流的东西,看起来一点都不好用。但是,喜欢的人,却非常喜欢,常常拉出一大堆理由和牛人,来支持自己的观点。
作为到现在为止1/2的代码都是用vim写的人,我倒是想先来比较一下vim和vc(大约1/4的代码是用vc写的。)。一般人常将vim和vc的扩展性做比较,来说明vim的扩展性好,因为,vim自带脚本解释器可以自己设置命令来完成一些事情。但实际上vc的扩展性也很好,但是不常见,比如:你可以写vba脚本来扩展它的功能,比如,加入一个注释函数的功能,因为,vc自带代码分析工具,所以在vba中是可以看到编辑的代码的代码结构,也就可以从中抽取出函数名,函数参数等等。总的来说功能更加强大,但是,现成脚本不多。另外,vim还有两大致命弱点 。1.函数,变量补全。vim本身自带非常弱的补全功能,几乎就是在匹配出现过的字符串。如果,工程写的比较大,只有神才可能将所有的函数名,函数参数和变量名,都记下来。如果,反复的查找,那么就太低效率了。2.调试。在vim中是没有办法的,自己到外面找gdb吧。更加不明白为什么有人会喜欢用命令行调试,一次就只能看到那么几行代码,调试到哪了有时也犯糊涂,一点都不直观。相比较汇编调试,那是强上了百倍。

那为什么我还要想用vim,而不是vc呢?因为,vc太大了,一跑起来,机器都颤抖了。相比较vim就小的多了,而且十分喜欢它的简洁,不喜欢到处挂满对话框的样子。无论如何,至少他可以成为众多IDE的选择之一。

我这个做的还和一般人不太一样,一般人做的是linux平台,那个相对要简单一点,因为插件作者都是先考虑到linux,之后才是windows。但是,对于我而言,我只是看中了linux的命令行以及命令行中的工具。所以,希望在windows下实现这些,当然,在linux做,其实也是一个类似的过程。

vim中的调试:

在vim中实现调试有三种方案,vimdbg,clewn,pyclewn,下面的表格来自http://pyclewn.sourceforge.net/

Comparison of clewn, vimGdb and pyclewn

The following table lists the differences between clewn, vimGdb and pyclewn(clewn and vimGdb are hosted atclewn).

 vimGdbclewnpyclewnplatformunixunix

all unix platformssupported by python -requires GNU gdb frommacports on Mac Os X

Windows (python 3 only)

languageCC

python 2.4 and above

python 3

C language for thepdb-clone pythonextension module, _bdb

vim modevim in aterminal,gvimgvimgvim and vim in aterminal (vim 7.3or above required)vim interfacea vim patcha standalone programconnected to gvim witha netbeans socket

a standalone programconnected to vim witha netbeans socket

pyclewn may be startedfrom within vim sincevim 7.3

vim versiona differentpatch foreach vimversionvim 6.3 and abovevim 7.0 and abovedebuggersgdbgdbgdb, pdbgdb features 
  • watched variables
  • project file
  • tight integrationwith vim
  • gdb/mi interface
  • asynchronous gdbcommands
  • watched variables
  • project file
pdb features  
  • interrupt thedebuggee
  • attach to a runningpython process
  • the threadstackcommand

本文选择的是第三种,不单单说是第三种能力强大,也在于第一种我尝试在cygwin中重新编译vim,但是失败了。倒不是编译失败,而是运行vimGdb时,它说gdb fork 失败之类的,我想应该是cygwin还没有兼容到这种程度。我也想尝试第二种,但是它要求vim是gvim,但是这个在cygwin中,目前还做不到,因为它还没有移植gtk等桌面环境。不过,我看到cygwin,正在做这件事,在之后可以行了吧。所以,就只剩下第三条了,而且它官方自己都说支持windows,那么应该是可行了。不过,它说的windows并不是cygwin甚至连mingw也不行,而是指纯正的windows,就是安装windows版vim的,windows版python的。

安装过程:

基本就是官方的翻译(http://pyclewn.sourceforge.net/install.html)本文写于2013-3-29,可能未来下面软件的版本会发生变化。

  1. 下载python3.2,不要图新,新的未必支持。我就是下了3.3,然后安装了好几次都不成功。然后,正常安装即可。
  2. 下载python extension,注意要选择3.2版本,也就是要跟上面那个匹配。下载之后正常安装即可。
  3. 下载MinGW,然后正常安装。
  4. 下载vim,然后安装。之后,将vim.exe所在的目录加到环境变量PATH里面。
  5. 下载pyclewn,然后安装。如果,最后看到pyclewn postinstall completed。(在我的机器上,这句话在最右边。)那么说明安装成功了,否则就可能失败了,看看失败原因。成功后在vim中输入,:Pyclewn
  6. 贴张效果图,具体命令怎么使用还是看官方文档吧。

vim中的代码补全

网上关于vim中的代码补全讲的很多,但是很多都免不了有两个问题,就是补全的不准确和补全的不及时。补全的不准去指的是直接用出现过的单词去匹配,没出现的没法补全,函数参数提示就更没办法了。还有一种使用cscope或者是ctag的,两种都是对文档先进行语法分析,然后生成相应的文件。一来,对于文档中刚写过的它是分析不出来的,二来,对于复杂的表达式他也没有办法给出提示。总的来说,这些方法,相对于现在的IDE,就显得十分古老了。要想先进一点,有两种方案,一种是gccsense,另一种是clang_complete。他们的思想都是类似,要想准确的得到补全,只有编译器自己才知道。所以,必须要在后台,让编译器自己去分析代码,从他的语法树中获取有用的信息。gccsense需要编译gcc,但是,他需要很多前提库,我在cygwin下找了一下,也没有找全那个库。只能是第二种方案了,第二种的后端编译器用的是现在刚兴起的clang,它是可以在mingw中编译的。也可以参考原作者写的,https://github.com/Rip-Rip/clang_complete/wiki

  1. 编译clang之前,需要下载python2.7,否则clang编译不了。高版本的没有用的。确保python2.7能被访问到,可能需要加到环境变量PATH中。
  2. 编译clang,按照道理上说,我们可以去下载一个编译好了的clang,然后就可以了。但是,我找了官方的编译结果,结果却发现clang一编译东西,就弹出对话框说,它已经停止工作了。所以,就不得不自己编译了。耗时比较长,估计在2小时以上,因为,我是晚上编译的,所以我也不太清楚。具体编译过程,看一篇博文吧,它写的很清楚。http://bencode.net/clangonwindows。做完后,别忘了将clang所在的目录加到环境变量PATH中。
  3. 下载https://github.com/Rip-Rip/clang_complete中的文件,点那个zip就可以了。将文件解压缩到,vim安装目录中有个叫vimfiles的地方。其实也就是将zip文件中的plugin对应到vimfiles的plugin,doc对应doc。这样clang_complete就安装好了。
  4. 但是,它似乎有点问题。clang_complete需要调用一个叫libclang.dll的文件,但是clang中并没有这样的文件,它只有clang.dll。我的做法是,到那个plugin中的cindex.py文件中搜索,libclang.dll将其改为clang.dll。
  5. 在vim的~/.vimrc中加入
  6. let g:clang_complete_copen=0let g:clang_periodic_quickfix=1let g:clang_snippets=1let g:clang_snippets_engine='clang_complete'let g:clang_close_preview=1let g:clang_use_library=1let g:clang_user_options='-stdlib=libc++ -std=c++11 -IIncludePath'let g:clang_library_path='E:/MinGW/bin'
  7. 其中最后一个要改成你的clang。dll所在的路径,注意/\的区别,此处没有弄错。其他,参数可以参考它的帮助文档。这时候,只能祈祷可以使用吧!我也是看了它的源代码才知道出了什么问题,特别麻烦。此处所讲更多的是要点,还有其他的一些东西,可以参考其他人的博文,比如本文参考中的一些就不错。
  8. 别忘了将python3.2加入到PATH中,而将python2.7取消掉,否则前面的调试可能出问题。
  9. 来张效果图:

后记:

在linux下做这个就十分的麻烦,在windows下就更麻烦了。经过了十多个小时的折腾,终于是将这两个功能都弄好了,就算是弄到这样子,还是与现在的IDE有一定的距离,他们在这些方面做得更为的自然。但不管怎么样,好歹这是可以称得上是比较现代的IDE了,剩下的更多是发挥vim本身的可定制性的时候了。它也可以成为IDE的选择之一了。但是,话又说回来,又有多少人愿意如此复杂的去配置一个东西呢,结果也只是得到了别人随随便便就能用上的功能。思考之后就形成了,刚写的博文,IDE的本质。之后,安装了一个之前没用过的IDE,netbeans想用来写PHP。它界面华丽,功能强大。我越发的觉着,到底有多少人会愿意花费巨大的时间,仅仅只是为了可定制性呢?恐怕是很少吧。


参考:

pyclewn的用法:http://easwy.com/blog/archives/advanced-vim-skills-vim-gdb-pyclewn/

clang_complete:http://www.cnblogs.com/egmkang/archive/2011/02/20/clang_complete.html

clang_complete:http://www.pleee.com/archives/426.html

clang_complete作者写的:https://github.com/Rip-Rip/clang_complete/wiki

将vim进一步打造成IDE:http://blog.csdn.net/wooin/article/details/1858917

另外一个将vim打造成IDE:http://blog.csdn.net/yangyang_gnu/article/details/6642271

原创粉丝点击