Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2307600
  • 博文数量: 395
  • 博客积分: 10994
  • 博客等级: 上将
  • 技术积分: 5586
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-17 19:49
文章存档

2014年(1)

2013年(10)

2012年(74)

2011年(303)

2010年(7)

分类: LINUX

2014-07-07 12:35:00

取自:http://www.cnblogs.com/absolute8511/archive/2010/02/06/1665004.html
内容如下:

在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 cmd = '""' . $VIMRUNTIME . '\diff"'
      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 :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .
set tags+=./tags,tags,/usr/include/tags    " 设置tag文件的路径


"==进行Tlist的设置===========================================


map :silent! Tlist
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 wm :WMToggle


"=============================================================================
" 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


上述为内容,可以直接粘贴复制





阅读(2816) | 评论(0) | 转发(0) |
0

上一篇:ubuntu 安装ssh服务器

下一篇:没有了

给主人留下些什么吧!~~