将vim打造成IDE编译环境——自己用的vim(gvim)插件

网上经过多方搜索,在前大神们的指导下,终于让自己的vim有了一点雏形。但是网上的一些教程难免有笔误,或者是与自己不符的地方,特此立文,防止重装环境后不好找这些插件。
#=============================================================================
1. 查看 key 相关信息说明的命令  :help keycodes
 10 
 11  #=============================================================================
 12  2. ctags
 13  (1) . 帮助手册查看
 14      :help usr_29
 15 
 16  (2) . 功能
 17      ctags的功能, 只要在unix/linux环境编程过的人都知道它的历害! 我在这也作个小
 18      小介绍吧ndow=0: 对浏览代码非常的方便, 可以在函数, 变量之间跳来跳去等等. (注
 19              意: 我这里说到的仅是小小的一部分!) .
 20 
 21  (3) . 安装
 22      首先, 下载ctags安装包, 然后解压并安装, 命令如下:
 23      $ tar -xzvf ctags-5.6.tar.gz
 24      $ cd ctags-5.6
 25      $ make
 26      # make install   // 需要root权限
 27          或:
 28          $ tar -xzvf ctags-5.7.tar.gz
 29          $ cd ctags-5.7
 30          $ ./configure
 31          # make
 32          # make install
 33 
 35  (4) . 使用方法
 36      然后去你的源码目录, 如果你的源码是多层的目录, 就去最上层的目录, 在该目录下
 37      运行命令: ctags -R
 38      我现在以 vim71 的源码目录做演示
    ( 此处可以用脚本,把ctags跟cscope要生成的东东一起生成  
 39      $ cd /home/nuoerll/vim71
 40      $ ctags -R
 41 
 42      此时在/home/nuoerll/vim71目录下会生成一个 tags 文件, 现在用vim打开
 43      /home/nuoerll/vim71/src/main.c
 44      $ vim /home/nuoerll/vim71/src/main.c
 45      
 46      再在vim中运行命令:
 47      :set tags=/home/nuoerll/vim71/tags
 48      该命令将tags文件加入到vim中来, 你也可以将这句话放到~/.vimrc中去, 如果你经
 49      常在这个工程编程的话.
 50      对于经常在不同工程间编程, 可以在.vimrc中设置:
 51          set tags=tags
 52          set autochdir  "这句即使不用ctags也要加。跳转到当前目录
 53 
 54  (5) . 使用例子
 55      把光标定位到某一函数名上, 按下 Ctar + ], vim就可以自动切换到该函数定义处!
 56      要返回只需要按下Ctrl + t .
 57      更多用法, 在vim命令模式输入 :help usr_29 查看即可.
 58 
 59 
 60  #=============================================================================
 61  3. TagList 插件
 62  (1) . 帮助手册查看
 63      :help taglist.txt
 64 
 65  (2) . 功能
 66      高效地浏览源码, 其功能就像vc中的workpace, 那里面列出了当前文件中的所有宏,
 67      全局变量, 函数名等.
 68 
 69  (3) . 安装
 70      下载taglist压缩包, 然后把解压的两个文件taglist.vim 和 taglist.txt 分别放到
 71      $HOME/.vim/plugin 和 $HOME/.vim/doc 目录中.
 72 
 73  (4) . 使用方法
 74      首先请先在你的~/.vimrc文件中添加下面语句:
 75          let Tlist_Ctags_Cmd=' /usr/bin/ctags ' "此处是ctags的安装目录
 76           let Tlist_Show_One_File=1
 78          let Tlist_OnlyWindow=1
 79          let Tlist_Use_Right_Window=0
 80          let Tlist_Sort_Type=' name '
 81          let Tlist_Exit_OnlyWindow=1
 82          let Tlist_Show_Menu=1
 83          let Tlist_Max_Submenu_Items=10
 84          let Tlist_Max_Tag_length=20
 85          let Tlist_Use_SingleClick=0
 86          let Tlist_Auto_Open=0
 87          let Tlist_Close_On_Select=0
 88          let Tlist_File_Fold_Auto_Close=1
 89          let Tlist_GainFocus_On_ToggleOpen=0
 90          let Tlist_Process_File_Always=1
 91          let Tlist_WinHeight=10
 92          let Tlist_WinWidth=18
 93          let Tlist_Use_Horiz_Window=0
 94 
 95      
 96      此时用vim打开一个c源文件试试:
 97      $ vim ~/vim/src/main.c
 98      
 99      进入vim后用下面的命令打开taglist窗口.
100      :Tlist
101 
102      为了更方便地使用, 可以在.vimrc文件中加入:
103          map < silent > < leader >tl :TlistToggle< CR >
104      这样就可以用 " ,tl " 命令进行taglist窗口的打开和关闭之间方便切换了. // 这里
105      的" , "是我.vimrc设置的leader, 你也可以设置成别的, 在.vimrc中修改即可, 如我
106      的: let mapleader=" ,
107          
108      
109  #=============================================================================
110  4. WinManager 插件
111  (1) . 帮助手册查看
112      :help winmanager
113 
114  (2) . 功能
115      管理各个窗口, 或者说整合各个窗口.
116 
117  (3) . 安装
118      下载WinManager.zip压缩包, 解压后把*.vim文件放到 $HOME/.vim/plugin 目录中,
119      把*.txt文件放到 $HOME/.vim/doc 目录中.
120 
121  (4) . 使用方法
122      在.vimrc中加入如下设置:
123      let g:winManagerWindowLayout=' FileExplorer '  // 这里可以设置/
124      为多个窗口, 如' FileExplorer|BufExplorer|TagList '
125      let g:persistentBehaviour=0             // 只剩一个窗口时, 退出vim.
126      let g:winManagerWidth=20
127      let g:defaultExplorer=1
128      nmap < silent > < leader >fir :FirstExplorerWindow< cr >
129      nmap < silent > < leader >bot :BottomExplorerWindow< cr >
130      nmap < silent > < leader >wm :WMToggle< cr >
131 
132  (5) . 使用例子
133      在终端输入vim启动vim:
134      $vim
135      在正常模式下, 敲入 " ,wm " 即可看到, vim的左侧新建了两个窗口:FileExplorer和
136      BufExplorer, 这样我们即可在FileExplorer窗口很方便地对目录进行查看, 编辑等
137      操作; 在BufExplorer窗口中查看当前vim已经打开那些文件.
138 
139 
140  #=============================================================================
141  5. cscope
142  (1) . 帮助手册查看
143      :help if_cscop.txt
144 
145  (2) . 功能
146      用Cscope自己的话说 - " 你可以把它当做是超过频的ctags ", 其功能和强大程度可见
147      一斑吧, 关于它的介绍我就不详细说了, 如果你安装好了前文介绍的帮助手册.
148 
149  (3) . 安装
150      如果是在linux环境中, cscope一般都会随系统一起安装了; 在windows环境中, 则需
151      要下载windows版本的 (cscope.exe) , 然后把它放到path环境变量所设
152      置的目录中 (如: C:/Program Files/Vim/vim72) .
153 
154  (4) . 使用方法
155      在.vimrc中增加如下设置, 就可以利用相应的快捷键进行不同的查找了.
156          if has ("cscope")
157              set cscopetag   "  使支持用 Ctrl+]  和 Ctrl+t 快捷键在代码间跳来跳去
158               "  check cscope for definition of a symbol before checking ctags:
159               " set to 1 if you want the reverse search order.
160              set csto=1
161 
162              "  add any cscope database in current directory
163              if filereadable( "cscope.out")
164                  cs add cscope.out
165              "  else add the database pointed to by environment variable
166              elseif $CSCOPE_DB != ""
167                  cs add $CSCOPE_DB
168              endif
169 
170              " show msg when any other cscope db added
171              set cscopeverbose
172 
173              nmap < C-/ >s :cs find s < C-R >=expand ("<cword>") < CR >< CR >
174              nmap < C-/ >g :cs find g < C-R >=expand ("<cword>") < CR >< CR >
175              nmap < C-/ >c :cs find c < C-R >=expand ("<cword>") < CR >< CR >
176              nmap < C-/ >t :cs find t < C-R >=expand ("<cword>") < CR >< CR >
177              nmap < C-/ >e :cs find e < C-R >=expand ("<cword>") < CR >< CR >
178              nmap < C-/ >f :cs find f < C-R >=expand ("<cfile>") < CR >< CR >
179              nmap < C-/ >i :cs find i ^< C-R >=expand ("<cfile>") < CR >$< CR >
180              nmap < C-/ >d :cs find d < C-R >=expand ("<cword>") < CR >< CR >
181          endif
182 
183  (5) . 使用例子
184      首先进入源码目录, 在linux终端中输入以下命令以创建cscope数据库:
185          $ find ~/work/..Project/ -name " *.h " -o -name " *.cpp " > cscope.files
186          $ cscope -bkq -i cscope.files
         ( 此处可以用脚本,把ctags跟cscope要生成的东东一起生成,脚本如下
######################脚本 start##################################    
               #!/bin/sh
               find . -name "*.h" -o -name "*.c"-o -name "*.cc" > cscope.files
               cscope -bkq -i cscope.files
               ctags -R
########################脚本 end###################################
191      然后, 用vim打开一个源文件 (如: vim main.cpp) ,
192      打开后, 第一件事就是导入cscope数据库了:
193          :cs add /home/yourname/workpace/cscope.out /home/yourname/workpace
194 
195      cscope数据库导入成功后, 就可以利用" 步骤(4) "中定义的快捷键进行相关的查找,
196      浏览等操作了 (当然也可以直接利用相关命令, 嘿嘿) .
197 
198  =============================================================================

6. MiniBufExplorer
下载地址http://www.vim.org/scripts/script.php?script_id=159
版本6.3.2
安装将下载的 minibufexpl.vim文件丢到 ~/.vim/plugin 文件夹中即可
手册
在minibufexpl.vim 文件的头部

在编程的时候不可能永远只编辑一个文件, 你肯定会打开很多源文件进行编辑, 如果每个文件都打开一个vim进行编辑的话那操作起来将是多麻烦啊, 所以vim有buffer(缓冲区)的概念, 可以看vim的帮助:
:help buffer
vim自带的buffer管理工具只有:ls, :bnext, :bdelete 等的命令, 既不好用, 又不直观. 现在隆重向你推荐一款vim插件(plugin): MiniBufExplorer

使用方法:
重新启动vim, 当你只编辑一个buffer的时候
MiniBufExplorer派不上用场, 当你打开第二个buffer的时候, MiniBufExplorer窗口就自动弹出来了, 见下图:

(--- 图13 ---)
上面那个狭长的窗口就是MiniBufExplorer窗口, 其中列出了当前所有已经打开的buffer, 当你把光标置于这个窗口时, 有下面几个快捷键可以用:
<Tab>向前循环切换到每个buffer名上
<S-Tab>向后循环切换到每个buffer名上
<Enter>在打开光标所在的buffer
d删除光标所在的buffer

以下的两个功能需要在~/.vimrc中增加:
let g:miniBufExplMapCTabSwitchBufs = 1

<C-Tab>向前循环切换到每个buffer上,并在但前窗口打开
<C-S-Tab>向后循环切换到每个buffer上,并在但前窗口打开

如果在~/.vimrc中设置了下面这句:
let g:miniBufExplMapWindowNavVim = 1
则可以用<C-h,j,k,l>切换到上下左右的窗口中去,就像:
C-w,h j k l    向"左,下,上,右"切换窗口.
在~/.vimrc中设置:
let g:miniBufExplMapWindowNavArrows = 1
是用<C-箭头键>切换到上下左右窗口中去
加上插件 minibufexplorer.vim 之后,总会有这种情况,多个窗口,其他插件总是不能和minibufexplorer.vim好好相处,
总会有多个窗口的错 误,尤其是切换buffer时,这时 在~/.vimrc 可以加上下面这句:
let g:miniBufExplorerMoreThanOne=0

7. taglist与minibufexpl冲突解决

这两个plugin在 www.vim.org 是排名前两位的(by rating),但是所谓鱼与熊掌不可兼得,minibufexpl与taglist合用时还是存在一点小问题。

在切换buffer时,如果之前焦点定位于taglist的窗口中,minibufexpl会毫不客气地在taglist的窗口中载入文件。为了解决这一点瑕疵,我对minibufexpl做了一点小修正。

请用以下代码替换原函数MBESelectBuffer()

"  MBENeedNextWindow - From the MBE window, test window under the cursor {{{
"
 
"
 If we are in our explorer, then we attempt to open the buffer under the
"
 cursor in the previous window.
"
function !   < SID > MBENeedNextWindow()
  
if  bufname( ' % ' ==   ' -MiniBufExplorer- '   || bufname( ' % ' ==   ' __Tag_List__ '   ||  (g:miniBufExplModSelTarget  ==   1   &&  getbufvar(bufnr( ' % ' ),  ' &modifiable ' ==   0 )
    
return   1
  
else
    
return   0
  endif
endfunction

"  }}}
"
 MBESelectBuffer - From the MBE window, open buffer under the cursor {{{
"
 
"
 If we are in our explorer, then we attempt to open the buffer under the
"
 cursor in the previous window.
"
function !   < SID > MBESelectBuffer()
  call 
< SID > DEBUG( ' =========================== ' , 10 )
  call 
< SID > DEBUG( ' Entering MBESelectBuffer() '  , 10 )
  call 
< SID > DEBUG( ' =========================== ' , 10 )

  
"  Make sure we are in our window
   if  bufname( ' % ' !=   ' -MiniBufExplorer- '
    call 
< SID > DEBUG( ' MBESelectBuffer called in invalid window ' , 1 )
    
return  
  endif

  let l:save_rep 
=   & report
  let l:save_sc  
=   & showcmd
  let 
& report     =   10000
  
set  noshowcmd 
  
  let l:bufnr  
=   < SID > GetSelectedBuffer()
  let l:resize 
=   0

  
if (l:bufnr  !=   - 1 )              "  If the buffer exists.

    let l:saveAutoUpdate 
=  g:miniBufExplorerAutoUpdate
    let g:miniBufExplorerAutoUpdate 
=   0
    
"  Switch to the previous window
    wincmd p
    
    let curbufname 
=  bufname( ' % ' )
    
"  If we are in the buffer explorer or in a nonmodifiable buffer with
     "  g:miniBufExplModSelTarget set then try another window (a few times)

    
while   < SID > MBENeedNextWindow()
        wincmd w
        
if  bufname( ' % ' ==  curbufname
            
break
        endif
    endwhile
    
"  The following handles the case where -MiniBufExplorer-
     "  is the only window left. We need to resize so we don't
     "  end up with a 1 or two line buffer. 
     if  bufname( ' % ' ==   ' -MiniBufExplorer- '
        let l:resize 
=   1
    endif

    exec(
' b!  ' .l:bufnr)
    
if  (l:resize)
      resize
    endif
    let g:miniBufExplorerAutoUpdate 
=  l:saveAutoUpdate
    call 
< SID > AutoUpdate( - 1 )

  endif

  let 
& report   =  l:save_rep
  let 
& showcmd  =  l:save_sc

  call 
< SID > DEBUG( ' =========================== ' , 10 )
  call 
< SID > DEBUG( ' Completed MBESelectBuffer() ' , 10 )
  call 
< SID > DEBUG( ' =========================== ' , 10 )

endfunction


=====================================有用的vimrc设置 START====================================================
set nu  "显示行号
set background=light "
设定字体顔色模式 , light使字体以较暗的顔色显示出来,适用于亮色系的背景;dark使字体以较亮的顔色显示出来,适用于暗色系的背景
set cindent  "编程c语言自动缩进
set cino=j1 "
设定c / c + + 自动缩进的风格
set fileencodings = utf8 , gb18030 , big5 , gb2312  "支持的字符编码
set formatoptions=rotcql "
设置Vim中文本和注释的换行方式
set incsearch "
输入查找内容的同时 , vim就开始对输入的内容进行匹配,并显示匹配的位置
set hlsearch  "对匹配的所有项目进行高亮显示
set ignorecase "
在查找时忽略大小写
set nocompatible  "去掉有关vi一致性模式,避免以前版本的一些bug和局限
set shiftwidth=4 "
反向制表符中的空格数目
set t ab stop = "指定tab缩进的字符数目
set smarttab "
解决shiftwidth和tabstop不等时的麻烦
set w ildmenu  "自动补全命令时候使用菜单式匹配列表
set mouse=a "
使用鼠标

syntax on  "开启语法高亮
filetype plugin indent on "
打开文件类型检测功能

let mapleader  = ","
let g : mapleader  = ","

"tags setup
if has("
ctags ")
    if filereadable("
tags ")
        set tags=tags
    endif
endif

"
Tlist setup
let Tlist_Ctags_Cmd  = '/usr/bin/ctags' "设定linux系统中ctags程序的位置
let Tlist_Sort_Type = "
name " " 使taglist以tag名字进行排序
let Tlist_Show_One_File  =  1  "不同时显示多个文件的tag,只显示当前文件的
let Tlist_Exit_OnlyWindow = 1 "
如果taglist窗口是最后一个窗口,则退出vim
let Tlist_Use_Right_Window  =  1  "在右侧窗口中显示taglist窗口 
let Tlist_Use_SingleClick = 1 "
单击tag就跳转
let Tlist_WinWidth  =  15  "taglist窗口的宽度
map <silent> <leader>tl :TlistToogle<cr>

"
LookupFile setup
let g : LookupFile_MinPatLength  =  2  "最少输入2个字符才开始查找
let g:LookupFile_PreserveLastPattern = 0 "
不保存上次查找的字符串
let g : LookupFile_PreservePatternHistory  =  1  "保存查找历史
let g:LookupFile_AlwaysAcceptFirst = 1 "
回车打开第一个匹配项目
let g : LookupFile_AllowNewFiles  =  0  "不允许创建不存在的文件

"
cscope setup
if  has ( "cscope" )
    set csprg = / usr / bin / cscope
    set csto = 1
    set cst
    set nocsverb
     if  filereadable ( "cscope.out" )
        cs add cscope . out
    endif
    set csverb
endif
======================================== 有用的vimrc设置 END =================================================
(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值