当前位置:  技术问答>linux和unix

把vim打造成IDE(整理,修订)

    来源: 互联网  发布时间:2017-05-28

    本文导语:  今天用vim的时候,遇到了点原来一直没发现的问题,搞了半天也没搞定,没办法,只要重新弄了下vim…… 记录一下搞vim的过程(vim是谁?额,我面壁……),顺便也跟大家分享一下: (本文主要是针对如何高效的使...

今天用vim的时候,遇到了点原来一直没发现的问题,搞了半天也没搞定,没办法,只要重新弄了下vim……
记录一下搞vim的过程(vim是谁?额,我面壁……),顺便也跟大家分享一下:
(本文主要是针对如何高效的使用vim进行编程,对一般的vim命令和文本操作不会介绍)
本文是在以下链接的基础之上,进行了部分删减,补充,细化,并加入了新的功能,并非是完全的转载,所以,如转载本文,请注明……
本文主要引用了:
http://blog.csdn.net/wooin/article/details/1858917
http://timothyqiu.com/2011/using-omnicomplete-for-c-cplusplus-in-vim/
由于本文并非完全抄袭,所以如阅读本文时出现问题,建议阅读以上链接,也许会得到更多的启发……
本文会将与以上链接中不同的地方,以这种颜色表示,方便大家阅读和比对……
———————————————————————————————————————————————————

纯净的vim:(看看什么设置都没有的情况下,我们的vim是什么样的)
vim --version: “VIM - Vi IMproved 7.3”,说明的vim是7.3版本,推荐安装7.2以上版本,否则本文可能不适用……
其实并不是什么插件都没有,输入:scriptnames,我们会看到,其实vim在安装的时候,已经默认安装了很多插件……
———————————————————————————————————————————————————

原生的功能:(这些功能不需要任何设置和插件)

1、% 跳转到配对的括号(小括号,方括号,大括号都在次范围),一般用于查看if,while的范围

2、万能的方括号:方括号主要是用于在匹配的相互符号(一般是括号)之间移动
[( 表示将光标移动到匹配的左括号,“])”表示将光标移动到匹配的右括号,同理,如果将小括号变成大括号,就不用我解释了吧?
[/ 表示在注释之间移动
[# 表示在编译预处理之间移动(不太常用)
[[ 表示回到当前函数最开始的左大括号,这个东西和[+{的区别是,[[肯定是回到函数的左大括号,而[{则有可能移动光标到while或者switch的左大括号……
[i i表示identifer,当你看到一个变量却不知道变量类型的时候,就用它看变量的声明(函数也可以)。i还可以大写哦,i大写以后还可以[+tab哦,另外,还可以直接先“[”然后ctrl+i哦,功能很强大,自己去点点看啦……
[d d表示define,当你想看看某个宏名究竟怎么定义的时候,就用它啦,同样d可以大写……

3、找定义:
gd 表示goto defination,查找变量或者函数的定义就用它啦,和[i类似,具体区别自己体验一下便知
gD 小写表示函数内查找,大写表示全局查找(其实只能在一个文件内部,并不是真正的全局)

4、返回光标:
‘’ 是两个单引号,不是双引号,当你用上面的命令找一些东西的时候,有时光标就跑了,这个命令就是让光标赶快“回家”,也就是回到你查看之前的位置,以便继续写程序……

5、缩进:
>>和和>缩进的大小,自动缩进也看这个值)
set autoindent " 智能自动缩进(这个东西实际用处不大,因为只是针对简单文本的)
filetype plugin indent on " 让filetype-plugin根据文件类型自动缩进(这个必须要,它会根据文件类型自动配置缩进,插件在安装vim的时候已经装好了)
set hlsearch " 对被搜索的表达式显示高亮
set incsearch "在输入要搜索的文字时,实时匹配
nmap  :noh
imap  a
将F2设置为清除屏幕高亮,上面两行分别定义了在insert和command模式下两种情况
syntax enable和syntax on表示设置语法高亮,也就是根据文件类型的不同,对程序进行着色,实际上vim默认已经开启这个选项了,如果没开启,可以添加上面两句,手动开启
colorscheme desert  " 自定义颜色方案(:help syntax.txt),系统自带的方案很多,也可以自己去google一下,自定义方案。其实系统默认配色也说的过去,这个选项就算是彩蛋吧……
———————————————————————————————————————————————————
(至此,一个更加人性化的界面和操作诞生了,接下来的事情就需要插件了,如果再自己写配置,会死人的)

加入ctags功能

1、基本的ctags功能:
想方设法去安装ctags,make还是yum随意,安装完毕以后,在你的程序根目录执行:ctags -R命令即可,则会在根目录产生一个叫做tags的文件,然后进入源代码,至此OK。很多教程都会告诉你要:set tags=#@¥%,其实完全没必要,对于tags文件,vim是自动加载的,并且如果你手动更新过tags的话,vim也完全没有必要重新关闭打开一遍,他会自动按照更新的内容进行查找,高级吧?
其实,仅仅ctags并没有太大的功能改善,它比vim原生的功能唯一强大的地方就在于是跨文件查找而已,其他的其实没什么,另外,还有一点不方便的,就是如果你不手动ctags -R,那么它永远不会自动更新,怎么办?像我这种极品懒蛋,是绝不会妥协的……
http://www.vim.org/scripts/script.php?script_id=1343
看名字就知道了嘛,自动更新的插件,OK,只要添加好插件,这个插件就会在我们保存的时候,为我们自动更新tags文件啦,怎么样,这回大家满足了吧?
这是我们第一次使用插件,顺便说一下插件的安装。插件的安装其实非常简单,只需要将你下载的*.vim文件复制到~/.vim/plugin/目录下即可,没有这么目录怎么办?mkdir不就有了嘛,不用慌,虽然vim并没有自动建立这个目录,不过这个目录的的确确就是vim默认的插件位置……
千万不要因为ctags功能不是足够强大就不去安装,ctags是我们后面很多插件的基础,一定要安装……
———————————————————————————————————————————————————
(有了ctags,我们就有了基础)

安装TagList

http://www.vim.org/scripts/script.php?script_id=273
首先,下载安装插件,这个插件的安装和我们安装的第一个插件有点细微的不同,这是一个zip文件,怎么安装?动动脑子嘛,解压缩啦,将zip文件直接在~/.vim/目录下解压缩即可,这个时候你会发现一个doc目录,这就是帮助文档啦,相当于linux的man,怎么查看?有人说可以在vi下用help查看,不过我没成功,我只能直接用vi打开txt文件……
此时还需要在~/.vimrc文件中添加这样两个语句:
	let Tlist_Show_One_File=1 " 仅显示当前文件的tags目录
let Tlist_Exit_OnlyWindow=1 " 当仅剩下taglist窗口的时候启动关闭

第一条还是比较有用的,它避免了其他文件中tags信息的干扰,第二个设置其实意义并不大,因为到后来你就会知道,首先这个taglist窗口可以快速开关,你完全可以先一键关闭taglist窗口然后再退出。其次,当你以后打开很多文件的时候,:q只能关闭一个文件的buffer,所以一般都会使用:qall来全部关闭,这个时候管你什么taglist神马的,是窗口全都会关掉……
简单的说一下taglist的使用,首先需要切换光标到另一个窗口(下一段教你怎么切换光标),然后和普通的vi操作非常类似,上下移动,查找,这里唯一特殊的一点就是回车,当你将光标停在某个变量或者函数的时候,点击回车光标就会直接跳转到代码窗口对应的函数或者变量的位置,相当过瘾对吧?另外还有一个特性,就是你在编码的时候,当你的光标较长的一段时间停在谋个代码段时,taglist窗口对应的tag就会显示高亮,表明你现在光标处于这个位置上,特别先进对吧?
另外再提两句的就是光标切换的问题,其实这个属于vim分割窗口的内容,大家可以专门去看这部分的操作,内容还是比较多的,我这里只是简单的讲几个比较我们这里用的到的命令,因为以后我们会有很多窗口,不知道这些命令的话,用起来会相当头疼……
	无论如何都要先按下ctrl+w,这是表明你要切换窗口了
再次ctrl+w,光标就会切换只下一个窗口,哪个是下一个?这vim维护的,所以多窗口时并不实用,但是两个窗口的时候非常有用
方向键,也就是先ctrl+w,然后用方向键,这就代表你要跳转的方向,这个在多窗口时非常实用,避免了瞎转圈
:close 关闭当前窗口
:only 仅保留当前窗口

———————————————————————————————————————————————————
(taglist是基于ctags的一个可视化界面,这是我们第一个可视化界面,拍手庆祝吧)

安装WinManager

http://www.vim.org/scripts/script.php?script_id=95
其实这个东西没什么可说的,首先就是安装,和上面的步骤完全一样,接下来在vimrc中加入三行代码:
	let g:winManagerWindowLayout='FileExplorer|TagList' " 设置窗口布局
map  :WMToggle
imap  a

以后就可以随时随地的使用f12键来快速开关我们的file窗口和taglist窗口了,窗口切换的方法上面提高了,忘记的童鞋们翻回去看看……
———————————————————————————————————————————————————
(可视化界面基本搭建完成,看看我们的成果吧,非常爽是不是?)

安装Cscope

这个东西是否要装,就看个人需求的高低了,实际上,即使不安装这个插件,很多功能在我们完成了全部工作以后,也可以完成的不错,加上这个功能可以说更NB了一些。虽然很多人都很推崇这个插件,但我个人并不这么认为。而且这个插件其实主要用于阅读代码,因为强大的功能代表着复杂的命令,所以在实际写程序的时候,其实并不实用。所以,如果你打算阅读结构复杂的代码,cscope绝不会让你失望,但是如果你要写代码,cscope就不那么光彩夺目了……
首先是下载,这回不是vim插件了,而是一个实实在在的linux程序,所以,该怎么安装怎么安装吧。
安装完毕以后,可ctags的用法几乎完全一样,在根目录下输入“cscope -Rbq“,然后会生成3个文件,接着就是进入源代码,vim一样会自动加载cscope的数据文件,不过区别在于tags文件你多加载几次没关系(所以自动更新很方便),但是cscpoe文件你多加载它就会报错,所以每次更新必须先退出源代码,然后更新,再进入源代码,非常麻烦。其实网上已经有人实现了cscope的不退出一键更新,有兴趣的童鞋们可以自己去看看……
http://vim.wikia.com/wiki/Automatically_create_and_update_cscope_database
总之,就我个人认为,cscope适合一次性运行然后读代码,写代码的话,这个功能大可不用……
———————————————————————————————————————————————————
(革命尚未成功,同志仍需努力)

安装MiniBufExplorer

下载安装插件:http://www.vim.org/scripts/script.php?script_id=159
然后设置~/.vimrc:
	let g:miniBufExplMapCTabSwitchBufs = 1 " 供过tab切换窗口(这个好像没有发挥作用,不知道为什么)
let g:miniBufExplMapWindowNavVim = 1 " 通过h,j,k,l切换窗口
let g:miniBufExplMapWindowNavArrows = 1 " 通过方向键切换窗口

好啦,此时当你无论通过什么方式,打开多个窗口的时候,最上面就会出现标签栏,将光标移动至标签窗口,用tab和回车就可以切换了,非常方便对吧?
另外,这里加入了新的窗口切换方式,以后我们就可以ctrl加方向键来切换窗口了,不必再ctrl+w的方式了。
还有一点,就是由于窗口buffer太多,这个时候关闭窗口的时候,就需要qall命令,否则你就一个一个去q,慢慢的去关吧,累死算……
———————————————————————————————————————————————————
(接下来就是所有程序员最最关心的自动补全问题了)

安装自动补全

首先就是下载OmniCppComplete插件,并安装:http://www.vim.org/scripts/script.php?script_id=1520
然后进入vim进行设置:
	set tags+=~/.vim/ctags
set tags+=~/.vim/cpptags
set tags+=~/.vim/linuxtags
" OmniCppComplete
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
set completeopt=menuone,menu,longest

这里需要说明一下的是,~/.vim/下的3个tag文件:
ctag文件的生成,可以将/usr/include目录复制到某个地方,然后删除里面的c++目录,接着进入目录用ctags -R --c-kinds=+p --fields=+iaS --extra=+q --language-force=C -f ~/.vim/ctags ./*即可完成……
cpptags的生成最好按照http://www.vim.org/scripts/script.php?script_id=2358将他的代码现在下来用这个生成,因为如果用自己本机c++中的include文件,虽然也可以得到一个可用的结果,不过很多东西支持的并不好,比如cin,cout之类,因为并没有写在头文件中,所以是没法自动补齐的。生成的方法里面也介绍了:ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ cpp_src,最好按照它的参数要求来,然后将生成好的tags文件复制到~/.vim/下,再改个名字就好了,其实名字自己随意,并不一定非得按照我的来。
接下来就是linuxtags的生成,首先找到你的linux的include目录在哪,可以locate sys/types.h看看这个文件在哪,一般目录就在那里了,cd到那个目录,然后我们输入命令:ctags -R --c-kinds=+p --fields=+iaS --extra=+q --language-force=C -f ~/.vim/linuxtags ./*,至此,linuxtags也生成完毕了……
需要说明的一点是,实际上ctags和linuxtags有很多是重复的,但同样有很多是互补的,比如:strcmp在ctags中找不到函数声明,而atof在linuxtags中连函数名都找不到,所以虽然有很大重复,还是建议两个都生成。其实,两个include文件目录的信息是一致的,只是本人不知道为什么在生成的时候,信息会有遗漏,目前还没法解决,如果谁有好方法,可以交流一下……
另外,比较遗憾的一点就是这个插件没法显示函数返回值,如果想看返回值或者变量类型神马的,就只能依靠ctags自己的功能了——ctrl+],或者[I,来协助我们,这算是这个插件唯一的缺憾吧
然后测试一下把,输入一半函数,然后ctrl+x ctrl+o,连函数声明都有了,看到了没?当输入".","::"和"->"的时候一样会触发自动补齐,和vs差不多了吧?
另外,这里还需要做一些修改,还记得我们上面提高的autotag嘛?实际上这个插件更新的内容是缺少函数声明的,也就是只有函数名而没有参数列表,所以我们要对他进行修改:
151行改为:cmd = "%s -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f %s -a " % (self.ctags_cmd, self.tags_file)
153行改为:cmd = "%s -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -a " % (self.ctags_cmd,)
这样,我们自定义的函数就也会出现函数声明,也就是可以看到参数列表了,不修改是没有的哦……
———————————————————————————————————————————————————
(终于完美实现自动补全)

实现括号自动匹配

没什么说的,下载安装插件:http://www.vim.org/scripts/script.php?script_id=1849
这只是个小插曲,以后括号就有人帮你管理了,不必再担心括号不匹配的问题啦,配合我们最最开始讲的“%”命令,跳啊跳啊多方便……
———————————————————————————————————————————————————

至此,一个非常精美的vim编程专用工具就完成了,enjoy yourself吧……
其实,vim还有很多非常精良的功能,有兴趣的童鞋们就自己去探索吧……
如果有童鞋遇到了困难,或者有什么新的方法想和我交流一下,就联系我吧……
QQ:438504757

|
谢谢,不管用不用得到先收藏一下。

|

|
vim的自动补全稍微有点弱不过比没有要好的

|
我还是坚决反对自动补全的 ...

记得当年用VC的时候,老师推荐我们安装那个 番茄助手 什么的,我可是鄙视了那老师良久 》。。

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 怎么把vim编辑器永久性的打造成源代码编辑器
  • Linux/CentOS/fedora下vim显示的字符编码设置
  • 只有vim.gtk或vim.gnome才能使用系统全局粘贴板,默认的vim.basic看不到+号寄存器
  • VIM的Rails编辑插件 rails.vim
  • 使用命令“locate xxxx | xargs vim ”退出vim后,终端无法响应输入!
  • 为了安装vimgdb,编译安装了vim72后,怎样在终端输入vim后启动中文版?
  • VIM高手进来看,vim中出现了奇怪的颜色。
  • 我对 VIM 的抱怨?也是我没有用好 VIM 的一些问题。
  • vim生成的.cpp~是什么文件?我使用vim编辑的时候出现了好多.cpp~文件
  • 关于Vim的使用问题,怎么让Vim启动时运行某一命令
  • 使用http://vim.spf13.com/配置vim打开文件出错
  • code_complete.vim與supertab.vim有hotkey衝突
  • vim问题,怎么不启动shell窗口,而只是把shell结果放到vim自身的command 栏里去?
  • 关于Vim的使用问题,怎么加Vim建立的程序文件中,自动添加初始化注释
  • vim插件 nerdtree.vim
  • 因为开启了文件类型检测,Vim在打开或新建一个文件时会自动判断文件的扩展名以确定文件类型,在$VIMRUNTIME/filetype.vim中搜索"Makefi
  • 大家帮忙给几个vim比较好用的插件
  • vim安装的问题
  • redhat linuxAS4 vim的安装目录
  • Linux下的vim程序在哪个目录下面?
  • Vim里面的一些脚本问题
  • 安装VIM后替换VI


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3