vim IDE平台-打造屬於自己的配置


vim IDE平台-打造屬於自己的配置

一、前言

        目前工作環境基本以Linux為主,自然用到VIM也很多,很早就對如何提高VIM的使用效率有所研究,限於時間關系,也沒做個系統記錄和資料積累,時間久了又容易忘,好久沒寫文檔了,算是對自己一個交代。本文所涉及的配置和插件在附件中有下載。

二、環境

     開篇之前,有必要交代一下系統環境和常用軟件版本。

    操作系統: centos 6.2,2.6.32-431.el6.i686

    git 版本: 3.2.29

    yum版本: 1.8

    vim版本 : 7.2.411

 

三、vim配置

3.1 基本配置

    包括一些基本的語法,縮進,代碼折疊,高亮模式,窗口分割等,具體如下:

syn on              " 打開語法高亮
set expandtab    " 轉義tab,當寫python代碼時很有用
set tabstop=4       " 設置tab鍵的寬度
set softtabstop=4
set backspace=2     " 設置退格鍵可用
set smartindent     " 智能對齊方式
set shiftwidth=4    " 換行時行間交錯使用4個空格
set autoindent      " 自動對齊
set cindent         "設置C/C++縮進方式
"set ai!             " 設置自動縮進

set nu!             " 顯示行號
set linebreak       " 整詞換行
set whichwrap=b,s,<,>,[,]       " 光標從行首和行末時可以跳到另一行去
set autochdir                   " 自動設置目錄為正在編輯的文件所在的目錄
set hidden          " 沒有保存的緩沖區可以自動被隱藏

set scrolloff=5

"--------------------------------------------------------------------------------

" 查找/替換相關的設置

"--------------------------------------------------------------------------------

set hlsearch        " 高亮顯示搜索結果

set incsearch       " 查詢時非常方便,如要查找book單詞,當輸入到/b時,會自動找到

                    " 第一個b開頭的單詞,當輸入到/bo時,會自動找到第一個bo開頭的

                    " 單詞,依次類推,進行查找時,使用此設置會快速找到答案,當你

                    " 找要匹配的單詞時,別忘記回車

set gdefault        " 替換時所有的行內匹配都被替換,而不是只有第一個


set showmatch       " 設置匹配模式,類似當輸入一個左括號時會匹配相應的那個右括號

colorscheme desert  "設置顏色模式

"--------------------------------------------------------------------------------

" 代碼折疊

"--------------------------------------------------------------------------------

set foldmethod=syntax

set foldlevel=100       " Don't autofold anything (but I can still fold manually)

"set foldopen-=search   " don't open folds when you search into them

"set foldopen-=undo     " don't open folds when you undo stuff

"set foldcolumn=4

" 窗口操作的快捷鍵

"--------------------------------------------------------------------------------
"  垂直分割當前窗口
nmap wv     <C-w>v    
 " 關閉當前窗口
nmap wc     <C-w>c     
" 水平分割當前窗口
nmap ws     <C-w>s     
View Code

3.2 插件管理

         前期基本對VIM插件未進行管理,導致所有的插件都集中在.vim目錄下,這對於刪除一個插件來說還是比較麻煩的,目前管理vim插件的工具有幾個,比較出名的如pathogen和vundle這兩類,這兩個插件各有優勢,應用領域有所不同,關鍵區別如下:

        pathogen: 解決多插件文件分散問題, 集中管理插件目錄,增加,刪除插件都很方便,

        vundle: 解決自動搜索和下載插件問題, 方便插件的安裝和更新,使插件能夠時刻保持與線上版本一致

3.2.1 pathogen的安裝與配置

1) 下載:git clone https://github.com/tpope/vim-pathogen

2)  在.vim目錄下新建 autoload和bundle目錄

3) 將下載的pathogen包中的pathogen.vim拷貝到~/.vim/autoload

4)  配置pathogen: 在~/.vimrc中配置如下一句:

call pathogen#infect()

注意:此句一定要配置再filetype plugin on 之前

5) 作用:配好后,pathogen會自動加載位於bundle目錄下的所有插件

 

3.2.2 vundle配置

 1) 下載:git clone https://github.com/gmarik/vundle.git

2) 安裝:將其復制到~/.vim/bundle目錄

3) 配置:

    set nocompatible               " be iMproved
     filetype off                   " required!       /**  從這行開始,vimrc配置 **/

     set rtp+=~/.vim/bundle/vundle/
     call vundle#rc()

     " let Vundle manage Vundle
     " required! 
     Bundle 'gmarik/vundle'

    
     "  Github上非vim-scripts倉庫插件格式(github用戶名/插件名)
     Bundle 'tpope/vim-fugitive'    
     Bundle 'tpope/vim-rails.git'

    " Github vim-scripts倉庫插件格式
     Bundle 'python.vim'
   
     " 非上述兩種模式
     Bundle 'git://git.wincent.com/command-t.git'
     " ... 

     filetype plugin indent on  " 必須有這句

 

 

四 、其它插件安裝

4.1 Taglist

作用:顯示文件變量、宏、函數等tag,  以tags文件為基礎,結合ctags軟件使用

下載:http://sourceforge.net/projects/vim-taglist/files/vim-taglist/

安裝:直接拷貝vim-taglist目錄到~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" TagList :Tlist

"--------------------------------------------------------------------------------

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow = 1

"let Tlist_Use_Right_Window=1

效果截圖:

 

4.2 winmanager

作用:規划布局各插件在vim中的顯示,使其顯示分明

下載:http://www.vim.org/scripts/script.php?script_id=95

安裝:解壓目錄放到~/.vim/bundle下

配置:

"--------------------------------------------------------------------------------

" WinManager :WMToggle

"--------------------------------------------------------------------------------

let g:winManagerWindowLayout='FileExplorer|TagList'


"是nomal模式的命令,不是Ex模式的

nmap wm :WMToggle<cr>  "快捷鍵

使用: 直接在vim命令行模式輸入WMToggle即可顯示winmanager布局,再次輸入WMToggle即可關閉布局

效果圖:

 

4.3 MiniBufExplorer

作用:顯示打開的文件標簽欄,即類似於tab效果,方便文件間切換

下載: http://www.vim.org/scripts/script.php?script_id=159

安裝:直接將下載文件解壓放至~/.vim/bundle

配置:

"--------------------------------------------------------------------------------

" MiniBufExp

"--------------------------------------------------------------------------------

let g:miniBufExplMapWindowNavArrows = 1  “按左右箭頭切換文件標簽,再按enter鍵即可打開選擇的文件標簽

let g:miniBufExplMapCTabSwitchBufs = 1   "按Tab鍵也可達到切換效果

使用: 當打開winmanger布局時,用ctrl+w+w命令進入FileExplorer窗口, 按上下選擇鍵選擇文件回車打開,即可再miniBufExplorer窗口顯示打開的文件標簽.

效果:如winmanager截圖,最上面的小窗口所示,同時打開了3個文件

4.4 grep.vim

作用:類似於grep功能,查找關鍵字

下載: http://www.vim.org/scripts/script.php?script_id=311

安裝: 解壓目錄至~/.vim/bundle

配置:

"直接按下<F3>鍵來查找光標所在的字符串

nnoremap <silent> <F3> :Rgrep<CR>

使用: 移動光標至關鍵字處,按F3,會在vim命令行處顯示查找相關關鍵字的提示,按enter鍵進入查找,然后選擇查找目錄,默認是當前目錄,按回車后會出現查找模式,默認為*,即只要包含此管鍵字的文件行都會被查找出來,要退出查找過程也很簡單,按ESC鍵即可。

效果如下:如要查找about_pages關鍵字,鼠標移動到該處,會作相應的提示,最后一張是查找結果圖

 

4.5 a.vim

作用:頭文件和源文件快速切換,這對於C/C++項目來說還是很方便的

下載: http://www.vim.org/scripts/script.php?script_id=31

安裝: 解壓目錄至 ~/.vim/bundle

配置:

nnoremap <silent> <F12> :A<CR>

使用: 按F12鍵則可在源文件和頭文件之間切換

 

4.6 omnicppcomplete

作用: 智能C/C++庫補全, 為了使用此控件,還要下載專門的C++源庫文件,同時得先安裝好ctags軟件以便生成tags文件

下載:

#omnicomplete下載
http://www.vim.org/scripts/script.php?script_id=1520

#文件結構類似於
|--omnicppcomplete

|---after
|    |---ftplugin |---autoload
|    |---omni
|    |   |---common
|    |   |---cpp
|---doc
#C
++源庫下載
http://www.vim.org/scripts/script.php?script_id=2358

 

安裝:

1) 對於omnicppcomplete, 解壓文件到~/.vim,  有after、autoload、doc三個目錄, autoload下有omni子目錄,注意使用bundle來管理時,如果將包解壓在~/.vim/bundle下時會識別不到,omni補全將失效;

2) 對於源碼,將其解壓到指定目錄,如/usr/local/cpp_src, 進入該目錄,執行ctags命令生成tags文件,具體如下:

cd /usr/local/cpp_src
tar -jxvf cpp_src.tar.bz2
ctags -R --c++-kinds=+p --fields=+iaS --extra=+q . #不能簡單的執行ctags -R, 需要帶參數才能識別C++庫
move tags cpp  #重命名,非必須為區別起見

 

配置:

set completeopt=longest,menu    " 關掉智能補全時的預覽窗口

filetype plugin indent on       " 加了這句才可以用智能補全

let OmniCpp_MayCompleteDot = 1 " autocomplete with
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
"默認以std 命名空間為准, using namespace std
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]  
"加載CPP庫tags文件
set tags+=/usr/local/cpp_src/cpp

使用效果如下圖:

 

4.7 cscope

作用: 此插件作用相信用過的人誰用誰知道,windows下有SourceInsights, Linux 下也有Cscope來撐腰,通過它可以方便的查看函數定義及其函數調用關系

安裝:http://cscope.sourceforge.net/,  下載源碼包,編譯安裝,由於現在vim7.2已經集成有cscope,所以如果vim版本是7以上的話就不用安裝了,同時為方便操作,cscope提供了大量的快捷鍵來操作以提高操作效率,快捷鍵映射需借助cscope_maps.vim插件,下載地址:在vim.org上有,可自行網上下載,下載后直接安裝在~/.vim/bundle/cscope下

配置:

 

"--------------------------------------------------------------------------------

" cscope

"--------------------------------------------------------------------------------

cs add /home/src/cscope.out /home/src

:set cscopequickfix=s-,c-,d-,i-,t-,e-

:set cscopetag

" 按下面這種組合鍵有技巧,按了<C-_>后要馬上按下一個鍵,否則屏幕一閃

" 就回到nomal狀態了

" <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找C代碼符號

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr>  "查找本定義

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找調用本函數的函數

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr>   "查找本字符串

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<cr>    "查找本egrep模式

nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr>    "查找本文件

nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr> :cw<cr>  "查找包含本文件的文件

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr>  " 查找本函數調用函數

 

使用:

1) 先生成cscope數據庫文件,如在/home/src/下,執行 cscope -Rbq, 即可生成cscope.out文件

2)配置:然后可像上述配置一樣將cscope.out文件加載到vimrc中,也可手動加載,執行: cs add cscope.out /home/src

3)快捷鍵: 將光標移至函數名稱處,先按ctrl+下划線,再快速按相應字母即可實現相應的查找功能。

 

4.8 其它插件

    還有一些其它插件,根據需求來安裝,如markdown,python, emmet等,這些直接下載相應文件到bundle目錄即可,markdown還需要一些配置,可參考附件vimrc文件

五、總結

      終於總結完了,在用vim的過程中,遇到很多問題,雖然用了很久,但深知還有很多功能尚未用到,還有待挖掘,只能不斷學習總結。

六、附件

6.1 vimrc

call pathogen#infect()
set expandtab
set tabstop=4       " 設置tab鍵的寬度
set softtabstop=4
set shiftwidth=4
set backspace=2     " 設置退格鍵可用

set nu!             " 顯示行號


set linebreak       " 整詞換行

set whichwrap=b,s,<,>,[,]       " 光標從行首和行末時可以跳到另一行去



set autochdir                   " 自動設置目錄為正在編輯的文件所在的目錄

set hidden          " 沒有保存的緩沖區可以自動被隱藏

set scrolloff=5



"--------------------------------------------------------------------------------

" 查找/替換相關的設置

"--------------------------------------------------------------------------------

set hlsearch        " 高亮顯示搜索結果

set incsearch       " 查詢時非常方便,如要查找book單詞,當輸入到/b時,會自動找到

                    " 第一個b開頭的單詞,當輸入到/bo時,會自動找到第一個bo開頭的

                    " 單詞,依次類推,進行查找時,使用此設置會快速找到答案,當你

                    " 找要匹配的單詞時,別忘記回車

set gdefault        " 替換時所有的行內匹配都被替換,而不是只有第一個



"--------------------------------------------------------------------------------

" 狀態欄相關的設置

"--------------------------------------------------------------------------------

set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%]

set laststatus=2    " always show the status line

set ruler           " 在編輯過程中,在右下角顯示光標位置的狀態行



"--------------------------------------------------------------------------------

" 編程相關的設置

"--------------------------------------------------------------------------------

set completeopt=longest,menu    " 關掉智能補全時的預覽窗口

filetype plugin indent on       " 加了這句才可以用智能補全

let OmniCpp_MayCompleteDot = 1 " autocomplete with
let OmniCpp_MayCompleteArrow = 1 " autocomplete with ->
let OmniCpp_MayCompleteScope = 1 " autocomplete with ::
let OmniCpp_SelectFirstItem = 2 " select first item (but don't insert)
let OmniCpp_NamespaceSearch = 2 " search namespaces in this and included files
let OmniCpp_ShowPrototypeInAbbr = 1 " show function prototype in popup window
let OmniCpp_GlobalScopeSearch=1 " enable the global scope search
let OmniCpp_DisplayMode=1 " Class scope completion mode: always show all members
let OmniCpp_ShowScopeInAbbr=1 " show scope in abbreviation and remove the last column
let OmniCpp_ShowAccess=1
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]

"set tags=./tags
"set tags+=/usr/include/c++/tags
set tags+=/usr/local/cpp_src/cpp

syn on              " 打開語法高亮

set showmatch       " 設置匹配模式,類似當輸入一個左括號時會匹配相應的那個右括號

set smartindent     " 智能對齊方式

set shiftwidth=4    " 換行時行間交錯使用4個空格

set autoindent      " 自動對齊

set cindent         "設置C/C++縮進方式
"set ai!             " 設置自動縮進

colorscheme desert



"--------------------------------------------------------------------------------

" 代碼折疊

"--------------------------------------------------------------------------------

set foldmethod=syntax

set foldlevel=100       " Don't autofold anything (but I can still fold manually)

"set foldopen-=search   " don't open folds when you search into them

"set foldopen-=undo     " don't open folds when you undo stuff

"set foldcolumn=4

" 窗口操作的快捷鍵

"--------------------------------------------------------------------------------
"  垂直分割當前窗口
nmap wv     <C-w>v    
 " 關閉當前窗口
nmap wc     <C-w>c     
" 水平分割當前窗口
nmap ws     <C-w>s     

"###############################################################################

" The following is the Plugins' setting

"###############################################################################


"--------------------------------------------------------------------------------

" TagList :Tlist

"--------------------------------------------------------------------------------

let Tlist_Show_One_File=1

let Tlist_Exit_OnlyWindow = 1

"let Tlist_Use_Right_Window=1



"--------------------------------------------------------------------------------

" netrw 文件瀏覽器 :e <PATH>

"--------------------------------------------------------------------------------

"let g:netrw_winsize = 30       " 瀏覽器寬度

"--------------------------------------------------------------------------------

" QuickFix

"--------------------------------------------------------------------------------
" 切換到下一個結果
nmap <F6> :cn<cr>  
 " 切換到上一個結果
nmap <F7> :cp<cr>   



"--------------------------------------------------------------------------------

" WinManager :WMToggle

"--------------------------------------------------------------------------------

let g:winManagerWindowLayout='FileExplorer|TagList'


"是nomal模式的命令,不是Ex模式的

nmap wm :WMToggle<cr> 


"--------------------------------------------------------------------------------

" MiniBufExp

"--------------------------------------------------------------------------------


let g:miniBufExplMapWindowNavArrows = 1

let g:miniBufExplMapCTabSwitchBufs = 1




"--------------------------------------------------------------------------------

" cscope

"--------------------------------------------------------------------------------

cs add /home/src/cscope.out /home/src

:set cscopequickfix=s-,c-,d-,i-,t-,e-

:set cscopetag

" 按下面這種組合鍵有技巧,按了<C-_>后要馬上按下一個鍵,否則屏幕一閃

" 就回到nomal狀態了

" <C-_>s的按法是先按"Ctrl+Shift+-",然后很快再按"s"

nmap <C-_>s :cs find s <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>g :cs find g <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>c :cs find c <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>t :cs find t <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>e :cs find e <C-R>=expand("<cword>")<cr><cr> :cw<cr>

nmap <C-_>f :cs find f <C-R>=expand("<cfile>")<cr><cr>

nmap <C-_>i :cs find i <C-R>=expand("<cfile>")<cr><cr> :cw<cr>

nmap <C-_>d :cs find d <C-R>=expand("<cword>")<cr><cr> :cw<cr>



"--------------------------------------------------------------------------------

" Grep

"--------------------------------------------------------------------------------

"直接按下<F3>鍵來查找光標所在的字符串

nnoremap <silent> <F3> :Rgrep<CR>



"--------------------------------------------------------------------------------

" A

"--------------------------------------------------------------------------------

nnoremap <silent> <F12> :A<CR>




" NERD_commenter

"--------------------------------------------------------------------------------

let NERD_c_alt_style = 1    " 將C語言的注釋符號改為//, 默認是/**/

"nmap <F5> ,cc



"--------------------------------------------------------------------------------

" SuperTab :SuperTabHelp

"--------------------------------------------------------------------------------

let g:SuperTabRetainCompletionType = 2

let g:SuperTabDefaultCompletionType = "<C-X><C-O>"


"--------------------------------------------------------------------------------

" CVim :help csupport

"--------------------------------------------------------------------------------

let g:C_Comments = "no"         " 用C++的注釋風格

let g:C_BraceOnNewLine = "no"   " '{'是否獨自一行

let g:C_AuthorName = "Wen Qiuliang"

let g:C_Project="F9"

let g:C_TypeOfH = "c"           " *.h文件的文件類型是C還是C++

let g:user_emmet_settings = {
  \  'php' : {
  \    'extends' : 'html',
  \    'filters' : 'c',
  \  },
  \  'xml' : {
  \    'extends' : 'html',
  \  },
  \  'haml' : {
  \    'extends' : 'html',
  \  },
  \}

" vim markdown config
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd
let g:vim_markdown_folding_disabled=1
let g:vim_markdown_frontmatter=1
View Code

6.2  插件

    本文所涉及的所有插件都上傳在github中,地址如下:

https://git.oschina.net/ballwql/vim-plugin.git

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM