【vim】極簡完美配置b-vim(三)vimc.bundles 文件說明

目錄


使用 vim 時,配以適應的插件來增強vim,可以極大的提高工作效率。在本配置中,由于本人工作環境的需要,所以有兩種插件配置的文件,今天先說一下可用于服務器的插件配置,此配置中的插件都是下載后就可以直接使用,不需要編譯安裝任何東西。因此是比較方便的。但如果是在自己的電腦上,方便編譯的話,還是建議使用另一個插件配置文件:vimrc.bundles_complex 。

此文件包含了所有插件相關的配置,不牽涉vim基本屬性的配置。因此,如果不想用此插件,可以直接刪除$HOME目錄下的 .vimrc.bundles 鏈接文件即可。

下面簡單介紹一下 vimrc.bundles 文件配置:

插件管理插件: Vundle


下面的配置在文件頭,配置使用的管理插件是 vundle ,因此需要先配置好這個:

set nocompatible               " be iMproved                                                                                                 
filetype off                         " required! turn off                                                                                                            
set rtp+=~/.vim/bundle/vundle/                                                                                                               
call vundle#rc() 

由于使用的是 vundle 進行管理插件,至于這個是什么,百度會告訴你很多!這里就不多說了。其常用到的操作:

" ################### Bundles 配置 #########################                                                                                 
" 使用Vundle來管理插件                                                                                                                       
" vim plugin bundle control, command model                                                                                                   
"     :BundleInstall     install 安裝配置的插件                                                                                              
"     :BundleInstall!    update  更新                                                                                                        
"     :BundleClean       remove plugin not in list 刪除本地無用插件                                                                          

接下來是安裝:

" ##### 插件管理工具                                                                                                                         
Bundle 'gmarik/vundle' 

使用 vundle 的一個極其方便的功能是,只要把自己想要使用的插件用類似上面的方式放到 .vimrc.bundles 文件里就,再在 vim 中使用 :BundleInstall 即可以下載到目錄 ~/.vim/bundle 目錄,再次打開 vim 便可以使用插件了。

" ==========================================                                                                                                 
"  bundle 插件管理和配置項                                                                                                                   
" -----------------#github                                                                                                                   
"   插件來自 github,只需要 : 作者名/項目名                                                                                                 
"  Bundle 'tomasr/molokai'                                                                                                                   
"   插件來自 vim-scripts,直接寫插件名就行了                                                                                                 
"  Bundle 'L9'                                                                                                                               
"   如使用自己的git庫的插件,像下面這樣做                                                                                                    
"  Bundle 'git://git.wincent.com/command-t.git'                                                                                              
" ---------------#git庫在本地機器的情況                                                                                                      
"   如使用自己的git庫在本地機器,像下面這樣做                                                                                                
"  Bundle 'file:///Users/gmarik/path/to/plugin'                                                                                              
==========================================

好,下面介紹此文件中使用的插件,都是在使用過程中根據需要 vim 的加載速度和實際需要精簡后剩下的。(注:插件并不是越多越好,多了會影響 vim 啟動速度?。?/p>

主題插件:molokai 和 solarized

比較喜歡 molokai 的效果:

" ###### 主題 molokai 和 Solarized                                                                                                           
Bundle 'tomasr/molokai'                                                                                                                      
let g:molokai_original = 1                                                                                                                   
Bundle 'altercation/vim-colors-solarized'                                                                                                    
let g:solarized_termcolors=256                                                                                                               
let g:solarized_termtrans=1                                                                                                                  
let g:solarized_contrast="normal"                                                                                                            
let g:solarized_visibility="normal"                                                                                                          
" 主題使用                                                                                                                                   
set background=dark                                                                                                                          
"set background=light                                                                                                                        
set t_Co=256                                                                                                                                 
colorscheme molokai                                                                                                                          
" colorscheme solarized  

中文vim幫助、自動切換工作目錄、縮進標示

" ###### 中文 vim 幫助                                                                                                                      
Bundle 'asins/vimcdoc' 
" ##### 自動根據當前打開文件切換工作目錄                                                                                                     
Bundle 'airblade/vim-rooter'                                                                                                                 
let g:rooter_disable_map = 1 

" ##### 縮進標識                                                                                                                             
Bundle 'nathanaelkane/vim-indent-guides'                                                                                                     
        " 隨 vim 自啟動                                                                                                                      
let g:indent_guides_enable_on_vim_startup=0                                                                                                  
        " 從第二層開始可視化顯示縮進                                                                                                         
let g:indent_guides_start_level=1                                                                                                            
        " 色塊寬度                                                                                                                           
let g:indent_guides_guide_size=1                                                                                                             
        " 快捷鍵 i 開/關縮進可視化                                                                                                           
:nmap <silent> <Leader>i <Plug>IndentGuidesToggle     

多語言語法檢測插件:syntastic

這個插件可以對代碼中出現的錯誤進行檢測,是個極其有利的插件:

" ###### 多語言語法檢查                                                                                                                      
Bundle 'scrooloose/syntastic'                                                                                                    
set statusline+=%#warningmsg#                                                                                                                
set statusline+=%{SyntasticStatuslineFlag()}                                                                                                 
set statusline+=%*           
    " 檢測到錯誤和警告時的標志                                                                                                                
let g:syntastic_error_symbol='??'                                                                                                            
let g:syntastic_warning_symbol='??'                                                                                                          
let g:syntastic_check_on_open=1                                                                                                              
let g:syntastic_check_on_wq=0                                                                                                                
let g:syntastic_enable_highlighting=1                                                                                                        
    " 使用pyflakes,速度比pylint快
    " 需要安裝 pep8 或者 pyflakes,使用pip安裝  ,pep8是python的格式檢測神器,建議安裝。                                                                                       
let g:syntastic_python_checkers=['pep8', 'pyflakes']                                                                                         
let g:syntastic_python_pep8_args='--ignore=E501,E225'                                                                                        
    " 修改高亮的背景色, 適應主題                                                                                                             
highlight SyntasticErrorSign guifg=white guibg=black                                                                                         
" to see error location list                                                                                                                 
let g:syntastic_always_populate_loc_list = 0                                                                                                 
let g:syntastic_auto_loc_list = 0                                                                                                            
let g:syntastic_loc_list_height = 5                                                                                                          
function! ToggleErrors()                                                                                                                     
    let old_last_winnr = winnr('$')                                                                                                          
    lclose                                                                                                                                   
    if old_last_winnr == winnr('$')                                                                                                          
        " Nothing was closed, open syntastic error location panel                                                                            
        Errors                                                                                                                               
    endif                                                                                                                                    
endfunction                                                                                                                                  
nnoremap <Leader>s :call ToggleErrors()<cr>      
    " 跳轉到下一個/上一個錯誤處                                                                                            
nnoremap <Leader>sn :lnext<cr>                                                                                                               
nnoremap <Leader>sp :lprevious<cr>
    " 關閉 某一語言的(如C/C++) 的語法檢測                                                                        
" let g:syntastic_ignore_files=[".*\.c$", ".*\.h$", ".*\.cpp", ".*\.hpp"]  

C、C++、Python的一些好用插件

  • 自動補全: AutoComplPop
  • C/C++ 代碼補全 : OmniCppComplete
  • Python 代碼補全: Pydiction
  • Python 快捷操作: python.vim
  • 自動補全單引號,雙引號等: delimitMate
  • 快速注釋: nerdcommenter
  • 快速去行尾空格: trailing-whitespace
  • 更高效的移動: easymotion
  • 快速的匹配: matchit.zip
  • python fly check : pyflakes-vim
  • pythgon的語法高亮: python-syntax
  • STL\C++14等的C++語法高亮 : STL-Syntax
  • *.cpp 和 *.h 間切換: a.vim
" #### 自動補全                                                                                                                              
Bundle 'vim-scripts/AutoComplPop'

" #### 主要用于 C/C++ 代碼補全,需要 ctag 支持                                                                                               
Bundle 'vim-scripts/OmniCppComplete'                                                                                                         

" ##### Python 代碼補全                                                                                                                      
Bundle 'vim-scripts/Pydiction'                                                                                                               
let g:pydiction_location = '~/.vim/bundle/Pydiction/complete-dict'  

" ##### Python 快捷操作                                                                                                                      
Bundle 'yssource/python.vim'  

" ###### 自動補全單引號,雙引號等                                                                                                            
Bundle 'Raimondi/delimitMate'                                                                                                                
   " for python docstring ,優化輸入                                                                                                         
au FileType python let b:delimitMate_nesting_quotes = ['"']  

" ###### 快速注釋                                                                                                                            
Bundle 'scrooloose/nerdcommenter'                                                                                                            
" <leader>cc 注釋選中內容                                                                                                                    
" <leader>cu 取消選中注釋                                                                                                                    
" <leader>c$ 從當前光標開始到行尾注釋掉                                                                                                      
let g:NERDSpaceDelims=1  

" ##### 快速去行尾空格                                                                                                                       
Bundle 'bronson/vim-trailing-whitespace'                                                                                                     
" 下列文件類型中的行尾空格tab不高亮顯示                                                                                                      
let g:extra_whitespace_ignored_filetypes = ['unite', 'mkd', 'h', 'hpp', 'c', 'cpp', 'py']                                                    
map <leader>, :FixWhitespace<cr> 

" ##### 更高效的移動 [,, + w/fx]                                                                                                             
Bundle 'Lokaltog/vim-easymotion'                                                                                                             
let g:EasyMotion_smartcase = 1                                                                                                               
"let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion                                                                         
map <Leader><leader>h <Plug>(easymotion-linebackward)                                                                                        
map <Leader><Leader>j <Plug>(easymotion-j)                                                                                                   
map <Leader><Leader>k <Plug>(easymotion-k)                                                                                                   
map <Leader><leader>l <Plug>(easymotion-lineforward)                                                                                         
        " 重復上一次操作, 類似repeat插件, 很強大                                                                                             
map <Leader><leader>. <Plug>(easymotion-repeat) 

" ##### 快速的匹配 https://github.com/vim-scripts/matchit.zip                                                                                
Bundle 'vim-scripts/matchit.zip' 

" ##### python fly check, 彌補syntastic只能打開和保存才檢查語法的不足                                                                        
Bundle 'kevinw/pyflakes-vim'                                                                                                                 
let g:pyflakes_use_quickfix = 0                                                                                                              
                                                                                                                                             
                                                                                                                                             
" ##### pythgon的語法高亮 for python.vim syntax highlight                                                                                    
Bundle 'hdima/python-syntax'                                                                                                                 
let python_highlight_all = 1 

" ##### 增加對 STL\C++14等的C++語法高亮                                                                                                      
Bundle 'Mizuchi/STL-Syntax'                                                                                                                  
                                                                                                                                             
                                                                                                                                             
" ##### *.cpp 和 *.h 間切換                                                                                                                  
Bundle 'vim-scripts/a.vim'                                                                                                                   
nmap <Leader>ch :A<CR>                                                                                                                       
    " 子窗口中顯示 *.cpp 或 *.h                                                                                                              
nmap <Leader>sch :AS<CR>                                                                                                                     
map <F4> :A<CR>                                                                                                                              
map <leader><F4> :AS<CR>  

在代碼中做標記: signature

" 書簽設定。mx,設定/取消當前行名為 x 的標簽;m,,自動設定下一個可用書簽名,                                                                 
"   前面提說,獨立書簽名是不能重復的,在你已經有了多個獨立書簽,                                                                             
"   當想再設置書簽時,需要記住已經設定的所有書簽名,否則很可能會將已有的書簽沖掉,這可不好,                                                 
"   所以,vim-signature 為你提供了 m, 快捷鍵,                                                                                               
"   自動幫你選定下一個可用獨立書簽名;mda,刪除當前文件中所有獨立書簽。                                                                      
" 書簽羅列。ms,羅列出當前文件中所有書簽,選中后回車可直接跳轉;                                                                             
" 書簽跳轉。mn,按行號前后順序,跳轉至下個獨立書簽;                                                                                         
"   mp,按行號前后順序,跳轉至前個獨立書簽。                                                                                                 
"   書簽跳轉方式很多,除了這里說的行號前后順序,                                                                                             
"   還可以基于書簽名字母順序跳轉、分類書簽同類跳轉、分類書簽不同類間跳轉等等。                                                               
let g:SignatureMap = {                                                                                                                       
        \ 'Leader'             :  "m",                                                                                                       
        \ 'PlaceNextMark'      :  "m,",                                                                                                      
        \ 'ToggleMarkAtLine'   :  "m.",                                                                                                      
        \ 'PurgeMarksAtLine'   :  "m-",                                                                                                      
        \ 'DeleteMark'         :  "dm",                                                                                                      
        \ 'PurgeMarks'         :  "mda",                                                                                                     
        \ 'PurgeMarkers'       :  "m<BS>",                                                                                                   
        \ 'GotoNextLineAlpha'  :  "']",                                                                                                      
        \ 'GotoPrevLineAlpha'  :  "'[",                                                                                                      
        \ 'GotoNextSpotAlpha'  :  "`]",                                                                                                      
        \ 'GotoPrevSpotAlpha'  :  "`[",                                                                                                      
        \ 'GotoNextLineByPos'  :  "]'",                                                                                                      
        \ 'GotoPrevLineByPos'  :  "['",                                                                                                      
        \ 'GotoNextSpotByPos'  :  "mn",                                                                                                      
        \ 'GotoPrevSpotByPos'  :  "mp",                                                                                                      
        \ 'GotoNextMarker'     :  "[+",         
        \ 'GotoPrevMarker'     :  "[-",                                                                                                      
        \ 'GotoNextMarkerAny'  :  "]=",                                                                                                      
        \ 'GotoPrevMarkerAny'  :  "[=",                                                                                                      
        \ 'ListLocalMarks'     :  "ms",                                                                                                      
        \ 'ListLocalMarkers'   :  "m?"                                                                                                       
        \ }"]]]']"}                    

選中區塊和多光標選中編輯

" ##### 選中區塊                                                                                                                             
Bundle 'terryma/vim-expand-region'                                                                                                           
vmap v <Plug>(expand_region_expand)                                                                                                          
vmap V <Plug>(expand_region_shrink)                                                                                                          
                                                                                                                                             
                                                                                                                                             
" ##### 多光標選中編輯                                                                                                                       
Bundle 'terryma/vim-multiple-cursors'                                                                                                        
let g:multi_cursor_use_default_mapping=0                                                                                                     
" Default mapping                                                                                                                            
let g:multi_cursor_next_key='<C-m>'                                                                                                          
let g:multi_cursor_prev_key='<C-p>'                                                                                                          
let g:multi_cursor_skip_key='<C-x>'                                                                                                          
let g:multi_cursor_quit_key='<Esc>'

目錄導航

" ##### 目錄導航                                                                                                                             
Bundle 'scrooloose/nerdtree'                                                                                                                 
map <leader>n :NERDTreeToggle<CR>                                                                                                            
let NERDTreeHighlightCursorline=1                                                                                                            
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ]                               
"close vim if the only window left open is a NERDTree                                                                                        
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end                                 
" s/v 分屏打開文件                                                                                                                           
let g:NERDTreeMapOpenSplit = 's'                                                                                                             
let g:NERDTreeMapOpenVSplit = 'v'                                                                                                            
                                                                                                                                             
                                                                                                                                             
" ##### 目錄導航                                                                                                                             
Bundle 'jistr/vim-nerdtree-tabs'                                                                                                             
""""""                                                                                                                                       
map <Leader>n <plug>NERDTreeTabsToggle<CR>                                                                                                   
    " 關閉同步                                                                                                                               
let g:nerdtree_tabs_synchronize_view=0                                                                                                       
let g:nerdtree_tabs_synchronize_focus=0                                                                                                      
    " 自動開啟nerdtree                                                                                                                       
"let g:nerdtree_tabs_open_on_console_startup=1 

標簽導航: tagbar

這里給出一部分配置文件。

" 標簽導航                                                                                                                                   
Bundle 'majutsushi/tagbar'                                                                                                                   
nmap <F9> :TagbarToggle<CR>                                                                                                                  
nmap <leader>m :TagbarToggle<CR>                                                                                                             
let g:tagbar_autofocus = 1                                                                                                                   
let g:tagbar_sort = 0                                                                                                                        
let g:tagbar_show_linenumbers = 2                                                                                                            
" cpp類型                                                                                                                                    
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'                                                                                                                 
     \ }                                                                                                                                     
\ }                          

vim狀態欄美化:powerline

" ##### vim-powerline                                                                                                                        
Bundle 'Lokaltog/vim-powerline'                                                                                                              
" Bundle ' bling/vim-airline'                                                                                                                
" Always show the status line - use 2 lines for the status bar                                                                               
set laststatus=2 

結語

在這里,并沒有列出全部的,還有一些不太重要的并沒有列出來,具體的可以查看文件vimrc.bundles。都有注釋。

下面也附上文件的全部內容:

" ==========================================
"  bundle 插件管理和配置項
" -----------------#github
"   插件來自 github,只需要 : 作者名/項目名
"  Bundle 'tomasr/molokai'
"   插件來自 vim-scripts,直接寫插件名就行了
"  Bundle 'L9'
"   如使用自己的git庫的插件,像下面這樣做
"  Bundle 'git://git.wincent.com/command-t.git'
" ---------------#git庫在本地機器的情況
"   如使用自己的git庫在本地機器,像下面這樣做
"  Bundle 'file:///Users/gmarik/path/to/plugin'
"
" ==========================================
set nocompatible               " be iMproved
filetype off " required! turn off
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()

" ################### Bundles 配置 #########################
" 使用Vundle來管理插件
" vim plugin bundle control, command model
"     :BundleInstall     install 安裝配置的插件
"     :BundleInstall!    update  更新
"     :BundleClean       remove plugin not in list 刪除本地無用插件

" ##### 插件管理工具
Bundle 'gmarik/vundle'

" ###### 主題 molokai 和 Solarized
Bundle 'tomasr/molokai'
let g:molokai_original = 1
Bundle 'altercation/vim-colors-solarized'
let g:solarized_termcolors=256
let g:solarized_termtrans=1
let g:solarized_contrast="normal"
let g:solarized_visibility="normal"
" 主題使用
set background=dark
"set background=light
set t_Co=256
colorscheme molokai
" colorscheme solarized

" ###### 中文 vim 幫助
Bundle 'asins/vimcdoc'


" ##### 自動根據當前打開文件切換工作目錄
Bundle 'airblade/vim-rooter'
let g:rooter_disable_map = 1

" ##### 縮進標識
Bundle 'nathanaelkane/vim-indent-guides'
        " 隨 vim 自啟動
let g:indent_guides_enable_on_vim_startup=0
        " 從第二層開始可視化顯示縮進
let g:indent_guides_start_level=1
        " 色塊寬度
let g:indent_guides_guide_size=1
        " 快捷鍵 i 開/關縮進可視化
:nmap <silent> <Leader>i <Plug>IndentGuidesToggle


" ###### 多語言語法檢查
Bundle 'scrooloose/syntastic'
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_error_symbol='??'
let g:syntastic_warning_symbol='??'
let g:syntastic_check_on_open=1
let g:syntastic_check_on_wq=0
let g:syntastic_enable_highlighting=1
    " 使用pyflakes,速度比pylint快
let g:syntastic_python_checkers=['pep8', 'pyflakes']
let g:syntastic_python_pep8_args='--ignore=E501,E225'
    " 修改高亮的背景色, 適應主題
highlight SyntasticErrorSign guifg=white guibg=black
" to see error location list
let g:syntastic_always_populate_loc_list = 0
let g:syntastic_auto_loc_list = 0
let g:syntastic_loc_list_height = 5
function! ToggleErrors()
    let old_last_winnr = winnr('$')
    lclose
    if old_last_winnr == winnr('$')
        " Nothing was closed, open syntastic error location panel
        Errors
    endif
endfunction
nnoremap <Leader>s :call ToggleErrors()<cr>
nnoremap <Leader>sn :lnext<cr>
nnoremap <Leader>sp :lprevious<cr>
        " 關閉 C 的語法檢測, 主要是用于 lpc
" let g:syntastic_ignore_files=[".*\.c$", ".*\.decl$"]

" ##### 代碼片段快速插入
Bundle 'SirVer/ultisnips'
"   Snippets are separated from the engine. Add this if you want them:
Bundle 'honza/vim-snippets'
" Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe.
let g:UltiSnipsExpandTrigger="<tab>"
let g:UltiSnipsExpandTrigger       = "<tab>"
let g:UltiSnipsJumpForwardTrigger  = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>"
let g:UltiSnipsSnippetDirectories  = ['UltiSnips']
" 定義存放代碼片段的文件夾 .vim/UltiSnips下,使用自定義和默認的,將會的到全局,有沖突的會提示
" 進入對應filetype的snippets進行編輯
let g:UltiSnipsSnippetsDir = '~/.vim/UltiSnips'
map <leader>us :UltiSnipsEdit<CR>
" ctrl+j/k 進行選擇
func! g:JInYCM()
    if pumvisible()
        return "\<C-n>"
    else
        return "\<c-j>"
    endif
endfunction
func! g:KInYCM()
    if pumvisible()
        return "\<C-p>"
    else
        return "\<c-k>"
    endif
endfunction
inoremap <c-j> <c-r>=g:JInYCM()<cr>
au BufEnter,BufRead * exec "inoremap <silent> " . g:UltiSnipsJumpBackwordTrigger . " <C-R>=g:KInYCM()<cr>"
let g:UltiSnipsJumpBackwordTrigger = "<c-k>"
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"


" #### 主要用于 C/C++ 代碼補全,需要 ctag 支持
Bundle 'vim-scripts/OmniCppComplete'


" ##### Python 代碼補全
Bundle 'vim-scripts/Pydiction'
let g:pydiction_location = '~/.vim/bundle/Pydiction/complete-dict'

" ##### Python 快捷操作
Bundle 'yssource/python.vim'

" ###### 自動補全單引號,雙引號等
Bundle 'Raimondi/delimitMate'
    " for python docstring ,優化輸入
au FileType python let b:delimitMate_nesting_quotes = ['"']


" ###### 快速注釋
Bundle 'scrooloose/nerdcommenter'
" <leader>cc 注釋選中內容
" <leader>cu 取消選中注釋
" <leader>c$ 從當前光標開始到行尾注釋掉
let g:NERDSpaceDelims=1


" ##### 快速去行尾空格
Bundle 'bronson/vim-trailing-whitespace'
" 下列文件類型中的行尾空格tab不高亮顯示
let g:extra_whitespace_ignored_filetypes = ['unite', 'mkd', 'h', 'hpp', 'c', 'cpp', 'py']
map <leader>, :FixWhitespace<cr>


" ##### 更高效的移動 [,, + w/fx]
Bundle 'Lokaltog/vim-easymotion'
let g:EasyMotion_smartcase = 1
"let g:EasyMotion_startofline = 0 " keep cursor colum when JK motion
map <Leader><leader>h <Plug>(easymotion-linebackward)
map <Leader><Leader>j <Plug>(easymotion-j)
map <Leader><Leader>k <Plug>(easymotion-k)
map <Leader><leader>l <Plug>(easymotion-lineforward)
        " 重復上一次操作, 類似repeat插件, 很強大
map <Leader><leader>. <Plug>(easymotion-repeat)


" ##### 快速的匹配 https://github.com/vim-scripts/matchit.zip
Bundle 'vim-scripts/matchit.zip'


" ##### 顯示marks - 方便自己進行標記和跳轉
" m[a-zA-Z] add mark
" '[a-zA-Z] go to mark
Bundle "kshenoy/vim-signature"
" 書簽設定。mx,設定/取消當前行名為 x 的標簽;m,,自動設定下一個可用書簽名,
"   前面提說,獨立書簽名是不能重復的,在你已經有了多個獨立書簽,
"   當想再設置書簽時,需要記住已經設定的所有書簽名,否則很可能會將已有的書簽沖掉,這可不好,
"   所以,vim-signature 為你提供了 m, 快捷鍵,
"   自動幫你選定下一個可用獨立書簽名;mda,刪除當前文件中所有獨立書簽。
" 書簽羅列。ms,羅列出當前文件中所有書簽,選中后回車可直接跳轉;
" 書簽跳轉。mn,按行號前后順序,跳轉至下個獨立書簽;
"   mp,按行號前后順序,跳轉至前個獨立書簽。
"   書簽跳轉方式很多,除了這里說的行號前后順序,
"   還可以基于書簽名字母順序跳轉、分類書簽同類跳轉、分類書簽不同類間跳轉等等。
let g:SignatureMap = {
        \ 'Leader'             :  "m",
        \ 'PlaceNextMark'      :  "m,",
        \ 'ToggleMarkAtLine'   :  "m.",
        \ 'PurgeMarksAtLine'   :  "m-",
        \ 'DeleteMark'         :  "dm",
        \ 'PurgeMarks'         :  "mda",
        \ 'PurgeMarkers'       :  "m<BS>",
        \ 'GotoNextLineAlpha'  :  "']",
        \ 'GotoPrevLineAlpha'  :  "'[",
        \ 'GotoNextSpotAlpha'  :  "`]",
        \ 'GotoPrevSpotAlpha'  :  "`[",
        \ 'GotoNextLineByPos'  :  "]'",
        \ 'GotoPrevLineByPos'  :  "['",
        \ 'GotoNextSpotByPos'  :  "mn",
        \ 'GotoPrevSpotByPos'  :  "mp",
        \ 'GotoNextMarker'     :  "[+",
        \ 'GotoPrevMarker'     :  "[-",
        \ 'GotoNextMarkerAny'  :  "]=",
        \ 'GotoPrevMarkerAny'  :  "[=",
        \ 'ListLocalMarks'     :  "ms",
        \ 'ListLocalMarkers'   :  "m?"
        \ }"]]]']"}


" ##### 選中區塊
Bundle 'terryma/vim-expand-region'
vmap v <Plug>(expand_region_expand)
vmap V <Plug>(expand_region_shrink)


" ##### 多光標選中編輯
Bundle 'terryma/vim-multiple-cursors'
let g:multi_cursor_use_default_mapping=0
" Default mapping
let g:multi_cursor_next_key='<C-m>'
let g:multi_cursor_prev_key='<C-p>'
let g:multi_cursor_skip_key='<C-x>'
let g:multi_cursor_quit_key='<Esc>'


" ##### 文件搜索 change to https://github.com/ctrlpvim/ctrlp.vim
Bundle 'ctrlpvim/ctrlp.vim'
let g:ctrlp_map = '<leader>p'
let g:ctrlp_cmd = 'CtrlP'
map <leader>f :CtrlPMRU<CR>
let g:ctrlp_custom_ignore = {
    \ 'dir':  '\v[\/]\.(git|hg|svn|rvm)$',
    \ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz|pyc)$',
    \ }
let g:ctrlp_working_path_mode=0
let g:ctrlp_match_window_bottom=1
let g:ctrlp_max_height=15
let g:ctrlp_match_window_reversed=0
let g:ctrlp_mruf_max=500
let g:ctrlp_follow_symlinks=1
" 如果安裝了ag, 使用ag
" if executable('ag')
  " " Use ag in CtrlP for listing files. Lightning fast and respects .gitignore
  " let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
  " " ag is fast enough that CtrlP doesn't need to cache
  " let g:ctrlp_use_caching = 0
" endif


" ###### ctrlp插件1 - 不用ctag進行函數快速跳轉
Bundle 'tacahiroy/ctrlp-funky'
nnoremap <Leader>fu :CtrlPFunky<Cr>
    " narrow the list down with a word under cursor
nnoremap <Leader>fU :execute 'CtrlPFunky ' . expand('<cword>')<Cr>
let g:ctrlp_funky_syntax_highlight = 1
let g:ctrlp_extensions = ['funky']


" ##### 括號顯示增強
Bundle 'kien/rainbow_parentheses.vim'
" 不加入這行, 防止黑色括號出現, 很難識別
" \ ['black',       'SeaGreen3'],
let g:rbpt_colorpairs = [
\ ['brown',       'RoyalBlue3'],
\ ['Darkblue',    'SeaGreen3'],
\ ['darkgray',    'DarkOrchid3'],
\ ['darkgreen',   'firebrick3'],
\ ['darkcyan',    'RoyalBlue3'],
\ ['darkred',     'SeaGreen3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['brown',       'firebrick3'],
\ ['gray',        'RoyalBlue3'],
\ ['darkmagenta', 'DarkOrchid3'],
\ ['Darkblue',    'firebrick3'],
\ ['darkgreen',   'RoyalBlue3'],
\ ['darkcyan',    'SeaGreen3'],
\ ['darkred',     'DarkOrchid3'],
\ ['red',         'firebrick3'],
\ ]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces


" ##### 目錄導航
Bundle 'scrooloose/nerdtree'
map <leader>n :NERDTreeToggle<CR>
let NERDTreeHighlightCursorline=1
let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ]
"close vim if the only window left open is a NERDTree
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end
" s/v 分屏打開文件
let g:NERDTreeMapOpenSplit = 's'
let g:NERDTreeMapOpenVSplit = 'v'


" ##### 目錄導航
Bundle 'jistr/vim-nerdtree-tabs'
""""""
map <Leader>n <plug>NERDTreeTabsToggle<CR>
    " 關閉同步
let g:nerdtree_tabs_synchronize_view=0
let g:nerdtree_tabs_synchronize_focus=0
    " 自動開啟nerdtree
"let g:nerdtree_tabs_open_on_console_startup=1


" 標簽導航
Bundle 'majutsushi/tagbar'
nmap <F9> :TagbarToggle<CR>
nmap <leader>m :TagbarToggle<CR>
let g:tagbar_autofocus = 1
let g:tagbar_sort = 0
let g:tagbar_show_linenumbers = 2
" cpp類型
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'
     \ }
\ }
" markdown
let g:tagbar_type_markdown = {
    \ 'ctagstype' : 'markdown',
    \ 'kinds' : [
        \ 'h:Heading_L1',
        \ 'i:Heading_L2',
        \ 'k:Heading_L3'
    \ ]
\ }
" Makefile (targets)
let g:tagbar_type_make = {
            \ 'kinds':[
                \ 'm:macros',
                \ 't:targets'
            \ ]
\}
" obj-c
let g:tagbar_type_objc = {
    \ 'ctagstype' : 'ObjectiveC',
    \ 'kinds'     : [
        \ 'i:interface',
        \ 'I:implementation',
        \ 'p:Protocol',
        \ 'm:Object_method',
        \ 'c:Class_method',
        \ 'v:Global_variable',
        \ 'F:Object field',
        \ 'f:function',
        \ 'p:property',
        \ 't:type_alias',
        \ 's:type_structure',
        \ 'e:enumeration',
        \ 'M:preprocessor_macro',
    \ ],
    \ 'sro'        : ' ',
    \ 'kind2scope' : {
        \ 'i' : 'interface',
        \ 'I' : 'implementation',
        \ 'p' : 'Protocol',
        \ 's' : 'type_structure',
        \ 'e' : 'enumeration'
    \ },
    \ 'scope2kind' : {
        \ 'interface'      : 'i',
        \ 'implementation' : 'I',
        \ 'Protocol'       : 'p',
        \ 'type_structure' : 's',
        \ 'enumeration'    : 'e'
    \ }
\ }
" R
let g:tagbar_type_r = {
    \ 'ctagstype' : 'r',
    \ 'kinds'     : [
        \ 'f:Functions',
        \ 'g:GlobalVariables',
        \ 'v:FunctionVariables',
    \ ]
\ }
" for ruby
let g:tagbar_type_ruby = {
    \ 'kinds' : [
        \ 'm:modules',
        \ 'c:classes',
        \ 'd:describes',
        \ 'C:contexts',
        \ 'f:methods',
        \ 'F:singleton methods'
    \ ]
\ }
" 去除taglist =>原因: 使用tagbar和ctrlp-funky可以直接快速跳轉函數和變量位置,taglist有些多余


" ##### python fly check, 彌補syntastic只能打開和保存才檢查語法的不足
Bundle 'kevinw/pyflakes-vim'
let g:pyflakes_use_quickfix = 0


" ##### pythgon的語法高亮 for python.vim syntax highlight
Bundle 'hdima/python-syntax'
let python_highlight_all = 1


" ##### Markdown
Bundle 'plasticboy/vim-markdown'
let g:vim_markdown_folding_disabled=1
let g:vim_markdown_math=1
let g:vim_markdown_frontmatter=1
let g:vim_markdown_no_default_key_mappings=1
" https://github.com/suan/vim-instant-markdown
" npm -g install instant-markdown-d


" ##### Markdown Preview
Bundle 'suan/vim-instant-markdown'
let g:instant_markdown_slow = 1
let g:instant_markdown_autostart = 0
map <F12> :InstantMarkdownPreview<CR>


" ##### 增加對 STL\C++14等的C++語法高亮
Bundle 'Mizuchi/STL-Syntax'


" ##### *.cpp 和 *.h 間切換
Bundle 'vim-scripts/a.vim'
nmap <Leader>ch :A<CR>
    " 子窗口中顯示 *.cpp 或 *.h
nmap <Leader>sch :AS<CR>
map <F4> :A<CR>
map <leader><F4> :AS<CR>



" ##### 周期性針對這個工程自動生成標簽文件,并通知 vim 引人該標簽文件
" Bundle 'vim-scripts/indexer.tar.gz'
" 如果出問題了則使用:
" cd ~/.vim/bundle/
" git clone git@github.com:vim-scripts/indexer.tar.gz
" indexer 使用 ctags 5.8.1
" wget http://dfrank.ru/uploaded_files/ctags/ctags-5.8.1.tar.gz
" 來自 :http://dfrank.ru/ctags581/en.html
" 依賴項
" Bundle 'DfrankUtil'
" Bundle 'vimprj'
" indexer 還有個自己的配置文件,用于設定各個工程的根目錄路徑,配置文件位于
" ~/.indexer_files,內容可以設定為:
""""""
" 設置插件 indexer 調用 ctags 的參數
" 默認 --c++-kinds=+p+l,重新設置為 --c++-kinds=+p+l+x+c+d+e+f+g+m+n+s+t+u+v
" 默認 --fields=+iaS 不滿足 YCM 要求,需改為 --fields=+iaSl
" let g:indexer_ctagsCommandLineOptions="--c++-kinds=+p+l+x+c+d+e+f+g+m+n+s+t+u+v --fields=+iaSl --extra=+q"
" --------------- ~/.indexer_files ---------------
"  [foo]
"  /data/workplace/foo/src/
"  [bar]
"  /data/workplace/bar/src/


" #### 標識buff
" Bundle 'fholgado/minibufexpl.vim'
" map <Leader>e :MBEOpen<cr>
" map <Leader>c :MBEClose<cr>
" map <Leader>t :MBEToggle<cr>


" #### 自動補全
Bundle 'vim-scripts/AutoComplPop'


" ##### 比grep搜索更好
" grep foo $(find . -name '*.pm' | grep -v .svn)
Bundle 'mileszs/ack.vim'
" let g:ackprg = 'ag --nogroup --nocolor --column --smart-case'
let g:ack_default_options =
              \ " -s -H --color --group --column --smart-case --follow"
map <leader>a :Ack -i


" ##### vim-powerline
Bundle 'Lokaltog/vim-powerline'
" Bundle ' bling/vim-airline'
" Always show the status line - use 2 lines for the status bar
set laststatus=2


" ################## 插件配置結束 ###########################
filetype plugin indent on     " required!

目錄


最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容