想起幾年前第一次在Linux上面用vim(當時剛從Windows轉到Linux下編程),第一印象就是怎麼這麼麻煩,界面還這麼醜,各類不方便,對着vimtutor
練習了一下午。當時滿腦子懷念Window下的VS的各類方便,後來搜到吳垠的《手把手教你把Vim改裝成一個IDE編程環境》,讓我頓時欣喜了一番,感受看到了曙光,又對着他的教程搗鼓折騰了幾天後感受vim好用了些,但仍是不盡人意,感受沒VS方便,尤爲是代碼的自動補全方面,並且不少命令都要記,隔一段時間不用就忘記了。php
可是通過不斷搗鼓折騰,如今我再也離不開vim了,在Windows下我也用vim。只有堅持使用一段時間vim,選好本身喜歡的插件,你必定會對vim愛不釋手的。言歸正傳,下面是個人配置。html
錄了張使用YCM和ultisnips的補全效果圖,以及使用sytastic進行靜態代碼錯誤標示python
targbar及easymotion、nerdcommenter效果圖c++
對於用慣了Windows下ctrl+s一鍵保存的人是否是對與vim中在命令行下:w的保存方式很不習慣?git
在.vimrc中加入以下配置,你可使用\s一鍵保存
github
" \s 一鍵保存 func! SaveFile() exec "w" endfunc map <leader>s :call SaveFile()<CR> imap <leader>s <ESC>:call SaveFile()<CR> vmap <leader>s <ESC>:call SaveFile()<CR>
安裝字體Monaco編程
默認字體很差看,挑個本身喜歡的,前提是你得先安裝好該字體。我喜歡Monaco字體,美觀,對中文支持也很好。vim
下面是找到的安裝過程,親自驗證。app
插件[ gmarik/vundle]編輯器
推薦等級:★★★★★
vim 的各插件打包文檔中一般也包含doc、plugin子目錄,用戶將插件打包文檔中的對應子目錄拷貝至.vim/目錄中便可完成安裝,但插件一多將混亂不堪,會出現名字衝突,卸載麻煩(有時分不清那個文件對應哪一個插件,本身也不清楚到底安裝了哪些插件)等問題。
vundle能夠幫咱們解決這些問題。
經過使用vundle來安裝新的插件也及其方便:
Bundle 支持的格式有三種:
第一種是一個普通的字符串,就是 vim 插件頁面裏左上角的插件名字,若是插件名有空格,使用 - 替換。
第二種是github賬號/項目名。
第三種就是git repository
具體可查看vbundle的幫助文檔。
一套好的配色方案絕對會影響你的編碼效率,vim 內置了 10 多種配色方案供你選擇
GUI 下,能夠經過菜單(Edit -> Color Scheme)試用不一樣方案,字符模式下,須要你手工調整配置信息,再重啓 vim 查看效果(csExplorer 插件,可在字符模式下不用重啓便可查看效果)。 還不滿意,能夠在VIM Color Scheme Test - C這裏選擇本身喜歡的配色方案
目前用得最多的是下面三種配色方案:
個人配置以下:
" 主題 solarized 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" " 主題 molokai Bundle 'tomasr/molokai' let g:molokai_original = 1 " 配色方案 set background=dark set t_Co=256 if g:isGUI colorscheme solarized "colorscheme molokai "colorscheme phd else "colorscheme solarized colorscheme molokai "colorscheme phd endif
其中,不一樣主題都有暗/亮色系之分,這樣三種主題六種風格,久不久換一換,給你不同的心情
編輯器界面展現的應全是代碼,不該該有工具條、菜單、滾動條浪費空間的元素,配置以下:
if g:isGUI " 使用GUI界面時的設置 set guioptions+=c " 使用字符提示框 set guioptions-=m " 隱藏菜單欄 "set guioptions-=T " 隱藏工具欄 set guioptions-=L " 隱藏左側滾動條 "set guioptions-=r " 隱藏右側滾動條 set guioptions-=b " 隱藏底部滾動條 "set showtabline=0 " 隱藏Tab欄 set cursorline " 突出顯示當前行 endif
咱們把 vim 弄成全屏模式。vim 自身沒法實現全屏,必須藉助第三方工具wmctrl, 一個控制窗口XYZ座標、窗口尺寸的命令行工具。先自行安裝wmctrl(sudo apt-get install wmctrl
) ,再在.vimrc中增長以下信息:
fun! ToggleFullscreen() " 將外部命令 wmctrl 控制窗口最大化的命令行參數封裝成一個 vim 的函數 call system("wmctrl -ir " . v:windowid . " -b toggle,fullscreen") endf map <silent> <F11> :call ToggleFullscreen()<CR> " 全屏開/關快捷鍵 autocmd VimEnter * call ToggleFullscreen() " 啓動 vim 時自動全屏
推薦等級:★★★★★
nerd-tree插件能夠查看文件列表,要打開哪一個文件,光標選中後回車便可在新 buffer 中打開。
配置以下:
"目錄文件導航 Bundle 'scrooloose/nerdtree' " \nt 打開nerdree窗口,在左側欄顯示 nmap <leader>nt :NERDTree<CR> let NERDTreeHighlightCursorline=1 let NERDTreeIgnore=[ '\.pyc$', '\.pyo$', '\.obj$', '\.o$', '\.so$', '\.egg$', '^\.git$', '^\.svn$', '^\.hg$' ] let g:netrw_home='~/bak' "close vim if the only window left open is a NERDTree autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | end
推薦等級:★★★★★
配置以下:
"標籤導航,緯度和taglist不一樣 Bundle 'majutsushi/tagbar' nmap <leader>tb :TagbarToggle<CR> " \tb 打開tagbar窗口 let g:tagbar_autofocus = 1
推薦等級:★★★★☆
在vimrc中配置以下:
Bundle 'vim-scripts/taglist.vim' " \tl 打開Taglist/TxtBrowser窗口,在右側欄顯示 nmap <leader>tl :Tlist<CR><c-l> " :Tlist 調用TagList let Tlist_Show_One_File = 1 " 只顯示當前文件的tags let Tlist_Exit_OnlyWindow = 1 " 若是Taglist窗口是最後一個窗口則退出Vim let Tlist_Use_Right_Window = 1 " 在右側窗口中顯示 let Tlist_File_Fold_Auto_Close = 1 " 自動摺疊 "let Tlist_Sort_Type = "name" " items in tags sorted by name
推薦等級:★★★★★
vim 的多文檔編輯涉及三個概念:buffer、window、tab,這三個事物與咱們常規理 解意義截然不同。vim 把加載進內存的文件叫作 buffer,buffer 不必定可見;若要 buffer 要可見,則必須經過 window 做爲載體呈現;同個看面上的多個 window 組合成 一個 tab。vim 中每打開一個文件,vim 就對應建立一個 buffer,多個文件就有多個 buffer,但默認你只看獲得最後 buffer 對應的 window
vimrc中配置以下:
Bundle 'fholgado/minibufexpl.vim' " 多文件切換,也可以使用鼠標雙擊相應文件名進行切換 let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1 "解決FileExplorer窗口變小問題 let g:miniBufExplForceSyntaxEnable = 1 let g:miniBufExplorerMoreThanOne=2 let g:miniBufExplCycleArround=1 " buffer 切換快捷鍵,默認方向鍵左右能夠切換buffer map <C-Tab> :MBEbn<cr> map <C-S-Tab> :MBEbp<cr>
推薦等級:★★★★☆
CtrlP會沿着vim打開的目錄一直向上查找相似.git/.svn等這樣的項目管理的目錄,若是找到則將這個做爲項目的根目錄 vimrc中配置以下:
"for file search ctrlp, 文件搜索 Bundle 'kien/ctrlp.vim' " 打開ctrlp搜索 let g:ctrlp_map = '<leader>ff' let g:ctrlp_cmd = 'CtrlP' " 至關於mru功能,show recently opened files map <leader>fp :CtrlPMRU<CR> "set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux" let g:ctrlp_custom_ignore = { \ 'dir': '\v[\/]\.(git|hg|svn|rvm)$', \ 'file': '\v\.(exe|so|dll|zip|tar|tar.gz)$', \ } "\ 'link': 'SOME_BAD_SYMBOLIC_LINKS', 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
推薦等級:★★★★☆
狀態欄加強展現,經過本插件,加強後的狀態欄,不只界面漂亮多了,並且多 了好些輔助信息(所在函數名、文件編碼格式、文件類型)。 vimrc中配置以下:
Bundle 'Lokaltog/vim-powerline' "if want to use fancy,need to add font patch -> git clone git://gist.github.com/1630581.git ~/.fonts/ttf-dejavu-powerline "let g:Powerline_symbols = 'fancy' let g:Powerline_symbols = 'unicode'
插件:kien/rainbow_parentheses.vim
推薦等級:★★★★☆
括號顯示加強 vimrc中配置以下:
Bundle 'kien/rainbow_parentheses.vim' let g:rbpt_colorpairs = [ \ ['brown', 'RoyalBlue3'], \ ['Darkblue', 'SeaGreen3'], \ ['darkgray', 'DarkOrchid3'], \ ['darkgreen', 'firebrick3'], \ ['darkcyan', 'RoyalBlue3'], \ ['darkred', 'SeaGreen3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['brown', 'firebrick3'], \ ['gray', 'RoyalBlue3'], \ ['black', 'SeaGreen3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['Darkblue', 'firebrick3'], \ ['darkgreen', 'RoyalBlue3'], \ ['darkcyan', 'SeaGreen3'], \ ['darkred', 'DarkOrchid3'], \ ['red', 'firebrick3'], \ ] let g:rbpt_max = 40 let g:rbpt_loadcmd_toggle = 0
插件:nathanaelkane/vim-indent-guides
推薦等級:★★★★☆
可視化的方式能將相同縮進的代碼關聯起來。 顯可視化縮進,示對齊線。 vimrc中配置以下:
Bundle 'nathanaelkane/vim-indent-guides' let g:indent_guides_enable_on_vim_startup = 0 " 默認關閉 let g:indent_guides_guide_size = 1 " 指定對齊線的尺寸 let g:indent_guides_start_level = 2 " 從第二層開始可視化顯示縮進 " \ig 打開/關閉 vim-indent-guides
bronson/vim-trailing-whitespace
推薦等級:★★★★★
將代碼行最後無效的空格標紅
vimrc中配置以下:
"for show no user whitespaces Bundle 'bronson/vim-trailing-whitespace' map <leader><space> :FixWhitespace<cr> " \+space去掉末尾空格
推薦等級:★★★★★
效率提高殺手鐗,跳轉到光標後任意位置
vimrc中配置以下:
"更高效的移動 // + w/f/l Bundle 'Lokaltog/vim-easymotion'
推薦等級:★★★☆☆
匹配成對的標籤,在()、""、甚至HTML標籤之間快速跳轉,快捷鍵爲% vimrc中配置以下:
Bundle 'vim-scripts/matchit.zip'
推薦等級:★★★★★
強烈推薦 Ubuntu13.04配置YCM可參考這裏
推薦等級:★★★★★
配合YCM使用,雙劍合璧,方便快捷,強烈推薦
開發時,我常常要輸入相同的代碼片段,好比 if-else、switch 語句,ultisnips能夠快速插入咱們自定義的代碼片斷,實現高效補全。 UltiSnips 預約義了幾十種語言經常使用的代碼模板,位於~/.vim/bundle/UltiSnips/UltiSnips/,UltiSnips 有一套本身的代碼模板語法規則。 vimrc中配置以下:
"快速插入代碼片斷 Bundle 'SirVer/ultisnips' let g:UltiSnipsExpandTrigger = "<tab>" let g:UltiSnipsJumpForwardTrigger = "<tab>" let g:UltiSnipsJumpBackwardTrigger="<s-tab>" "定義存放代碼片斷的文件夾 .vim/snippets下,使用自定義和默認的,將會的到全局,有衝突的會提示 let g:UltiSnipsSnippetDirectories=["snippets", "bundle/ultisnips/UltiSnips"]
推薦等級:★★★★★
快速批量註釋,方便好用
經常使用操做:
一行的部份內容則在選中部分先後添加分別 /、/;
更多內容見幫助文檔。
Bundle 'scrooloose/nerdcommenter' let NERDSpaceDelims = 1
tpope/vim-surround 詳情見幫助文檔 配合使用加強版命令重複 [https://github.com/tpope/vim-repeat| pope/vim-repeat ] vimrc中配置以下:
Bundle 'tpope/vim-surround' "for repeat -> enhance surround.vim, . to repeat command Bundle 'tpope/vim-repeat'
推薦等級:★★★★☆
vimrc中配置以下:
"自動補全單引號,雙引號等 Bundle 'Raimondi/delimitMate' " for python docstring ",優化輸入 au FileType python let b:delimitMate_nesting_quotes = ['"']
推薦等級:★★★★★
vimrc中配置以下:
"for code alignment Bundle 'godlygeek/tabular' " \bb 按=號對齊代碼 [Tabular插件] nmap <leader>bb :Tab /=<CR> " \bn 自定義對齊 [Tabular插件] nmap <leader>bn :Tab /
推薦等級:★★★★☆
syntastic是一款支持多語言的實時語法檢查插件。在 syntastic 的做用下,編碼中、編譯前,全部語法錯誤都將被抓出來並 呈現給你。
vimrc中配置以下:
" 使用pyflakes,速度比pylint快 Bundle 'scrooloose/syntastic' let g:syntastic_error_symbol = '✗' "set error or warning signs let g:syntastic_warning_symbol = '⚠' let g:syntastic_check_on_open=1 let g:syntastic_enable_highlighting = 0 "let g:syntastic_python_checker="flake8,pyflakes,pep8,pylint" let g:syntastic_python_checkers=['pyflakes'] "highlight SyntasticErrorSign guifg=white guibg=black let g:syntastic_cpp_include_dirs = ['/usr/include/'] let g:syntastic_cpp_remove_include_errors = 1 let g:syntastic_cpp_check_header = 1 let g:syntastic_cpp_compiler = 'clang++' let g:syntastic_cpp_compiler_options = '-std=c++11 -stdlib=libstdc++' let g:syntastic_enable_balloons = 1 "whether to show balloons
推薦等級:★★★★☆
查看並快速跳轉到代碼中的TODO列表。重構代碼時通常通讀,標記修改位置,很是實用
vimrc中配置以下:
Bundle 'vim-scripts/TaskList.vim' map <leader>td <Plug>TaskList
推薦等級:★★★★☆
vim下的維基百科,個人博客就是用vimwiki寫的。
vimrc中配置以下:
Bundle 'vim-scripts/vimwiki' let g:vimwiki_w32_dir_enc = 'utf-8' " 設置編碼 let g:vimwiki_use_mouse = 1 " 使用鼠標映射 let g:vimwiki_valid_html_tags = 'a,img,b,i,s,u,sub,sup,br,hr,div,del,code,red,center,left,right,h1,h2,h3,h4,h5,h6,pre,script,style' " 聲明能夠在wiki裏面使用的HTML標籤 " 對中文用戶來講,咱們並不怎麼須要駝峯英文成爲維基詞條 let g:vimwiki_camel_case = 0 let blog = {} if g:isWIN if g:atCompany let blog.path = 'D:/Files/Files/mysite/wiki/' let blog.path_html = 'D:/Files/Files/mysite/html/' let blog.template_path = 'D:/Files/Files/mysite/templates/' let blog.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} else let blog.path = 'D:/Files/mysite/wiki/' let blog.path_html = 'D:/Files/mysite/html/' let blog.template_path = 'D:/Files/mysite/templates/' let blog.nested_syntaxes = {'python': 'python', 'c++': 'cpp'} endif else let blog.path = '~/mysite/wiki/' let blog.path_html = '~/mysite/html/' let blog.template_path = '~/mysite/templates/' endif let blog.template_default = 'site' let blog.template_ext = '.html' let blog.auto_export = 1 let g:vimwiki_list = [blog]
插件:terryma/vim-multiple-cursors
推薦等級:★★★☆☆
vimrc中配置以下:
"for mutil cursor 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>'
"python syntax highlight Bundle 'hdima/python-syntax' let python_highlight_all = 1
在個人vimrc中使用了ctags,須要安裝
sudo apt-get install ctags