[code]本文包含了vim的個性化設置及部分插件設置,是結合了網上許多教程整理而來,具體的插件教程網上有所介紹。
包括代碼自動補全,大括號自動換行縮進,多窗口管理,代碼折疊等功能。
都是從本人Ubuntu Server上copy過來的,所以是經過測試使用的。
[code]" ================ VIM Setting ================ "
syntax on " 語法高亮
filetype on
filetype plugin on
set ruler " 顯示標尺
set showcmd " 輸入的命令顯示出來
set scrolloff=3 " 光標移動到buffer的頂部和底部時保持3行距離
set laststatus=2 " 啟動顯示狀態行(1),總是顯示狀態行(2)
set foldenable " 允許折疊
set foldmethod=manual " 手動折疊
set nocompatible " 去一致性
set autoindent " 自動縮進
set cindent
set tabstop=2 " Tab鍵的寬度
set softtabstop=2 " 統一縮進為4
set shiftwidth=4
set expandtab " 不要用空格代替制表符
set smarttab " 在行和段開始處使用制表符
set number " 顯示行號
set history=1024 " 歷史記錄數
set hlsearch " 搜索逐字符高亮
set incsearch
set cmdheight=2 " 總是顯示狀態行
set iskeyword+=_,$,@,%,#,- " 帶有如下符號的單詞不被換行分割
set completeopt=preview,menu " 代碼補全
set clipboard+=unnamed " 共享剪貼板
set autowrite " 自動保存
set cursorline " 突出顯示當前行
set nocompatible " 不要使用vi的鍵盤模式,而是vim自己的
set confirm " 在處理未保存或只讀文件的時候,彈出確認
set ignorecase " 搜索忽略大小寫
set fillchars=vert:\ ,stl:\ ,stlnc:\ "在被分割的窗口間顯示空白,便於閱讀
set showmatch " 高亮顯示匹配的括號
set matchtime=1 " 匹配括號高亮的時間(單位是十分之一秒)
set showcmd
set showmode
set cindent " 使用C/C++語言的自動縮進方式
" set backspace = 2 " 設置退格鍵可用
" set previewwindow " 標識預覽窗口
set background=dark
set mouse=a " 使用鼠標
set linebreak " 整詞換行
set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s "設置C/C++語言的具體縮進方式
set whichwrap=b,s,<,>,[,] "光標從行首和行末時可以跳到另一行去
" 顏色設置
highlight PmenuSel ctermbg=green ctermfg=yellow
" 自動補全
:inoremap ( ()<ESC>i
:inoremap { {<CR><CR>}<ESC>kV<O<DEL>
:inoremap [ []<ESC>i
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
" ================ ctags setting ================ "
" 按下F4重新生成tag文件,並更新taglist
map <F4> :!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
imap <F4> <ESC>:!ctags -R --c++-kinds=+p --fileds=+iaS --extra=+q .<CR><CR> :TlistUpdate<CR>
set tags=tags
set tags+=./tags " add current directory's generated tags file
set tags+=~/libraries
set tags+=~/projects
set tags+=/usr/include/c++/tags
set tags+=/usr/include/linux/tags
set tags+=/usr/lib/x86_64-linux-gnu/5.3.1/include/tags
" ================ Omnicppcomplete Setting ================ "
" 按下F3自動補全代碼,注意該映射語句後不能有其他字符,包括Tab,否則會自動補全一些亂碼
imap <F3> <C-X><C-O>
" 按F2根據頭文件內關鍵字補全
imap <F2> <C-X><C-I>
set completeopt=menu,menuone " 關掉智能補全時的預覽窗口
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 not 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"]
" ================ WinManager Setting ================ "
let g:winManagerWindowLayout='FileExplorer|TagList' " 設置我們要管理的插件
let g:persistentBehaviour=0 " 如果所有編輯文件都關閉了,退出
let g:AutoOpenWinManager=1 " 自動打開
let g:winManagerWidth=32 " 設置寬度
nmap <F12> :WMToggle<CR>
" ================ Taglist Setting ================ "
let Tlist_Show_One_File=0 " 讓taglist可以同時展示多個文件的函數列表
let Tlist_Exit_OnlyWindow=1 " 當taglist是最後一個分割窗口時,自動退出
let Tlist_Process_File_Always=1 " 實時更新tags
let Tlist_File_Fold_Auto_Close=1 " 非當前文件,函數列表折疊隱藏
let Tlist_Use_Right_Window=1 " 讓窗口顯示在右邊,0代表左邊
let Tlist_Inc_Winwidth=0 "
" ================ MiniBufferExplorer Setting ================ "
let g:miniBufExplMapWindowNavVim=1 " 按下Ctrl+h/j/k/l,可以切換到當前窗口的上下左右窗口
let g:miniBufExplMapWindowNavArrows=1 " 按下Ctrl+箭頭,可以切換到當前窗口的上下左右窗口
let g:miniBufferplMapCTabSwitchBufs=1 " 啟用以下兩個功能:
" Ctrl+Tab移動到下一個buffer並在當前窗口打開;
" Ctrl+Shift+Tab移動到上一個buffer並在當前窗口打開。
let g:miniBufExplMapCTabSwitchWindows=1 " 啟用以下兩個功能:
" Ctrl+Tab移到下一個窗口;
" Ctrl+Shift+Tab移到上一個窗口
let g:miniBufExplModSelTarget=1 " 不再不可編輯內容的窗口中打開選中的buffer
" ================ Fold Setting ================ "
set foldmethod=syntax " 用語法高亮來定義折疊
set foldlevel=100 " 啟動vim時不要自動折疊代碼
set foldcolumn=5 " 設置折疊欄寬度
" ================ QuickFix Setting ================ "
map <F6> :make clean<CR><CR><CR> " 執行make clean
map <F7> :make<CR><CR><CR> :copen<CR><CR> " 執行make編譯程序,並打開quickfix窗口,顯示編譯信息
map <F8> :cp<CR> " 光標移動到上一個錯誤所在行
map <F9> :cn<CR> " 光標移動到下一個錯誤所在行
imap <F6> <ESC>:make clean<CR><CR><CR>
imap <F7> <ESC>:make<CR><CR><CR> :copen<CR><CR>
imap <F8> <ESC>:cp<CR>
imap <F9> <ESC>:cn<CR>
" ================ Cscope setting ================ "
if has("cscope")
set csprg=/usr/bin/cscope " 指定用來執行cscope的命令
set csto=0 " 設置cstag命令查找次序:0先找cscope數據庫再找標簽文件;1先找標簽文件再找cscope數據庫
set cst " 同時搜索cscope數據庫和標簽文件
set cscopequickfix=s-,c-,d-,i-,t-,e- " 使用QuickFix窗口來顯示cscope查找結果
set nocsverb
if filereadable("cscope.out") " 若當前目錄下存在cscope數據庫,添加該數據庫到vim
cs add cscope.out
elseif $CSCOPE_DB != "" " 否則只要環境變量CSCOPE_DB不為空,則添加其指定的數據庫到vim
cs add $CSCOPE_DB
endif
set csverb
endif
map <F5> :cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
imap <F5> <ESC>:cs add ./cscope.out .<CR><CR><CR> :cs reset<CR>
" 將:cs find c等Cscope查找命令映射為<C-_>c等快捷鍵(按法是先按Ctrl+Shift+-,然後很快再按下c)
nmap <C-_>s :cs find s <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>g :cs find g <C-R>=expand("<cword>")<CR><CR>
nmap <C-_>d :cs find d <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>c :cs find c <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>t :cs find t <C-R>=expand("<cword>")<CR><CR> :copen<CR><CR>
nmap <C-_>e :cs find e <C-R>=expand("<cword>")<CR><CR> :copen<CR><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> :copen<CR><CR>