想起幾年前第一次在linux上面用vim(當時剛從Windows轉到Linux下編程),第一印象就是怎么這么麻煩,界面還這么丑,各種不方便,對著vimtutor
練習了一下午。當時滿腦子懷念Window下的VS的各種方便,后來搜到吳垠的《手把手教你把Vim改裝成一個IDE編程環境》,讓我頓時欣喜了一番,感覺看到了曙光,又對著他的教程搗鼓折騰了幾天后感覺vim好用了些,但還是不盡人意,感覺沒VS方便,尤其是代碼的自動補全方面,而且很多命令都要記,隔一段時間不用就忘記了。
但是經過不斷搗鼓折騰,現在我再也離不開vim了,在Windows下我也用vim。只有堅持使用一段時間vim,選好自己喜歡的插件,你一定會對vim愛不釋手的。言歸正傳,下面是我的配置。
錄了張使用YCM和ultisnips的補全效果圖,以及使用sytastic進行靜態代碼錯誤標示
targbar及easymotion、nerdcommenter效果圖
對于用慣了Windows下ctrl+s一鍵保存的人是不是對與vim中在命令行下:w的保存方式很不習慣?
在.vimrc中加入如下配置,你可以使用/s一鍵保存
" /s 一鍵保存func! SaveFile() exec "w"endfuncmap <leader>s :call SaveFile()<CR>imap <leader>s <ESC>:call SaveFile()<CR>vmap <leader>s <ESC>:call SaveFile()<CR>
安裝字體Monaco
默認字體不好看,挑個自己喜歡的,前提是你得先安裝好該字體。我喜歡Monaco字體,美觀,對中文支持也很好。
下面是找到的安裝過程,親自驗證。
插件[gmarik/vundle]
推薦等級:★★★★★
vim 的各插件打包文檔中通常也包含doc、plugin子目錄,用戶將插件打包文檔中的對應子目錄拷貝至.vim/目錄中即可完成安裝,但插件一多將混亂不堪,會出現名字沖突,卸載麻煩(有時分不清那個文件對應哪個插件,自己也不清楚到底安裝了哪些插件)等問題。
vundle可以幫我們解決這些問題。
通過使用vundle來安裝新的插件也及其方便:
Bundle 支持的格式有三種:
第一種是一個普通的字符串,就是vim 插件頁面里左上角的插件名字,如果插件名有空格,使用 - 替換。
第二種是github帳號/項目名。
第三種就是git repository
具體可查看vbundle的幫助文檔。
3、主題風格一套好的配色方案絕對會影響你的編碼效率,vim 內置了 10 多種配色方案供你選擇
GUI 下,可以通過菜單(Edit -> Color Scheme)試用不同方案,字符模式下,需要你手工調整配置信息,再重啟 vim 查看效果(csExplorer 插件,可在字符模式下不用重啟即可查看效果)。 還不滿意,可以在VIM Color Scheme Test - C這里選擇自己喜歡的配色方案
目前用得最多的是下面三種配色方案:
我的配置如下:
" 主題 solarizedBundle 'altercation/vim-colors-solarized'"let g:solarized_termcolors=256let g:solarized_termtrans=1let g:solarized_contrast="normal"let g:solarized_visibility="normal"" 主題 molokaiBundle 'tomasr/molokai'let g:molokai_original = 1" 配色方案set background=darkset t_Co=256if g:isGUI colorscheme solarized "colorscheme molokai "colorscheme phdelse "colorscheme solarized colorscheme molokai "colorscheme phdendif
其中,不同主題都有暗/亮色系之分,這樣三種主題六種風格,久不久換一換,給你不一樣的心情
4、窗口設置編輯器界面展示的應全是代碼,不應該有工具條、菜單、滾動條浪費空間的元素,配置如下:
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 時自動全屏5、目錄樹導航
插件:vim-scripts/The-NERD-tree
推薦等級:★★★★★
nerd-tree插件可以查看文件列表,要打開哪個文件,光標選中后回車即可在新 buffer 中打開。
配置如下:
"目錄文件導航Bundle 'scrooloose/nerdtree'" /nt 打開nerdree窗口,在左側欄顯示nmap <leader>nt :NERDTree<CR>let NERDTreeHighlightCursorline=1let 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 NERDTreeautocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "PRimary") | q | end6、標簽導航
majutsushi/tagbar
推薦等級:★★★★★
配置如下:
"標簽導航,緯度和taglist不同Bundle 'majutsushi/tagbar'nmap <leader>tb :TagbarToggle<CR> " /tb 打開tagbar窗口let g:tagbar_autofocus = 17、taglist
vim-scripts/taglist.vim
推薦等級:★★★★☆
在vimrc中配置如下:
Bundle 'vim-scripts/taglist.vim'" /tl 打開Taglist/TxtBrowser窗口,在右側欄顯示nmap <leader>tl :Tlist<CR><c-l>" :Tlist 調用TagListlet Tlist_Show_One_File = 1 " 只顯示當前文件的tagslet Tlist_Exit_OnlyWindow = 1 " 如果Taglist窗口是最后一個窗口則退出Vimlet Tlist_Use_Right_Window = 1 " 在右側窗口中顯示let Tlist_File_Fold_Auto_Close = 1 " 自動折疊"let Tlist_Sort_Type = "name" " items in tags sorted by name8、多文檔編輯
插件fholgado/minibufexpl.vim
推薦等級:★★★★★
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 = 1let g:miniBufExplMapWindowNavArrows = 1let g:miniBufExplMapCTabSwitchBufs = 1let g:miniBufExplModSelTarget = 1"解決FileExplorer窗口變小問題let g:miniBufExplForceSyntaxEnable = 1let g:miniBufExplorerMoreThanOne=2let g:miniBufExplCycleArround=1" buffer 切換快捷鍵,默認方向鍵左右可以切換buffermap <C-Tab> :MBEbn<cr>map <C-S-Tab> :MBEbp<cr>9、文件搜索
插件:kien/ctrlp.vim
推薦等級:★★★★☆
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 filesmap <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=0let g:ctrlp_match_window_bottom=1let g:ctrlp_max_height=15let g:ctrlp_match_window_reversed=0let g:ctrlp_mruf_max=500let g:ctrlp_follow_symlinks=110、美化狀態欄
插件:Lokaltog/vim-powerline
推薦等級:★★★★☆
狀態欄增強展示,通過本插件,增強后的狀態欄,不僅界面漂亮多了,而且多 了好些輔助信息(所在函數名、文件編碼格式、文件類型)。 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'11、括號匹配高亮
插件: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 = 40let g:rbpt_loadcmd_toggle = 012、可視化縮進
插件: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-guides13、標志無效空格
bronson/vim-trailing-whitespace
推薦等級:★★★★★
將代碼行最后無效的空格標紅
vimrc中配置如下:
"for show no user whitespacesBundle 'bronson/vim-trailing-whitespace'map <leader><space> :FixWhitespace<cr>" /+space去掉末尾空格14、快速移動
插件:Lokaltog/vim-easymotion
推薦等級:★★★★★
效率提升殺手锏,跳轉到光標后任意位置
vimrc中配置如下:
"更高效的移動 // + w/f/lBundle 'Lokaltog/vim-easymotion'15、括號匹配跳轉
插件:vim-scripts/matchit.zip
推薦等級:★★★☆☆
匹配成對的標簽,在()、""、甚至HTML標簽之間快速跳轉,快捷鍵為% vimrc中配置如下:
Bundle 'vim-scripts/matchit.zip'16、自動補全
插件:Valloric/YouCompleteMe
推薦等級:★★★★★
強烈推薦 Ubuntu13.04配置YCM可參考這里
17、宏定義補全插件:SirVer/ultisnips
推薦等級:★★★★★
配合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"]18、快速加減注釋
插件:scrooloose/nerdcommenter
推薦等級:★★★★★
快速批量注釋,方便好用
常用操作:
一行的部分內容則在選中部分前后添加分別 /、/;
更多內容見幫助文檔。
Bundle 'scrooloose/nerdcommenter'let NERDSpaceDelims = 119、快速加環繞符
tpope/vim-surround詳情見幫助文檔 配合使用增強版命令重復 [https://github.com/tpope/vim-repeat|pope/vim-repeat ] vimrc中配置如下:
Bundle 'tpope/vim-surround'"for repeat -> enhance surround.vim, . to repeat commandBundle 'tpope/vim-repeat'20、自動括號補全
插件:Raimondi/delimitMate
推薦等級:★★★★☆
vimrc中配置如下:
"自動補全單引號,雙引號等Bundle 'Raimondi/delimitMate'" for python docstring ",優化輸入au FileType python let b:delimitMate_nesting_quotes = ['"']21、代碼對齊
插件:godlygeek/tabular
推薦等級:★★★★★
vimrc中配置如下:
"for code alignmentBundle 'godlygeek/tabular'" /bb 按=號對齊代碼 [Tabular插件]nmap <leader>bb :Tab /=<CR>" /bn 自定義對齊 [Tabular插件]nmap <leader>bn :Tab /22、靜態代碼分析
插件:scrooloose/syntastic
推薦等級:★★★★☆
syntastic是一款支持多語言的實時語法檢查插件。在 syntastic 的作用下,編碼中、編譯前,所有語法錯誤都將被抓出來并 呈現給你。
vimrc中配置如下:
" 使用pyflakes,速度比pylint快Bundle 'scrooloose/syntastic'let g:syntastic_error_symbol = '?'"set error or warning signslet g:syntastic_warning_symbol = '?'let g:syntastic_check_on_open=1let 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=blacklet g:syntastic_cpp_include_dirs = ['/usr/include/']let g:syntastic_cpp_remove_include_errors = 1let g:syntastic_cpp_check_header = 1let 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 balloons23、快速跳轉到TODO列表
插件:vim-scripts/TaskList.vim
推薦等級:★★★★☆
查看并快速跳轉到代碼中的TODO列表。重構代碼時一般通讀,標記修改位置,非常實用
vimrc中配置如下:
Bundle 'vim-scripts/TaskList.vim'map <leader>td <Plug>TaskList24、維基百科
插件:vim-scripts/vimwiki
推薦等級:★★★★☆
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 = 0let 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'} endifelse let blog.path = '~/mysite/wiki/' let blog.path_html = '~/mysite/html/' let blog.template_path = '~/mysite/templates/'endiflet blog.template_default = 'site'let blog.template_ext = '.html'let blog.auto_export = 1let g:vimwiki_list = [blog]25、多光標批量操作
插件:terryma/vim-multiple-cursors
推薦等級:★★★☆☆
vimrc中配置如下:
"for mutil cursorBundle 'terryma/vim-multiple-cursors'let g:multi_cursor_use_default_mapping=0" Default mappinglet 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>'26、python語法高亮
"python syntax highlightBundle 'hdima/python-syntax'let python_highlight_all = 127、其他說明
在我的vimrc中使用了ctags,需要安裝
sudo apt-get install ctags
新聞熱點
疑難解答