把VIM打造成IDE
=======================================
安装vim相关软件
=======================================
2 安装 ctags 5.8 ctags.sourceforge.net
CentOS6 和 Debian7 安装系统自带的
3 安装 安装Cscope cscope.sourceforge.net
tar zxvf cscope-15.8a.tar.gz &&
cd cscope-15.8a &&
./configure --prefix=/usr/local &&
make &&
make install
{解决了cscope的不退出一键更新的问题
su -
cd /usr/local/include/boost/
find |grep -E "\.(c|cc|cp|cpp|cxx|ipp|c\+\+|h|h\+\+|hh|hp|hpp|hxx)$" >cscope.files
cscope -bq -i cscope.files
exit
cd
vi .vimrc
加入:
cs add ~/Ice-3.4.2/cpp/cscope.out ~/Ice-3.4.2/cpp
cs add ~/Ice-3.4.2/ThirdParty/db-4.8.30.NC/cscope.out ~/Ice-3.4.2/ThirdParty/db-4.8.30.NC
cs add /usr/local/include/boost/cscope.out /usr/local/include/boost/
}
=======================================
安装VIM插件
=======================================
插件安装目录: ~/.vim/plugin/ 帮助文件目录: ~/.vim/doc/
拷贝新的帮助文件后,执行: vim -c "helptags ~/.vim/doc" -c "q"
1 安装 AutoTag 1.13版 自动更新tags的插件
{ This utility will only work when using vim that's been compiled with python support. }
把 autotag.vim 拷贝到: ~/.vim/plugin/ 目录下。
修改 autotag.vim
217行改为:
cmd = "%s -R --c++-kinds=+p --fields=+iaS --extra=+q -f %s -a " % (self.ctags_cmd, self.tags_file)
219行改为:
cmd = "%s -R --c++-kinds=+p --fields=+iaS --extra=+q -a " % (self.ctags_cmd,)
2 安装 TagList 4.6版
cd ~/.vim/doc
mv taglist.txt taglist2.txt
vi taglist2.txt
{ 修改: *taglist.txt* 为 *taglist2.txt* }
vim -c "helptags ~/.vim/doc" -c "q"
3 安装 showfunc.vim
这个插件实现了按下fd,就可以提示当前光标所在函数的定义,另外还实现了当输入'('时,会自动匹配tags,展示函数的定义原型
只需要把这个插件放到plugin下就行,不需要配置。
4 安装 OmniCppComplete 自动补全
安装
执行: vim -c "helptags ~/.vim/doc" -c "q"
{
1) 生成 C函数的tags
su -
mkdir /opt/bk
cd /usr/include
mv c++ /opt/bk/.
exit
ctags -R --c-kinds=+p --fields=+iaS --extra=+q --language-force=C -f ~/.vim/c_tags /usr/include
su -
mv /opt/bk/* /usr/include/.
exit
2) 生成 C++函数的tags
下载 cpp_src.tar.bz2
解压到: /usr/local
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f ~/.vim/cpp_tags /usr/local/cpp_src
3) 生成 ICE的tags
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ --append=yes -f ~/.vim/ice_tags ~/Ice-3.4.2/cpp/include
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ --append=yes -f ~/.vim/ice_tags ~/Ice-3.4.2/cpp/src
4) 生成 BDB的tags
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q -f ~/.vim/bdb_tags ~/Ice-3.4.2/ThirdParty/db-4.8.30.NC
5) 生成 其它的tags
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --append=yes -f ~/.vim/misc_tags ~/Ice-3.4.2/ThirdParty/bzip2-1.0.6
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q --append=yes -f ~/.vim/misc_tags /usr/local/include/mongo
x) 修改以下tags文件中的路径 /home/yucheng 为: ~
sed -i "s/\/home\/yucheng/~/g" ice_tags bdb_tags misc_tags
}
vi ~/.vimrc
{
set tags=~/.vim/ice_tags,~/.vim/bdb_tags,~/.vim/misc_tags,~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags
}
5 安装 WinManager
先安装 bufexplorer.vim
然后安装 WinManager
执行: vim -c "helptags ~/.vim/doc" -c "q"
在 .vimrc 中加入以下几行:
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置窗口布局
let g:winManagerWidth=40
nmap <f12> :WMToggle<cr>
imap <f12> <esc><f12>a
以后就可以随时使用f12键来快速开关我们的file窗口和taglist窗口了
6 安装 MiniBufExplorer
Copy minibufexpl.vim into your plugin directory
7 安装 visualmark 高亮书签
Copy visualmark.vim into your plugin directory
8 安装 grep.vim 在工程中查找
在 .vimrc 中增加配置
nmap <silent> <F3> :Grep<CR>
let Grep_Default_Filelist = '*.h *.hpp *.cpp *.cxx *.c'
{
把光标移动到需要查找的单词上,按F3
命令行显示要搜索的内容,可以修改,如:加上正则表达式。也可以不修改,直接回车
命令行显示要查找的文件,可以修改。回车
会弹出QuickFix窗口,列出所有符合条件的搜索结果
}
9 安装 NERD_commenter.vim 注释插件 2.3.0 版
执行: vim -c "helptags ~/.vim/doc" -c "q"
map <c-h> ,c<space> "这样的话,在光标所在行上,按下一次ctrl+h是注释,再按下一次是取消注释
其内建的指令,cm是多行注释,类似C++的/**/,,cu是取消注释
(安装后,无效,why? )
10 安装 DoxygenToolkit.vim生成Doxygen风格的注释
Copy to your '~/.vim/plugin' directory
11 安装 a.vim 快速切换.cpp和.h文件
把a.vim放到plugin下,不需要配置
直接可以:A,打开.cpp和.h对应的文件,:AV,打开.cpp和.h对应的文件,并且分屏
=======================================
.vimrc 下文中出现"美元符" 是因显示问题
=======================================
if v:lang =~ "^zh_CN"
set fileencodings=gb18030
set guifontset=*-r-*
elseif v:lang =~ "utf8美元符" || v:lang =~ "UTF-8美元符"
set fileencodings=utf-8,latin1
elseif v:lang =~ "^zh_TW"
set fileencodings=big5
set guifontset=-sony-fixed-medium-r-normal--16-150-75-75-c-80-iso8859-1,-taipei-fixed-medium-r-normal--16-150-75-75-c-160-big5-0
elseif v:lang =~ "^ko"
set fileencodings=euc-kr
set guifontset=-*-*-medium-r-normal--16-*-*-*-*-*-*-*
elseif v:lang =~ "^ja_JP"
set fileencodings=euc-jp
set guifontset=-misc-fixed-medium-r-normal--14-*-*-*-*-*-*-*
endif
" 对语言的支持,utf8和gbk之类
set fileencodings=gb18030,gbk,gb2312,big5,utf-8,latin1,euc-jp,euc-kr,ucs-bom,cp936
if(has("win32") || has("win95") || has("win64") || has("win16")) "判定当前操作系统类型
let g:iswindows=1
else
let g:iswindows=0
endif
if &term=="xterm"
set t_Co=8
set t_Sb=^[4%dm
set t_Sf=^[3%dm
endif
" Only do this part when compiled with support for autocommands
if has("autocmd")
" In text files, always limit the width of text to 78 characters
autocmd BufRead *.txt set tw=78
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
endif
" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
syntax enable
" if &t_Co > 2 || has("gui_running")
syntax on
" set hlsearch
" endif
set mouse=a
set nocompatible " Use Vim defaults (much better!)
set bs=2 " allow backspacing over everything in insert mode
"set ai " always set autoindenting on
"set backup " keep a backup file
set viminfo='20,\"50 " read/write a .viminfo file, don't store more than 50 lines of registers
set history=50 " keep 50 lines of command line history
set ruler " show the cursor position all the time
set number " 显示行号
set autoindent " 智能自动缩进
set smartindent " 开启新行时使用智能自动缩进
set shiftwidth=4 " 缩进所表示的空格数
set tabstop=4
set expandtab " 用空格替换tab字符
%retab
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
filetype plugin indent on " 让filetype-plugin根据文件类型自动缩进
set hlsearch " 对被搜索的表达式显示高亮
set incsearch " 在输入要搜索的文字时,实时匹配
set foldenable " 开始折叠 :help zo
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度
set foldlevel=100 " 启动vim时不要自动折叠代码
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" cscope的设置
" 查看帮助 :help if_cscop.txt
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
if has("cscope")
set csprg=/usr/local/bin/cscope
" 优选搜索标签库,未找到匹配项后搜索cscope数据库
set csto=1
" vim内置命令 同时搜索cscope数据库和标签库
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif 美元符CSCOPE_DB != ""
cs add 美元符CSCOPE_DB
endif
" 添加cscope.out文件 Ice BDB mongodb
" cs add ~/source/Ice-3.5.0/cpp/cscope.out ~/source/Ice-3.5.0/cpp
" cs add ~/source/db-5.3.21.NC/cscope.out ~/source/db-5.3.21.NC
" cs add ~/source/mongodb-src-r2.4.1/cscope.out ~/source/mongodb-src-r2.4.1
" 给出添加cscope数据库成功与否信息
set csverb
" 用 quickfix 窗口来显示 cscope 结果
set cscopequickfix=s-,c-,d-,i-,t-,e-
" cscope用的快捷键
nmap <F9>s :cs find s <C-R>=expand("<cword>")<CR><CR>:copen<CR>
imap <F9>s <esc><F9>s
nmap <F9>g :cs find g <C-R>=expand("<cword>")<CR><CR>
imap <F9>g <esc><F9>g
nmap <F9>d :cs find d <C-R>=expand("<cword>")<CR><CR>:copen<CR>
imap <F9>d <esc><F9>d
nmap <F9>c :cs find c <C-R>=expand("<cword>")<CR><CR>:copen<CR>
imap <F9>c <esc><F9>c
nmap <F9>t :cs find t <C-R>=expand("<cword>")<CR><CR>:copen<CR>
imap <F9>t <esc><F9>t
nmap <F9>e :cs find e <C-R>=expand("<cword>")<CR><CR>:copen<CR>
imap <F9>e <esc><F9>e
nmap <F9>f :cs find f <C-R>=expand("<cfile>")<CR><CR>
imap <F9>f <esc><F9>f
nmap <F9>i :cs find i <C-R>=expand("<cfile>")<CR><CR>:copen<CR>
imap <F9>i <esc><F9>i
endif " if has("cscope")
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" 快捷键设置
" nmap 是command模式, imap 是insert模式
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" F3 --- 查找
nmap <silent> <F3> :Grep<CR>
imap <F3> <esc><F3>
" F4 --- 全部退出
nmap <F4> :qall<cr>
imap <F4> <esc><F4>
" F5 --- 全部保存
nmap <silent> <F5> :wall<cr>
imap <F5> <esc><F5>
" F6 --- 代码补全 ( insert模式 )
imap <F6> <C-X><C-O>
" F7 --- 编译项目
nmap <silent> <F7> :call MyFun_make()<cr>
imap <F7> <esc><F7>
" F8 --- 重新编译项目
nmap <silent> <F8> :call MyFun_remake()<CR>
imap <F8> <esc><F8>
" F10 --- 生成当前目录的tags
nmap <silent> <F10> :call MyFun_mktag()<CR>
imap <F10> <esc><F10>
" <C-X><F10> --- 生成当前目录的cscope
nmap <C-X><F10> :call MyFun_mkcscope(".")<CR>
imap <C-X><F10> <esc><C-X><F10>
" <C-C><F10> --- 清除所有tags文件
nmap <C-C><F10> :call MyFun_cleantag(".")<CR>
imap <C-C><F10> <esc><C-X><F10>
" --- 清除屏幕高亮(搜索产生的)
nmap <C-A> :noh<cr>
imap <C-A> <esc><C-A>a
fun! MyFun_cleantag(p_dir)
if has("cscope")
silent! execute "cs kill -1"
endif
let dir = a:p_dir . "/"
exe ':!rm -f tags ' . dir . 'cscope.*'
endfun
fun! MyFun_mktag()
exe ':!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .'
endfun
fun! MyFun_mkcscope(p_dir)
if has("cscope")
silent! execute "cs kill -1"
else
return
endif
let dir = a:p_dir . "/"
if filereadable(dir."cscope.files")
let csfilesdeleted=delete(dir."cscope.files")
if(csfilesdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the " . dir . "cscope.files" | echohl None
return
endif
endif
if filereadable(dir."cscope.out")
let csoutdeleted=delete(dir."cscope.out")
if(csoutdeleted!=0)
echohl WarningMsg | echo "Fail to do cscope! I cannot delete the " . dir . "cscope.out" | echohl None
return
endif
endif
silent! exe ':!rm -f ' .dir . 'cscope.*'
if(executable('cscope') && has("cscope") )
silent! execute '!find ' . dir . ' |grep -E "\.(c|cc|cp|cpp|cxx|ipp|c\+\+|h|h\+\+|hh|hp|hpp|hxx|java)$" > ' . dir . 'cscope.files'
silent! execute "!cscope -bq -i " . dir . "cscope.files" . " -f " . dir . "cscope.out"
execute "normal :"
exe ':call MyFun_loadcscope("' . a:p_dir . '")'
endif
endfun
fun! MyFun_loadcscope(p_dir)
if has("cscope")
let dir = a:p_dir . "/"
if filereadable(dir."cscope.out")
execute "cs add " . dir . "cscope.out " . dir
endif
endif
endfun
fun! MyFun_check_tag()
if filereadable("tags")
silent! exe ':call MyFun_mktag()'
endif
if filereadable("cscope.out")
silent! exe ':call MyFun_mkcscope(".")'
endif
endfun
fun! MyFun_make()
exe ':wall'
exe ':make'
endfun
fun! MyFun_remake()
exe ':wall'
exe ':call MyFun_check_tag()'
exe ':make clean'
exe ':make'
endfun
command! -nargs=1 Csm :call MyFun_mkcscope(<q-args>)
command! -nargs=1 Csc :call MyFun_cleantag(<q-args>)
command! -nargs=1 Csl :call MyFun_loadcscope(<q-args>)
set tags=~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags,../tags,../../tags
"set tags=~/.vim/ice_tags,~/.vim/bdb_tags,~/.vim/mongodb_tags,~/.vim/cpp_tags,~/.vim/c_tags,../../include/tags,../include/tags,./tags,../tags,../../tags
""""""""""""""""""""""""""""""
" taglist的配置
""""""""""""""""""""""""""""""
filetype on "文件类型自动检测
let Tlist_Ctags_Cmd = 'ctags' "ctags 执行文件
let Tlist_Show_One_File = 0 "0 显示多个文件 1 不同时显示多个文件的tag
let Tlist_File_Fold_Auto_Close = 1 "非当前文件,函数列表折叠隐藏
let Tlist_Exit_OnlyWindow = 1 "如果taglist窗口是最后一个窗口,则退出vim
let Tlist_WinWidth = 40
nmap <F11> :Tlist<cr>
imap <F11> <esc><F11>a
""""""""""""""""""""""""""""""
" WinManager
""""""""""""""""""""""""""""""
let g:winManagerWindowLayout='FileExplorer|TagList' " 设置窗口布局
let g:winManagerWidth=40
nmap <F12> :WMToggle<cr>
imap <F12> <esc><F12>a
""""""""""""""""""""""""""""""
" MiniBufExplorer
""""""""""""""""""""""""""""""
let g:miniBufExplMapWindowNavArrows = 1 " 通过方向键切换窗口
let g:miniBufExplMapCTabSwitchBufs = 1 " 供过tab切换窗口
let g:miniBufExplModSelTarget = 1
let g:miniBufExplMapWindowNavVim = 1 " 通过h,j,k,l切换窗口 ( l没有发挥作用: 关闭金山词霸的热键 )
""""""""""""""""""""""""""""""
" OmniCppComplete
""""""""""""""""""""""""""""""
set nocp
filetype plugin on
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1 " 输入 . 后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_ShowScopeInAbbr = 1 " 显示匹配项所在域,并移除缩略信息中最后一列
let OmniCpp_DefaultNamespaces = ["std","Emdp"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest
" highlight Pmenu guibg=darkgrey guifg=black
" highlight PmenuSel guibg=blue guifg=white
""""""""""""""""""""""""""""""
" NERD_commenter的配置 无效?
""""""""""""""""""""""""""""""
"let NERDShutUp=1 " 支持单行和多行的选择
"map <C-C><C-H> ,c<space>
""""""""""""""""""""""""""""""
" DoxygenToolkit的配置
""""""""""""""""""""""""""""""
map fg : Dox<cr>
let g:DoxygenToolkit_authorName="yucheng"
let g:DoxygenToolkit_licenseTag="yucheng"
let g:DoxygenToolkit_undocTag="DOXIGEN_SKIP_BLOCK"
let g:DoxygenToolkit_briefTag_pre = "@brief\t"
let g:DoxygenToolkit_paramTag_pre = "@param\t"
let g:DoxygenToolkit_returnTag = "@return\t"
let g:DoxygenToolkit_briefTag_funcName = "no"
let g:DoxygenToolkit_maxFunctionProtoLines = 30
""""""""""""""""""""""""""""""
" grep.vim 的配置
""""""""""""""""""""""""""""""
let Grep_Default_Filelist = '*.h *.hp *.hpp *.hxx *.cpp *.ipp *.cxx *.cp *.cc *.c *.java'
"colorscheme darkblue
colorscheme desert
"colorscheme professional
"colorscheme Dark
"colorscheme shine
"colorscheme devcpp
"colorscheme wuye
"colorscheme borland
"colorscheme ron
"colorscheme blue
"colorscheme pablo
"colorscheme delek
把VIM打造成IDE的更多相关文章
- 【转】谁说Vim不是IDE?(二)
谁说Vim不是IDE?(二) 环境配置 “如果你认为Vim只是一个文本编辑器,你就输了”——来自Vim老鸟 Vim以简洁的方式提供了丰富的配置功能,主要配置体系由一个文件和文件夹组成.在一台安装了 ...
- 【转】谁说Vim不是IDE?(三)
谁说Vim不是IDE?(三) 常用插件 之所以说Vim形成了自己的生态环境,就是因为Vim具备开放的插件体系,开发者为了提升开发效率,为Vim编写了数以万计的插件,我们可以根据需要任意选择,也可以 ...
- 【转】谁说Vim不是IDE?(一)
谁说Vim不是IDE?(一) 话说操作系统.编程语言和编辑器似乎是程序员永恒的吐槽话题,技术发展了几十年,大家讨论起这几个“之争”还是充满愤怒.津津乐道.有人描述过Emacs和VI程序员,大家沿着 ...
- vim as python IDE
参照Martin Brochhaus大神的视频,今天我也尝试了一下配置vim python IDE以后使用过程中只需要https://github.com/wyj1239630590/vim-as-a ...
- vim配置轻量级IDE
安装VIM 安装YouCompleteMe的时候, 需要VIM的版本比较高, 一般一些Linux长期支持版的Vim包就比较老, 所以可能需要编译安装. 卸载之前系统中安装的版本: CentOS/Fed ...
- Linux+环境使用vim搭建php+IDE
让我们开始DIY吧-!!终端下执行命令:whereis vim 将列出vim安装的路径. 否则执行 sudo apt-get install vim 安装vim .成功安装了vim,只需要在用 ...
- vim打造开发IDE
个人的插件和配置 set nocompatible " 去除VI一致性,必须要添加 filetype off " 必须要添加 " advanced keys " ...
- MACOS配置VIM成简单IDE傻瓜式操作
零.参考文献: https://www.jianshu.com/p/f0513d18742a 一.安照我的配置:保存文件 " Configuration file for vim " ...
- vim配置为IDE环境(超详细,极力推荐 git)
https://github.com/yangyangwithgnu/use_vim_as_ide 1. 用法 git clone https://github.com/VundleVim/Vundl ...
随机推荐
- 基于Token的WEB后台认证机制
几种常用的认证机制 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的username和password,简言之,Basic Auth是配合RES ...
- Java集合框架知识总结
两大体系:Collection,Map 一.Collection: List 接口 : List:里面对象全部是有序的(通过三种方法来遍历) ArrayList,LinkedList,Vertor A ...
- 20_学生选课数据库SQL语句练习题1
25.查询95033班和95031班全体学生的记录. select * from STUDENT t,SCORE s where t.sclass=95033 or t.sclass=95031 26 ...
- Atitit attilax在自然语言处理领域的成果
Atitit attilax在自然语言处理领域的成果 1.1. 完整的自然语言架构方案(词汇,语法,文字的选型与搭配)1 1.2. 中文分词1 1.3. 全文检索1 1.4. 中文 阿拉伯文 英文的简 ...
- JS 内置对象
内置对象的定义:有ECMAScript实现提供的.不依赖与宿主环境的对象,在ECMAScript运行之前就已经创建好的对象就叫做内置对象. 就是说,是不需要我们开发人员先是的实例化对象就能够调用和运行 ...
- 用例设计工具PICT — 输入组合覆盖
1 成对测试简介 成对测试(Pairwise Testing)又称结对测试.两两测试,是一种正交分析的测试技术.成对组合覆盖这一概念是Mandl于1985年在测试Aad编译程序时提出来的.是当不可能遍 ...
- 重构Mybatis与Spring集成的SqlSessionFactoryBean(2)
三.代码重构 1.先使用Eclipse把buildSqlSessionFactory()方法中众多的if换成小函数 protected SqlSessionFactory buildSqlSessio ...
- 学习bootstrap遇到的问题--001 关于bootstrap中类.disabled不禁用默认行为
自学bootstrap遇到的疑惑篇: 按钮状态--禁用 在Bootstrap框架中,要禁用按钮有两种实现方式: 方法1:在标签中添加disabled属性 方法2:在元素标签中添加类名"dis ...
- mysql基础知识扫盲
本篇主要介绍关于mysql的一些非常基础的知识,为后面的sql优化做准备. 一:连接mysql 关于mysql的下载和安装我在这里就不说了,第一步我们要连接我们的mysql服务器,打开cmd命令切换到 ...
- JTMz换路径导致MySQL服务不能启动的问题
问题: JTMz解压到我的机器上,运行一次后,把服务停止了,然后移到了另外一个路径,JTMz中自带的MySQL服务启动不起来了. 解决: 在注册表中修改 HKEY_LOCAL_MACHINE\SYST ...