热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

把VIM打造成IDE

安装vim相关软件1编译安装VIM7.42安装ctags5.8ctags.sourceforge.netCent

=======================================
                                  
安装vim相关软件
=======================================

1 编译安装VIM7.4

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:winManagerhelptags ~/.vim/doc" -c "q"
map
,c   
"这样的话,在光标所在行上,按下一次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 shift
缩进所表示的空格数
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 @=((foldclosed(line(‘.‘)) <0) ?
‘zc‘ :
‘zo‘)

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 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 s :cs find s
=expand(""):copen
   
imap s s
    nmap g
:cs find g
=expand("")
   
imap g g
    nmap d
:cs find d
=expand(""):copen
   
imap d d
    nmap c
:cs find c
=expand(""):copen
   
imap c c
    nmap t
:cs find t
=expand(""):copen
   
imap t t
    nmap e
:cs find e
=expand(""):copen
   
imap e e
    nmap f
:cs find f
=expand("")
   
imap f f
    nmap i
:cs find i
=expand(""):copen
   
imap i i
endif   " if
has("cscope")

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
快捷键设置
"       nmap
是command模式,    imap
是insert模式
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"
F3       --- 查找
nmap
:Grep
imap
"
F4       --- 全部退出
nmap
:qall
imap
"
F5       --- 全部保存
nmap
:wall
imap
"
F6       --- 代码补全 ( insert模式 )
imap

" F7       ---
编译项目
nmap :call MyFun_make()
imap

" F8       ---
重新编译项目
nmap :call MyFun_remake()
imap

" F10      ---
生成当前目录的tags
nmap :call
MyFun_mktag()
imap
"
    --- 生成当前目录的cscope
nmap
:call MyFun_mkcscope(".")
imap

"
    --- 清除所有tags文件
nmap
:call MyFun_cleantag(".")
imap


"       
--- 清除屏幕高亮(搜索产生的)
nmap :noh
imap
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|cs)美元符" > ‘ . 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()
command! -nargs=1 Csc :call
MyFun_cleantag()
command! -nargs=1 Csl :call
MyFun_loadcscope()

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
:Tlist
imap
a

""""""""""""""""""""""""""""""
"
WinManager
""""""""""""""""""""""""""""""
let
g:winManagerWindowLayout=‘FileExplorer|TagList‘ " 设置窗口布局
let
g:winManager"""""""""""""""""""""""""""""
"
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

""""""""""""""""""""""""""""""
"
DoxygenToolkit的配置
""""""""""""""""""""""""""""""
map fg :
Dox
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‘

"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,布布扣,bubuko.com


推荐阅读
  • Linux 系统启动故障排除指南:MBR 和 GRUB 问题
    本文详细介绍了 Linux 系统启动过程中常见的 MBR 扇区和 GRUB 引导程序故障及其解决方案,涵盖从备份、模拟故障到恢复的具体步骤。 ... [详细]
  • 本文介绍了一款用于自动化部署 Linux 服务的 Bash 脚本。该脚本不仅涵盖了基本的文件复制和目录创建,还处理了系统服务的配置和启动,确保在多种 Linux 发行版上都能顺利运行。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 深入理解OAuth认证机制
    本文介绍了OAuth认证协议的核心概念及其工作原理。OAuth是一种开放标准,旨在为第三方应用提供安全的用户资源访问授权,同时确保用户的账户信息(如用户名和密码)不会暴露给第三方。 ... [详细]
  • 2023 ARM嵌入式系统全国技术巡讲旨在分享ARM公司在半导体知识产权(IP)领域的最新进展。作为全球领先的IP提供商,ARM在嵌入式处理器市场占据主导地位,其产品广泛应用于90%以上的嵌入式设备中。此次巡讲将邀请来自ARM、飞思卡尔以及华清远见教育集团的行业专家,共同探讨当前嵌入式系统的前沿技术和应用。 ... [详细]
  • 理解存储器的层次结构有助于程序员优化程序性能,通过合理安排数据在不同层级的存储位置,提升CPU的数据访问速度。本文详细探讨了静态随机访问存储器(SRAM)和动态随机访问存储器(DRAM)的工作原理及其应用场景,并介绍了存储器模块中的数据存取过程及局部性原理。 ... [详细]
  • 几何画板展示电场线与等势面的交互关系
    几何画板是一款功能强大的物理教学软件,具备丰富的绘图和度量工具。它不仅能够模拟物理实验过程,还能通过定量分析揭示物理现象背后的规律,尤其适用于难以在实际实验中展示的内容。本文将介绍如何使用几何画板演示电场线与等势面之间的关系。 ... [详细]
  • 本文介绍如何通过Windows批处理脚本定期检查并重启Java应用程序,确保其持续稳定运行。脚本每30分钟检查一次,并在需要时重启Java程序。同时,它会将任务结果发送到Redis。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文介绍如何在应用程序中使用文本输入框创建密码输入框,并通过设置掩码来隐藏用户输入的内容。我们将详细解释代码实现,并提供专业的补充说明。 ... [详细]
  • 本文介绍如何通过SQL查询从JDE(JD Edwards)系统中提取所有字典数据,涵盖关键表的关联和字段选择。具体包括F0004和F0005系列表的数据提取方法。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 本文介绍如何使用 NSTimer 实现倒计时功能,详细讲解了初始化方法、参数配置以及具体实现步骤。通过示例代码展示如何创建和管理定时器,确保在指定时间间隔内执行特定任务。 ... [详细]
  • 本文介绍了在Windows环境下使用pydoc工具的方法,并详细解释了如何通过命令行和浏览器查看Python内置函数的文档。此外,还提供了关于raw_input和open函数的具体用法和功能说明。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
author-avatar
工商领域LW
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有