目錄
- vim極簡完美配置b-vim(一)安裝教程及目錄說明
- vim極簡完美配置b-vim(二)vimrc 文件說明
- vim極簡完美配置b-vim(三)vimrc.bundles 文件說明
- vim極簡完美配置b-vim(四)vimrc.config_base 文件說明
- vim極簡完美配置b-vim(五)vimrc.config_filetype 文件說明
- vim極簡完美配置b-vim(六)其他目錄及情況說明
使用 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!
目錄
- vim極簡完美配置b-vim(一)安裝教程及目錄說明
- vim極簡完美配置b-vim(二)vimrc 文件說明
- vim極簡完美配置b-vim(三)vimrc.bundles 文件說明
- vim極簡完美配置b-vim(四)vimrc.config_base 文件說明
- vim極簡完美配置b-vim(五)vimrc.config_filetype 文件說明
- vim極簡完美配置b-vim(六)其他目錄及情況說明