安裝若干 VIM 外掛程式(不斷更新)

來源:互聯網
上載者:User

先安裝外掛程式管理工具 pathogen
建立目錄 ~/.vim/bundle/pathogen/autoload/

下載 pathogen.vim(https://github.com/tpope/vim-pathogen )至 ~/.vim/bundle/pathogen/autoload/

在 .vimrc 中加入下面兩行

runtime bundle/pathogen/autoload/pathogen.vim
execute pathogen#infect()

其他外掛程式下載解壓後, 都拷貝到 ~/.vim/bundle/ 目錄下即可


書籤外掛程式

https://github.com/huxiao/vim-bookmark

https://github.com/MattesGroeger/vim-bookmarks ( 這個外掛程式要配合 ctrlp 才好用 )


nmap <F2> mn

imap <F2> <ESC>mn

 let g:bookmark_sign = '●'

let g:bookmark_disable_ctrlp = 1


外掛程式的基本用法:

mm 用於設定或者刪除一個書籤,或者使用命令 VbookmarkToggle
mn 用於跳轉到下一個書籤,或者使用命令 VbookmarkNext
mp 用於跳轉到前一個書籤,或者使用命令 VbookmarkPrevious

ma 用於顯示所有書籤

mc 刪除一個書籤

mx 刪除所有書籤


let g:vbookmark_bookmarkSaveFile = $HOME . '/.vimbookmark'

" 設定跳轉書籤的快速鍵

nmap <F2> mn

imap <F2> <ESC>:w<CR>mn



C++ STL 文法高亮外掛程式

https://github.com/octol/vim-cpp-enhanced-highlight



C++源檔案和標頭檔之間切換
https://github.com/derekwyatt/vim-fswitch

nmap <silent> <Leader>sw :FSHere<cr>

這樣,鍵入 ;sw 就能在實現 cpp 檔案和 h檔案間切換


另外一個是

https://github.com/vim-scripts/a.vim

:A switches to the header file corresponding to the current file being edited (or vise versa):AS splits and switches:AV vertical splits and switches:AT new tab and switches:AN cycles through matches:IH switches to file under cursor:IHS splits and switches:IHV vertical splits and switches:IHT new tab and switches:IHN cycles through matches<Leader>ih switches to file under cursor<Leader>is switches to the alternate file of file under cursor (e.g. on  <foo.h> switches to foo.cpp)<Leader>ihn cycles through matches

nnoremap <leader>av :AV<CR>

nnoremap <leader>as :AS<CR>


快速開關注釋
https://github.com/scrooloose/nerdcommenter

常用操作:

<leader>cc,注釋當前選中文本,如果選中的是整行則在每行首添加 //,如果選中一行的部分內容則在選中部分前後添加分別 /、/;

<leader>cu,取消選中文字區塊的注釋。

也可以都調用 <leader>c<SPACE> ,它會根據是否有注釋而選擇來注釋還是取消注釋。
括弧引號自動補全

https://github.com/Raimondi/delimitMate


or


https://github.com/jiangmiao/auto-pairs


工程檔案瀏覽

https://github.com/scrooloose/nerdtree

將如下資訊加入.vimrc中:

" 使用 NERDTree 外掛程式查看工程檔案。設定快速鍵
nmap <F8> :NERDTreeToggle<CR>
" 設定NERDTree子視窗寬度let NERDTreeWinSize=32" 設定NERDTree子視窗位置let NERDTreeWinPos="right"" 顯示隱藏檔案let NERDTreeShowHidden=1" NERDTree 子視窗中不顯示冗餘協助資訊let NERDTreeMinimalUI=1" 刪除檔案時自動刪除檔案對應 bufferlet NERDTreeAutoDeleteBuffer=1
常用操作:斷行符號,開啟選中檔案;r,重新整理工程目錄檔案清單;I(大寫),顯示/隱藏隱藏檔案;m,出現建立/刪除/剪下/拷貝巨集指令清單。鍵入 <leader>fl 後,右邊子視窗為工程專案檔列表


ctags

從 http://ctags.sourceforge.net/ 下載原始碼包後,解壓縮產生原始碼目錄,然後進入原始碼根目錄執行./configure,然後執行make,編譯成功後執行make install

在 .vimrc 中加入以下設定

nmap<leader>R :!ctags -R<CR>

這樣, 在 VIM 中按 <leader> + r 就可以產生目前的目錄的 tags 檔案了



根據標頭檔中的函式宣告,自動產生 CPP 檔案中的空白函數體

ProtoDef (http://www.vim.org/scripts/script.php?script_id=2624 )

ProtoDef 需要依賴 perl , ctags 和 FSwitch(http://www.vim.org/scripts/script.php?script_id=2590 )

安裝好 ProtoDef 後, 在 .vimrc 中加入以下配置

" 設定 pullproto.pl 指令碼路徑let g:protodefprotogetter='~/.vim/bundle/protodef/pullproto.pl'" 成員函數的實現順序與聲明順序一致let g:disable_protodef_sorting=1

使用的時候, 先在源碼目錄使用 ctags -R 命令產生 tags 檔案; 然後在 .h 檔案中聲明類函數, 切換到同名 .cpp 檔案中後, 鍵入 <leader>PP 即可補全函數空白體


內容尋找

https://github.com/dyng/ctrlsf.vim


需要事先安裝 ack
sudo apt-get install ack-grep

安裝 ag

sudo apt-get install silversearcher-ag

https://github.com/rking/ag.vim


在 .vimrc 中加入以下配置

" 使用 ctrlsf.vim 外掛程式在工程內全域尋找游標所在關鍵字,設定快速鍵。快速鍵速記法:search in projectnnoremap <leader>sp :CtrlSF<CR>
noremap <leader>? :CtrlSF -R
nmap <F4> :CtrlSFToggle<CR>
 
noremap <leader>/ :silent execute("CtrlSF -R '\\b" . expand("<cword>") . "\\b'")<CR>
let g:ctrlsf_ackprg = 'ag' "設定 ctrlsf 使用 ag
" ag 快速鍵
noremap <leader>f :silent execute("Ag " . expand("<cword>"))<CR>


文法檢測

https://github.com/scrooloose/syntastic

 在 .vimrc 中加入以下配置

let g:syntastic_error_symbol = '✗'
let g:syntastic_warning_symbol = ''
" 是否在開啟檔案時檢查
let g:syntastic_check_on_open=0
" 是否在儲存檔案後檢查
let g:syntastic_check_on_wq=1


內容替換


將完整配置資訊添加進 .vimrc 中:

" 替換函數。參數說明:" confirm:是否替換前逐一確認" wholeword:是否整詞匹配" replace:被替換字串function! Replace(confirm, wholeword, replace)    wa    let flag = ''    if a:confirm        let flag .= 'gec'    else        let flag .= 'ge'    endif    let search = ''    if a:wholeword        let search .= '\<' . escape(expand('<cword>'), '/\.*$^~[') . '\>'    else        let search .= expand('<cword>')    endif    let replace = escape(a:replace, '/\&~')    execute 'argdo %s/' . search . '/' . replace . '/' . flag . '| update'endfunction" 不確認、非整詞"nnoremap <Leader>R :call Replace(0, 0, input('Replace '.expand('<cword>').' with: '))<CR>" 不確認、整詞nnoremap <Leader>rw :call Replace(0, 1, input('Replace '.expand('<cword>').' with: '))<CR>" 確認、非整詞"nnoremap <Leader>rc :call Replace(1, 0, input('Replace '.expand('<cword>').' with: '))<CR>" 確認、整詞"nnoremap <Leader>rcw :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>"nnoremap <Leader>rwc :call Replace(1, 1, input('Replace '.expand('<cword>').' with: '))<CR>




檔案尋找

https://github.com/Yggdroot/LeaderF

修改外掛程式源碼,更改快速鍵為符合個人操作修改


leaderf/python/leaderf/cli.py 中
注釋下面4行代碼
elif equal(cmd, '<C-V>') or equal(cmd, '<S-Insert>'): 
self._paste() 
self._buildPattern() 
yield '<Update>' 

在下面這行代碼
elif equal(cmd, '<C-C>'):
    yield '<Quit>'
後面加入下面兩行代碼
elif equal(cmd, '<C-P>'): 
    yield '<Quit>' 

leaderf/python/leaderf/manager.py 中
修改 elif equal(cmd, '<C-]>'): 為 elif equal(cmd, '<C-V>'):

在 .vimrc 中加入下面配置

let g:Lf_ShortcutF = '<C-P>' 

let g:Lf_CommandMap = {'<C-C>': ['<Esc>', '<C-C>']}

nmap <leader>m :LeaderfMru<CR>

imap <c-p> <ESC>:LeaderfFile<CR> 


查看函數,結構體,變數列表

https://github.com/majutsushi/tagbar


 " 設定標籤子視窗的寬度 
let tagbar_width=32 
" tagbar 子視窗中不顯示冗餘協助資訊 
let g:tagbar_compact=1


// GO 語言配置

let g:tagbar_type_go = {

    \ 'ctagstype' : 'go',
    \ 'kinds'     : [
        \ 'p:package',
        \ 'i:imports:1',
        \ 'c:constants',
        \ 'v:variables',
        \ 't:types',
        \ 'n:interfaces',
        \ 'w:fields',
        \ 'e:embedded',
        \ 'm:methods',
        \ 'r:constructor',
        \ 'f:functions'
    \ ],
    \ 'sro' : '.',
    \ 'kind2scope' : {
        \ 't' : 'ctype',
        \ 'n' : 'ntype'
    \ },
    \ 'scope2kind' : {
        \ 'ctype' : 't',
        \ 'ntype' : 'n'
    \ },
    \ 'ctagsbin'  : 'gotags',
    \ 'ctagsargs' : '-sort -silent'
\ }


// c++ 語言配置
" 設定 ctags 對哪些代碼元素產生標籤
let g:tagbar_type_cpp = {     \ 'kinds' : [
        \ 'd:macros:1',
        \ 'g:enums',
        \ 't:typedefs:0:0',
        \ 'e:enumerators:0:0',
        \ 'n:namespaces',
        \ 'c:classes',
        \ 's:structs',
        \ 'u:unions',
        \ 'f:functions',
        \ 'm:members:0:0',
        \ 'v:global:0:0',
        \ 'x:external:0:0',
        \ 'l:local:0:0'
    \ ],
    \ 'sro' : '::',
    \ 'kind2scope' : {
       \ 'g' : 'enum',
       \ 'n' : 'namespace',
       \ 'c' : 'class',
       \ 's' : 'struct',
       \ 'u' : 'union'
 \ },
 \ 'scope2kind' : {
        \ 'enum'   : 'g',
        \ 'namespace' : 'n',
        \ 'class'  : 'c',
        \ 'struct' : 's',
        \ 'union'  : 'u'
     \ }
\ } 


nmap <F3> :TagbarToggle<CR>


工作清單 
https://github.com/vim-scripts/TaskList.vim

這是一個非常有用的外掛程式,它能夠標記檔案中的 FIXME 、 TODO 等資訊,並將它們存放到一個工作清單當中,後面隨時可以通過Tasklist跳轉到這些標記的地方再來修改這些代碼,是一個十分方便實用的Todo list工具。

--help: 通常只需添加一個映射: map <leader>td <Plug>TaskList
多游標輸入 
https://github.com/terryma/vim-multiple-cursors

在普通模式下,按下 Ctrl - n 開始進入可視模式並選中游標下的單詞,繼續按 Ctrl - n 選擇下一個相同的單詞,按下 Ctrl - p 往回選一個, Ctrl - x 則跳過下一個相同單詞. 按下 c 進行修改,  按下 <Esc> 退出



狀態列美化

https://github.com/itchyny/lightline.vim


或者 vim-airline

參見

http://blog.csdn.net/the_victory/article/details/50638810


"--------------------------------------------------------------------------
"vim-airline
"--------------------------------------------------------------------------
Plugin 'vim-airline'    
let g:airline_theme="molokai" 


"這個是安裝字型後 必須設定此項" 
let g:airline_powerline_fonts = 1   


 " 關閉狀態顯示空白符號計數
let g:airline#extensions#whitespace#enabled = 0
let g:airline#extensions#whitespace#symbol = '!'
 if !exists('g:airline_symbols')
   let g:airline_symbols = {}
 endif

" 在 airline 的狀態列上顯示檔案的絕對路徑
let g:airline_section_c = "%{expand('%:p')}"


vim中整合shell

conque " 對中文的支援有問題

http://www.vim.org/scripts/script.php?script_id=2771

用法說明  https://code.google.com/archive/p/conque/wikis/Usage.wiki#3.1.8_Hide_start_messages

nmap <leader>sh :ConqueTermVSplit bash<CR>

let g:ConqueTerm_PyVersion = 2 " 原生 python 是 2.7,所以這裡設定成 2

let g:ConqueTerm_StartMessages = 0 "去掉煩人的警告


代碼自動格式化

https://github.com/sbdchd/neoformat

需要安裝 astyle,  http://astyle.sourceforge.net/

astyle 的參數配置參見 

http://blog.csdn.net/janepen/article/details/7022180

 http://blog.chinaunix.net/uid-20662363-id-1904145.html 


在 neoformat/auto/load/neoformat/formatters 中, 分別編輯 cpp.vim 和 c.vim 如下

cpp.vim
function! neoformat#formatters#cpp#enabled() abort
   return ['astyle']
endfunction


function! neoformat#formatters#cpp#astyle() abort
    return {
           \ 'exe': 'astyle',
           \ 'args': ['--style=allman', '-p', '-D', '--pad-header'],
           \ 'stdin': 1,
           \ }
endfunction


c.vim
function! neoformat#formatters#c#enabled() abort
   return ['astyle']
endfunction


function! neoformat#formatters#c#astyle() abort
    return {
            \ 'exe': 'astyle',
            \ 'args': ['--mode=c','--style=allman', '-p', '-D', '--pad-header'],
            \ 'stdin': 1,
            \ }
endfunction


.vimrc 中寫入如下配置

augroup fmt  autocmd!  autocmd BufWritePre * undojoin | Neoformataugroup END



自動儲存

https://github.com/vim-scripts/vim-auto-save" ====================================================== vim-auto-save let g:auto_save = 1 " 設定updatetime  值不可變,為預設的 200  "let g:auto_save_no_updatetime = 1 "let g:updatetime = 50 " 插入模式下不進行自動儲存 let g:auto_save_in_insert_mode = 0 " 儲存時不在狀態列提示儲存時間 "let g:auto_save_silent = 1  


平滑滾動

https://github.com/yuttie/comfortable-motion.vim
快速編輯成對的括弧
https://github.com/tpope/vim-surround 在正常模式下, ds( 或者 ds) 刪除一對圓括弧, ds" 刪除一對雙引號, ds' 刪除一對單引號, ds[(或者ds]) 刪除一對中括弧, ds{ ( 或者 ds} ) 刪除一對大括弧 cs"( 是把一對 " 替換成 (

快速選擇
https://github.com/terryma/vim-expand-region " ====================================================== vim-expand-region vmap v <Plug>(expand_region_expand) vmap <C-v> <Plug>(expand_region_shrink)

匹配括弧
https://github.com/vim-scripts/matchit.zip


c++語法檢查
https://github.com/w0rp/ale
需要安裝 cppcheck : sudo apt install cppcheck 參考   http://blog.csdn.net/demorngel/article/details/69052789 " ====================================================== ale
let g:ale_set_loclist = 0
let g:ale_open_list = 1
let g:ale_keep_list_window_open = 1
"自訂error和warning表徵圖
let g:ale_sign_error = '✗'
let g:ale_sign_warning = ''
"在vim內建的狀態列中整合ale
let g:ale_statusline_format = ['✗ %d', ' %d', ' OK']
"顯示Linter名稱,出錯或警告等相關資訊
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"普通模式下,sp前往上一個錯誤或警告,sn前往下一個錯誤或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>d查看錯誤或警告的詳細資料
nmap <Leader>d :ALEDetail<CR>
"設定狀態列顯示的內容
"set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")}\ %{ALEGetStatusLine()}
"檔案內容發生變化時不進行檢查
"let g:ale_lint_on_text_changed = 'never'
"開啟檔案時不進行檢查
"let g:ale_lint_on_enter = 0
"對C/C++使用Clang進行語法檢查
"let g:ale_linters = {'c': 'clang'}
"let g:ale_c_clang_options = '-std=c11 -Wall'
"let g:ale_linters = {'c++': 'clang++'}
let g:ale_cpp_clangcheck_options = '-std=c++11 -Wall'
let g:ale_cpp_gcc_options = '-std=c++11 -Wall'
"關閉 golang 的文法檢測
"let g:ale_linters = {'go': ['gofmt']}
let g:ale_linters = {
            \ 'c': ['clang'], 
            \ 'c++': ['clang++'],
            \ 'go': ['go build', 'gofmt', 'go vet']
            \}
" 開啟 golang 文法檢測
"let g:ale_linters = {'go': ['gometalinter', 'gofmt']}
vim-go
" ====================================================== vim-go 配置

let g:go_disable_autoinstall = 0 "禁止自動下載
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_fields = 1
let g:go_highlight_types = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
let g:go_auto_type_info = 1
let g:go_fmt_command = "goimports"
let g:go_metalinter_autosave = 0
au FileType go nmap <F12> <Plug>(go-def)
au FileType go nmap <F5> <Plug>(go-run)
au FileType go nmap <leader>b <Plug>(go-build)
au FileType go nmap <leader>e <Plug>(go-rename)
au FileType go nmap <Leader>gd <Plug>(go-doc)
au FileType go nmap <Leader>s <Plug>(go-implements)
au FileType go nmap <Leader>r <Plug>(go-referrers)
"au FileType go nmap <Leader>t <Plug>(go-vet)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.