您的位置:首页 > 其它

构建基于VIM的IDE环境

2010-06-30 16:55 681 查看
最近转用UBUNTU操作系统,习惯了windows下的source insight看代码,乍一下没找到合适的替代工具还真不习惯。

幸好现在网络资源丰富,从网上看了不少帖子,还是使用vim来搭建开发环境来的好。

我的环境:

UBUNTU 10.04

VIM - Vi IMproved 7.2

有些达人前辈已经给我们铺好路了:

《手把手教你把 Vim 改装成一个 IDE 编程环境》- 吴垠, 吴的blog:http://blog.csdn.net/wooin

《vim使用进阶: 使用vim提高你的文本编辑效率》-Easwy Yang,其bolg:http://easwy.com/blog/

用vim搭建IDE,主要是在vim的基础上安装一些vim的插件,和开发相关的第三方工具。

vim插件搜索地址: http://www.vim.org/
先上张图片:



1. vim还是gvim?

刚开始的时候确实不知道选用哪个,按理说都差不多,gvim相比vim支持要好一点,但vim更简洁一些,也更通用一些,不过本人还是倾向于花哨点的gvim:),原因有二:一是本人主要是在graphic界面看代码,gvim更方便些;二是我喜欢的一些主题vim显示效果实在太差。

一用gvim,就出现了个问题,菜单栏的汉字显示不出来,解决之:

cd /usr/share/vim/vim72/lang

sudo ln -s
menu_zh_cn.utf-8.vim menu_zh_cn.utf8.vim
此方法使得gvim可以识别
zh_CN.utf8。

2. .vim和.vimrc

用户目录下创建.vim目录和.vimrc目录,.vim目录用于安放vim插件,.vimrc用于vim启动时调用。

我的.vim目录树:

|---autoload

| |---vimball.vim

| |---genutils.vim

| |---lookupfile.vim

| |---mark.vim

|---.VimballRecord

|---doc

| |---taglist.txt

| |---bufexplorer.txt

| |---tags

| |---pi_vimball.txt

| |---winmanager.txt

| |---ctags_highlighting.txt

| |---supertab.txt

| |---lookupfile.txt

| |---csupport.txt

| |---mark.txt

|---plugin

| |---ctags_highlighting.vim

| |---sessionman.vim

| |---taglist.vim

| |---winmanager.vim

| |---genutils.vim

| |---c.vim

| |---vimballPlugin.vim

| |---lookupfile.vim

| |---mark.vim

| |---wintagexplorer.vim

| |---winfileexplorer.vim

| |---a.vim

| |---supertab.vim

| |---echofunc.vim

| |---Search_Word.vim

| |---bufexplorer.vim

|---mktypes.py

|---colors

| |---bandit.vim

|---ftplugin

| |---colours_bandit.vim

| |---c.vim

|---c-support

| |---doc

| | |---ChangeLog

| | |---c-hotkeys.tex

| | |---c-hotkeys.pdf

| |---scripts

| | |---wrapper.sh

| |---codesnippets

| | |---main.c

| | |---main.cc

| | |---print_double_array.c.noindent

| | |---Makefile

| | |---Makefile.multi-target.template

| | |---calloc_int_matrix.c

| | |---calloc_double_matrix.c

| | |---print_array.cc.noindent

| | |---print_int_array.c.noindent

| |---templates

| | |---c.statements.template

| | |---cpp.comments.template

| | |---cpp.cpp.template

| | |---c.cpp.template

| | |---cpp.preprocessor.template

| | |---c.preprocessor.template

| | |---Templates

| | |---c.comments.template

| | |---cpp.idioms.template

| | |---c.idioms.template

| | |---cpp.statements.template

| |---wordlists

| | |---stl_index.list

| | |---c-c++-keywords.list

| | |---k+r.list

| |---rc

| | |---customization.gvimrc

| | |---customization.ctags

| | |---customization.vimrc

| | |---customization.indent.pro

|---syntax

| |---colours_bandit.vim

| |---c.vim

|---README.csupport

|---.netrwhist

|---sessions

| |---emc.viminfo

| |---emcx.vim

| |---emc

|---extra_source

| |---mktypes

| | |---setup.py
此目录下的东东基本上是安装插件的时候,解压自动覆盖生成的,插件主要是在plugin目录下。
插件不知道是干嘛的? --- 看一下上边二位前辈的大帖,再不行上vim网站上搜一下即可,安装步骤都会有。
插件不会用? --- 重复上一问题答案,再不行用vim的超级help^_^

我的.vimrc内容:
"

" my vim configuration

"

" 关闭compatible

set nocompatible

" 开启语法高亮

syntax on

" 设置文字编码自动识别

set fencs=gbk,utf-8,ucs-bom,gb18030,gb2312,cp936

" 使用鼠标

set mouse=a

" 设置高亮搜索

set hlsearch

" 输入字符串就显示匹配点

set incsearch

" 输入的命令显示出来,看的清楚些。

set showcmd

set background=dark

set history=50 "历史记录50条

filetype plugin indent on "打开文件类型检测

set completeopt=longest,menu "关闭智能补全时的预览窗口

"颜色方案

colorscheme bandit "desert颜色方案

"界面设置.

set ruler "显示当前位置

set number "显示行号

"set nonumber "不显示行号

"格式设置.

set autoindent "自动缩进

set smartindent "智能缩进

set cindent "C缩进

set tabstop=4 "硬TAB

set softtabstop=4 "软TAB

set shiftwidth=4 "缩进空格数

set expandtab "空格替换TAB

"set smarttab "智能TAB

set tags=tags; "ctags

set autochdir "ctags

" TagList"

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow=1

" BufExplorer"

let g:bufExplorerDefaultHelp=0

let g:bufExplorerShowRelativePath=1

let g:bufExplorerSortBy='mru'

let g:bufExplorerSplitRight=0

let g:bufExplorerSplitVertical=1

let g:bufExplorerSplitVertSize = 30

autocmd BufWinEnter /[Buf/ List/] setl nonumber

" winManager setting"

let g:winManagerWindowLayout = "FileExplorer,BufExplorer|TagList"

let g:winManagerWidth = 30

let g:defaultExplorer = 0

nmap <C-W><C-F> :FirstExplorerWindow<cr>

nmap <C-W><C-B> :BottomExplorerWindow<cr>

nmap <silent> <leader>wm :WMToggle<cr>

nmap <silent> <leader>wu :wa<cr>:TlistUpdate<cr>:FirstExplorerWindow<cr>

" lookupfile setting"

let g:LookupFile_MinPatLength = 2

let g:LookupFile_PreserveLastPattern = 0

let g:LookupFile_PreservePatternHistory = 1

let g:LookupFile_AlwaysAcceptFirst = 1

let g:LookupFile_AllowNewFiles = 0

if filereadable("./filenametags")

let g:LookupFile_TagExpr = '"./filenametags"'

endif

nmap <silent> <leader>lk :LUTags<cr>

nmap <silent> <leader>ll :LUBufs<cr>

nmap <silent> <leader>lw :LUWalk<cr>

" cscope setting"

set cscopequickfix=s-,c-,d-,i-,t-,e-

nmap <F6>s :cs find s <C-R>=expand("<cword>")<CR><CR>

nmap <F6>g :cs find g <C-R>=expand("<cword>")<CR><CR>

nmap <F6>c :cs find c <C-R>=expand("<cword>")<CR><CR>

nmap <F6>t :cs find t <C-R>=expand("<cword>")<CR><CR>

nmap <F6>e :cs find e <C-R>=expand("<cword>")<CR><CR>

nmap <F6>f :cs find f <C-R>=expand("<cfile>")<CR><CR>

nmap <F6>i :cs find i ^<C-R>=expand("<cfile>")<CR>$<CR>

nmap <F6>d :cs find d <C-R>=expand("<cword>")<CR><CR>

" 代码折叠

set foldmethod=syntax

set foldlevel=100 " 启动 vim 时不要自动折叠代码

" superTab

let g:SuperTabRetainCompletionType=2

let g:SuperTabDefaultCompletionType="<C-X><C-O>"

" ctags_highlighting

let b:TypesFileRecurse = 1

let b:TypesFileDoNotGenerateTags = 1

let b:TypesFileIncludeLocals = 1

"let b:TypesFileIncludeSynMatches =1

"let b:TypesFileLanguages = ['c']

" Fn 快捷键

" F5 - LookUpFile, F6 - cscope

nnoremap <silent> <F7> :WMToggle<CR>

nnoremap <silent> <F8> :A<CR>
这里我要说一下我的偏好了:背景一定要黑色,快捷键喜欢用Fn来做,语法高亮一定要全,不然太不舒服了。

3. 我的workspace备份

1)手工操作
我的会话保存名为:workspace.vim和workspace.viminfo,分别由mksession和wviminfo命令完成。
有一些设置跟我们的工程目录是密切相关的,我把这些设置都放在workspacex.vim中:

"set project path

set path+=~/src/emc2-2.3.5/**

" lookup file tag file

let g:LookupFile_TagExpr = string('/home/username/emc2-2.3.5/src/filenametags')

" cscope setting

if has("cscope")

set csprg=/usr/bin/cscope

set csto=1

set cst

set nocsverb

" add any database in current directory

if filereadable("/home/username/src/emc2-2.3.5/cscope.out")

cs add /home/username/src/emc2-2.3.5/cscope.out /home/username/src/emc2-2.3.5

endif

set csverb

endif
2)插件
当然使用gvim保存会话,可以使用sessionman插件,不过它只有session的相关操作,对viminfo没有保存,可以手动修改其插件,
在session保存和读取的地方相应加上wviminfo!和rviminfo命令即可,用这个插件还是很方便的。不要忘了手工写x.vim扩展文件。

4. 补充

按照前辈们的帖子来做就是省心,不过有个地方还是不满意,那就是语法高亮不全,包括宏、局部变量等。
决定使用主题bandit和插件ctags_highlighting来解决这个问题!
换上bandit主题,看着还是挺好的,不过看c/c++文件的那个绿色注释太显眼了,改成淡绿的(在bandi.vim中修改):
" Comments are green

let ColourAssignment['Comment'] = {"GUIFG": '#008800', "CTERMFG": 'Green', "TERM": 'Bold'}

好了,装上ctags_highlighting,发现它只能显示当前目录和第一级子目录中文件的补充高亮!!!
修改ctags_highlighting.vim,使用子目录级到16级,够用就行:
let fname = expand(file . ':p:h') . '/types_' . a:suffix . '.vim'

let para = ':p:h'

for i in range(16)

if filereadable(fname)

exe 'so ' . fname

break

endif

let para = para . ':h'

let fname = expand(file . para) . '/types_' . a:suffix . '.vim'

endfor
因为我看的c++代码的后缀名是.cc和.hh,ctags_highlighting的作者没有加上此类型,只有自己手工加了:
第50几行:
autocmd BufRead,BufNewFile *.cc call ReadTypes('c') " add

autocmd BufRead,BufNewFile *.hh call ReadTypes('c') " add
第70几行:
let extensionLookup =

/ {

/ '[ch]/(pp/)/?' : "c",

/ 'cc' : "c",

/ 'hh' : "c",

/ 'p[lm]' : "pl",

/ 'java' : "java",

/ 'pyw/?' : "py",

/ 'rb' : "ruby",

/ 'cs' : "cs",

/ 'php' : "php",

/ 'vhdl/?' : "vhdl",

/ }
第130几行:
if index(['cpp', 'h', 'hpp', 'cc', 'hh'], expand(file . ':e')) != -1 " modify

使用ctags_highlighting插件+bandit主题有个问题,就是保存会话后,下次启动会话现使用这个高亮插件,使用mark.vim插件高亮的颜色出不来,在bandit主题中加入颜色定义会解决这个问题:
" For mark.vim plugin

highlight def MarkWord1 ctermbg=Cyan ctermfg=Black guibg=#8CCBEA guifg=Black

highlight def MarkWord2 ctermbg=Green ctermfg=Black guibg=#A4E57E guifg=Black

highlight def MarkWord3 ctermbg=Yellow ctermfg=Black guibg=#FFDB72 guifg=Black

highlight def MarkWord4 ctermbg=Red ctermfg=Black guibg=#FF7272 guifg=Black

highlight def MarkWord5 ctermbg=Magenta ctermfg=Black guibg=#FFB3FF guifg=Black

highlight def MarkWord6 ctermbg=Blue ctermfg=Black guibg=#9999FF guifg=Black
OK了,现在可以看到很全的语法高亮了!!!

当然,你可以自己修改高亮设置,下面这个就是我设置的类似Source Insight的高亮:



5. 总结

从开发流程的角度,来总结一下创建整个开发环境的步骤:
1)先cd到工程源码的目录下,如:
cd /home/username/src/emc2-2.3.5/
2)运行build-env.sh脚本,此脚本创建必需的tags文件、cscope文件等,脚本内容如下:
#!/bin/bash

ctags -R --fields=+lS --c-kinds=+pxl --c-kinds=+pxl

cscope -Rbq

# generate tag file for lookupfile plugin

echo -e "!_TAG_FILE_SORTED/t2/t/2=foldcase/" > filenametags

find `pwd` -not -regex '.*/./(png/|gif/)' -type f -printf "%f/t%p/t1/n" | /

sort -f >> filenametags
此时目录下会生成一些文件:tags,filenametags,cscope.*
3)运行gvim,在gvim内运行:
:UpdateTypesFile
这个命令会生成ctags_highlighting插件所需要的types_*.vim文件。

这时候可以打开一个源文件,然后保存会话,可以从File->Session里面操作。
退出gvim。
4)切换至~/.vim/sessions目录下,可以看到有相应的session文件生成了,如项目emc的会话文件包括:emc 和 emc.viminfo,
因为filenametags和cscope文件是工程相关的,也就是其路径不好在.vimrc中为各个工程都指定,所以在此编辑emcx.vim文件,这个文件可以在打开会话emc时自动调用:
"set project path

set path+=~/src/emc2-2.3.5/**

" lookup file tag file

let g:LookupFile_TagExpr = string('/home/username/src/emc2-2.3.5/filenametags')

" cscope setting

if has("cscope")

set csprg=/usr/bin/cscope

set csto=1

set cst

set nocsverb

" add any database in current directory

if filereadable("/home/username/src/emc2-2.3.5/cscope.out")

cs add /home/username/src/emc2-2.3.5/cscope.out /home/username/src/emc2-2.3.5

endif

set csverb

endif
5)再次打开gvim,打开会话文件,此时所有的插件应该都能使用了,可以挨个测试下好不好用。
最后保存一下会话,退出。

至此,可以在任何目录下运行gvim,然后打开session,来进行自己的开发了:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: