Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1039767
  • 博文数量: 277
  • 博客积分: 8313
  • 博客等级: 中将
  • 技术积分: 2976
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-22 11:25
文章分类

全部博文(277)

文章存档

2013年(17)

2012年(66)

2011年(104)

2010年(90)

我的朋友

分类: LINUX

2011-08-04 09:36:46

最近转用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插件搜索地址:

 

先上张图片:

 

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 :FirstExplorerWindow
nmap :BottomExplorerWindow
nmap wm :WMToggle
nmap wu :wa:TlistUpdate:FirstExplorerWindow

" 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 lk :LUTags
nmap ll :LUBufs
nmap lw :LUWalk

" cscope setting"
set cscopequickfix=s-,c-,d-,i-,t-,e-
nmap s :cs find s =expand("")
nmap g :cs find g =expand("")
nmap c :cs find c =expand("")
nmap t :cs find t =expand("")
nmap e :cs find e =expand("")
nmap f :cs find f =expand("")
nmap i :cs find i ^=expand("")$
nmap d :cs find d =expand("") 

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

" superTab
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType=""

" 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 :WMToggle
nnoremap :A

这里我要说一下我的偏好了:背景一定要黑色,快捷键喜欢用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,来进行自己的开发了:)

阅读(880) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~