在Fedora下成功将Vim打造成适用于C/C++的IDE
经过一番努力和折腾,终于实现了基于Vim的C++集成开发环境,哈哈。
目前已完成的功能有:语法高亮,自动补全(包括局部变量补全,关键字补全,单词补全和库函数补全),项目管理,变量和函数定义跳转,.CPP文件和.H文件快速切换,集成编译和改错,集成SVN版本控制,集成文件浏览器等等。除了调试外,已经具备IDE的基本功能了。我没有集成gdb的调试功能是因为有更好的GUI调试工具-Insight。
具体实现步骤,我就不说了,网上一堆手把手叫你打造VIM的IDE的文章。我这里贴一下我的配置文件和插件列表。如果你嫌按照网上的教程配置很麻烦的话,不妨下载我打包的自己的配置压缩包,覆盖到你的fedora个人目录下,应该就可以用了。
打包下载:
我的Vim配置压缩包 (2.6日23点更新)
里面包括vimrc文件和.VIM目录下的文件,包括doc和plugin。注意:我没有提供ctags,这个必须安装哦,请到
下载最新版的。我映射了专用于C++ TAGS生成的快捷键Ctrl+F12,另外我添加了自己的tags路径,注意按需修改。另外还需要修改的部分可能是path的路径。
vimrc里面都有注释,应该不难看明白。
插件列表:
a.vim 用于快速切换.CPP已经相应.H文件。
acp.vim 用于局部变量完成,不仅如此,这个会记住文件中所有已经输入过的单词和句子,不过和系统中文输入会有些冲突,不过用了后面提到的vimim插件后,就不存在这个问题了。
bufexplorer.vim 浏览打开的buffer。
echofunc.vim 显示函数原型,当你在函数名后面敲入"("时就会像VS那样在窗口底部显示函数原型。
omnicppcomplete 用于补充默认的omni自动完成功能。添加对C++的支持。其他语言的也有相应的补充插件。
matrix.vim 用于显示黑客帝国里面的字母屏幕,挺好玩的,哈哈
project.vim 项目管理,组织管理项目以及里面的文件。
taglist.vim tag管理,可以用于跳转函数和变量定义
vcscommmand.vim 用于集成版本控制,需要安装相应的版本控制软件,支持cvs,svn等
vimim.vim vim中的输入法,支持五笔,拼音还有搜狗云输入,这个很强大。vim中可以不用系统的输入法了。我的压缩包里面已经包含了拼音和笔画输入的字库。需要五笔的自己去下吧。使用Ctrl+\调出输入法。
winfileexplorer.vim 文件浏览器,在vim中浏览系统里面的文件
winmanager.vim 窗口管理器,用于管理文件浏览器,缓冲区浏览器和taglist的浏览器窗口,我映射了新的打开快捷方式为 \wm(普通模式下)
更新几个:
pythoncomplete 用于python的补全
python.vim 用于python的语法高亮
The NERD Commenter 用于快速注释和取消注释
Conque Shell 用于在vim中运行终端命令
另外附上截图:
补充,由于下载的那个.vimrc文件出现中文乱码问题,因此,下面张贴这个文件内容:
if(has("win32") || has("win95") || has("win64") || has("win16")) "判定当前操作系统类型
let g:iswindows=1
else
let g:iswindows=0
endif
set nocompatible "不要vim模仿vi模式,建议设置,否则会有很多不兼容的问题
if has("autocmd")
filetype plugin indent on "根据文件进行缩进
augroup vimrcEx
au!
autocmd FileType text setlocal textwidth=78
autocmd BufReadPost *
\ if line("'\"") > 1 && line("'\"") <= line("$") | "实现打开同一文件时,vim能够自动记住上一次的位置
\ exe "normal! g`\"" |
\ endif
augroup END
else
set autoindent " always set autoindenting on "智能缩进,相应的有cindent,官方说autoindent可以支持各种文件的缩进,但是效果会比只支持C/C++的cindent效果会差一点,但笔者并没有看出来
endif " has("autocmd")
set nowrap "不自动换行
set hlsearch "高亮显示结果
set incsearch "在输入要搜索的文字时,vim会实时匹配
set backspace=indent,eol,start whichwrap+=<,>,[,] "允许退格键的使用
if(g:iswindows==1) "允许鼠标的使用
"防止linux终端下无法拷贝
if has('mouse')
set mouse=a
endif
au GUIEnter * simalt ~x
endif
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
"不使用win下的快捷键
"source $VIMRUNTIME/mswin.vim
"behave mswin
set diffexpr=MyDiff()
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
let eq = ''
if $VIMRUNTIME =~ ' '
if &sh =~ '\
let eq = '"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq
endfunction
"==============================================================
"以下为自己弄的配置
"编码设置====================================================
set encoding=utf-8
set fileencoding=utf-8 " 新建文件使用的编码
set langmenu=zh_CN.UTF-8
language message zh_CN.UTF-8
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
"解决菜单乱码
let $LANG = 'zh_CN.UTF-8'
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
set termencoding=GBK
set ambiwidth=double
"Tab设置====================================================
set sw=4 "缩进尺寸为 4 个空格
set ts=4 "Tab 宽度为 4 个字符
set et "编辑时将所有 Tab 替换为空格
set smarttab "只按一下 Backspace 就删除 4 个空格
"基本设置=====================================================
set spell "打开拼写检查
syntax on "打开高亮
set number "显示行号
set history=50 "命令的历史条数
set nobackup
filetype plugin indent on
filetype plugin on
set wildmenu "使用 Tab 自动补全的时候, 将补全内容使用一个漂亮的单行菜单形式显示出来
set guioptions+=b "添加水平滚动条
if (has("gui_running"))
" 图形界面下的设置
set nowrap
set guioptions+=b
colo torte
else
" 字符界面下的设置
set wrap
colo ron
endif
set path=.,,/usr/include,/usr/local/include
set autochdir " 自动切换当前目录为当前文件所在的目录
"C/C++部分配置=================================================
set sm "显示括号配对情况
set cin "打开 C/C++ 风格的自动缩进
set cino=:0g0t0(sus "设定 C/C++ 风格自动缩进的选项
let g:pojbasepath="~/Documents/Program" " 我的C++程序项目的默认根目录
function Change2Poj()
execute ":cd" g:pojbasepath
endfunction
com -nargs=0 Change2Poj call Change2Poj() " 改变工作目录为项目的根目录
"============================================================================================
"插件部分
"============================================================================================
"== ctags设置===========================================
"==映射快捷键用于创建tags 文件==========================
map
set tags+=./tags,tags,/usr/include/tags " 设置tag文件的路径
"==进行Tlist的设置===========================================
map
let Tlist_Ctags_Cmd='ctags' "因为我们放在环境变量里,所以可以直接执行
let Tlist_Use_Right_Window=1 "让窗口显示在右边,0的话就是显示在左边
let Tlist_Show_One_File=0 "让taglist可以同时展示多个文件的函数列表,如果想只有1个,设置为1
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动推出vim
let Tlist_Process_File_Always=1 "是否一直处理tags.1:处理;0:不处理
let Tlist_WinHeight=100 "设置窗口高度
let Tlist_WinWidth=24 "设置窗口宽度
let Tlist_Inc_Winwidth=0
"==acp自动完成插件配置================================
let g:acp_completeoptPreview = 0 "关闭预览
"==配置omni全能补全====================================
let OmniCpp_MayCompleteScope = 1
let OmniCpp_DefaultNamespaces = ["std"]
set completeopt=longest,menu "关闭自动补全时的预览窗口
"==BufExplorer配置======================================
let g:bufExplorerDefaultHelp=0 " Do not show default help.
let g:bufExplorerShowRelativePath=1 " Show relative paths.
let g:bufExplorerSortBy='mru' " Sort by most recently used.
let g:bufExplorerSplitRight=0 " Split left.
let g:bufExplorerSplitVertical=1 " Split vertically.
let g:bufExplorerSplitVertSize = 30 " Split width
let g:bufExplorerUseCurrentWindow=1 " Open in new window.
autocmd BufWinEnter \[Buf\ List\] setl nonumber
"==Project配置===========================================
let g:proj_flags="imstFST"
"==WinManager :WMToggle======================
let g:winManagerWindowLayout='FileExplorer,BufExplorer|TagList' "Ctrl-N可以切换逗号分开的窗口
let g:winManagerWidth=30
let g:defaultExplorer=0
nmap
"=============================================================================
" Platform dependent settings
"=============================================================================
if (has("win32"))
"-------------------------------------------------------------------------
" Win32
"-------------------------------------------------------------------------
if (has("gui_running"))
set guifont=Monaco:h12:cANSI
set guifontwide=幼圆:h12:cGB2312
endif
else
if (has("gui_running"))
set guifont=Monaco\ 12
set guifontwide=幼圆\ 12
endif
endif
上述为内容,可以直接粘贴复制