把vim打造成IDE(整理,修订)
今天用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的左大括号……
[ii表示identifer,当你看到一个变量却不知道变量类型的时候,就用它看变量的声明(函数也可以)。i还可以大写哦,i大写以后还可以[+tab哦,另外,还可以直接先“[”然后ctrl+i哦,功能很强大,自己去点点看啦……
[dd表示define,当你想看看某个宏名究竟怎么定义的时候,就用它啦,同样d可以大写……
3、找定义:
gd表示goto defination,查找变量或者函数的定义就用它啦,和[i类似,具体区别自己体验一下便知
gD小写表示函数内查找,大写表示全局查找(其实只能在一个文件内部,并不是真正的全局)
4、返回光标:
‘’是两个单引号,不是双引号,当你用上面的命令找一些东西的时候,有时光标就跑了,这个命令就是让光标赶快“回家”,也就是回到你查看之前的位置,以便继续写程序……
5、缩进:
>>和<<和c++的输入输出流用的符号一样,这个缩进或者反缩进的量由shiftwidth控制,默认是8个空格。一般来说,这个功能都会和v命令一起用,以实现整块缩进,当和v一起使用的时候,只需要>和<即可,也就是只输入一次
6、多行注释:
谁说vi不能多行注释,ctrl+v,选好行以后,I(大写很重要),然后//,然后两次ESC,搞定,神奇吧?删除还用我教你嘛?ctrl+v,记得选两列哦,然后d一下,搞定……
7、格式对齐:
vim一样可以把混乱的格式排列整齐,只要输入“gg=G”,就万事OK啦……
———————————————————————————————————————————————————
(裸奔的vi就已经如此强大了,接下来看看简单的设置一下,有什么结果吧)
简单的全局设置
set number "显示行号
set nowrap "不自动换行,默认是自动换行的
set tabstop=4 " TAB键所表示的空格数(这个值只能管tab,不管缩进)
set shiftwidth=4 " 缩进所表示的空格数(不同于TAB,是利用>>缩进的大小,自动缩进也看这个值)
set autoindent " 智能自动缩进(这个东西实际用处不大,因为只是针对简单文本的)
filetype plugin indent on " 让filetype-plugin根据文件类型自动缩进(这个必须要,它会根据文件类型自动配置缩进,插件在安装vim的时候已经装好了)
set hlsearch " 对被搜索的表达式显示高亮
set incsearch "在输入要搜索的文字时,实时匹配
nmap <f2> :noh<cr>
imap <f2> <esc><f2>a
将F2设置为清除屏幕高亮,上面两行分别定义了在insert和command模式下两种情况
看名字就知道了嘛,自动更新的插件,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窗口的时候启动关闭
无论如何都要先按下ctrl+w,这是表明你要切换窗口了
再次ctrl+w,光标就会切换只下一个窗口,哪个是下一个?这vim维护的,所以多窗口时并不实用,但是两个窗口的时候非常有用
方向键,也就是先ctrl+w,然后用方向键,这就代表你要跳转的方向,这个在多窗口时非常实用,避免了瞎转圈
:close关闭当前窗口
:only仅保留当前窗口
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置窗口布局
map <f12> :WMToggle<cr>
imap <f12> <esc><f12>a
let g:miniBufExplMapCTabSwitchBufs = 1 " 供过tab切换窗口(这个好像没有发挥作用,不知道为什么)
let g:miniBufExplMapWindowNavVim = 1 " 通过h,j,k,l切换窗口
let g:miniBufExplMapWindowNavArrows = 1 " 通过方向键切换窗口
还有一点,就是由于窗口buffer太多,这个时候关闭窗口的时候,就需要qall命令,否则你就一个一个去q,慢慢的去关吧,累死算……
———————————————————————————————————————————————————
(接下来就是所有程序员最最关心的自动补全问题了)
安装自动补全
首先就是下载OmniCppComplete插件,并安装:http://www.vim.org/scripts/script.php?script_id=1520
然后进入vim进行设置:
[解决办法]
我还是坚决反对自动补全的 ...
记得当年用VC的时候,老师推荐我们安装那个 番茄助手 什么的,我可是鄙视了那老师良久 》。。