Vim配置及說明——IDE編程環境

Vim配置及說明——IDE編程環境

想起幾年前第一次在Linux上面用vim(當時剛從Windows轉到Linux下編程),第一印象就是怎麼這麼麻煩,界面還這麼醜,各類不方便,對着vimtutor練習了一下午。當時滿腦子懷念Window下的VS的各類方便,後來搜到吳垠的《手把手教你把Vim改裝成一個IDE編程環境》,讓我頓時欣喜了一番,感受看到了曙光,又對着他的教程搗鼓折騰了幾天後感受vim好用了些,但仍是不盡人意,感受沒VS方便,尤爲是代碼的自動補全方面,並且不少命令都要記,隔一段時間不用就忘記了。php

可是通過不斷搗鼓折騰,如今我再也離不開vim了,在Windows下我也用vim。只有堅持使用一段時間vim,選好本身喜歡的插件,你必定會對vim愛不釋手的。言歸正傳,下面是個人配置。html

錄了張使用YCMultisnips的補全效果圖,以及使用sytastic進行靜態代碼錯誤標示python

targbareasymotionnerdcommenter效果圖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

  • 首先在https://github.com/cstrap/monaco-font 這個網址下載Monaco字體
  • 使用命令 unzip monaco-font-master解壓壓縮包
  • 切換到monaco-font-master目錄中,修改腳本文件權限chmod +x install-font.sh
  • 執行腳本文件sudo ./install-font.sh

二、插件管理

插件[ gmarik/vundle]編輯器

推薦等級:★★★★★

vim 的各插件打包文檔中一般也包含doc、plugin子目錄,用戶將插件打包文檔中的對應子目錄拷貝至.vim/目錄中便可完成安裝,但插件一多將混亂不堪,會出現名字衝突,卸載麻煩(有時分不清那個文件對應哪一個插件,本身也不清楚到底安裝了哪些插件)等問題。

vundle能夠幫咱們解決這些問題。

經過使用vundle來安裝新的插件也及其方便:

  1. 能夠去GIT,也能夠去Vim Scripts查找並選好你想要的插件。
  2. 在VIM的配置文件中寫一句 Bundle plugin_name;
  3. 執行一下Vundle的初始化命令,插件就裝好了;
    • 升級和卸載也是一樣的簡單;

Bundle 支持的格式有三種:

第一種是一個普通的字符串,就是 vim 插件頁面裏左上角的插件名字,若是插件名有空格,使用 - 替換。

第二種是github賬號/項目名。

第三種就是git repository

具體可查看vbundle的幫助文檔。

三、主題風格

一套好的配色方案絕對會影響你的編碼效率,vim 內置了 10 多種配色方案供你選擇

GUI 下,能夠經過菜單(Edit -> Color Scheme)試用不一樣方案,字符模式下,須要你手工調整配置信息,再重啓 vim 查看效果(csExplorer 插件,可在字符模式下不用重啓便可查看效果)。 還不滿意,能夠在VIM Color Scheme Test - C這裏選擇本身喜歡的配色方案

目前用得最多的是下面三種配色方案:

  • solarized 推薦等級:★★★★★
  • molokai 推薦等級:★★★★★
  • phd 推薦等級:★★★★☆

個人配置以下:

" 主題 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 時自動全屏

五、目錄樹導航

插件:vim-scripts/The-NERD-tree

推薦等級:★★★★★

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

六、標籤導航

majutsushi/tagbar

推薦等級:★★★★★

  • tagbar按做用域歸類不一樣的標籤。按名字空間 n_foo、類 Foo 進行歸類,在內部有聲明、有定義;
  • 顯示標籤類型。名字空間、類、函數等等;
  • 顯示完整函數原型;
  • 圖形化顯示共有成員(+)、私有成員(-)、保護成員(#);

配置以下:

"標籤導航,緯度和taglist不一樣
Bundle 'majutsushi/tagbar'
nmap <leader>tb :TagbarToggle<CR>  " \tb 打開tagbar窗口
let g:tagbar_autofocus = 1

七、taglist

vim-scripts/taglist.vim

推薦等級:★★★★☆

在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

八、多文檔編輯

插件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    = 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>

九、文件搜索

插件: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 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

十、美化狀態欄

插件: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'

十一、括號匹配高亮

插件: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

1三、標誌無效空格

bronson/vim-trailing-whitespace

推薦等級:★★★★★

將代碼行最後無效的空格標紅

vimrc中配置以下:

"for show no user whitespaces
Bundle 'bronson/vim-trailing-whitespace'
map <leader><space> :FixWhitespace<cr>	" \+space去掉末尾空格

1四、快速移動

插件:Lokaltog/vim-easymotion

推薦等級:★★★★★

效率提高殺手鐗,跳轉到光標後任意位置

vimrc中配置以下:

"更高效的移動 // + w/f/l
Bundle 'Lokaltog/vim-easymotion'

1五、括號匹配跳轉

插件:vim-scripts/matchit.zip

推薦等級:★★★☆☆

匹配成對的標籤,在()、""、甚至HTML標籤之間快速跳轉,快捷鍵爲% vimrc中配置以下:

Bundle 'vim-scripts/matchit.zip'

1六、自動補全

插件:Valloric/YouCompleteMe

推薦等級:★★★★★

強烈推薦 Ubuntu13.04配置YCM可參考這裏

1七、宏定義補全

插件: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"]

1八、快速加減註釋

插件:scrooloose/nerdcommenter

推薦等級:★★★★★

快速批量註釋,方便好用

經常使用操做:

  • <leader>cc,註釋當前選中文本,若是選中的是整行則在每行首添加 //,若是選中

一行的部份內容則在選中部分先後添加分別 //;

  • <leader>cu,取消選中文本塊的註釋。

更多內容見幫助文檔。

Bundle 'scrooloose/nerdcommenter'
let NERDSpaceDelims = 1

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'

20、自動括號補全

插件:Raimondi/delimitMate

推薦等級:★★★★☆

vimrc中配置以下:

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

2一、代碼對齊

插件:godlygeek/tabular

推薦等級:★★★★★

vimrc中配置以下:

"for code alignment
Bundle 'godlygeek/tabular'
" \bb                 按=號對齊代碼 [Tabular插件]
nmap <leader>bb :Tab /=<CR>
" \bn                 自定義對齊    [Tabular插件]
nmap <leader>bn :Tab /

2二、靜態代碼分析

插件:scrooloose/syntastic

推薦等級:★★★★☆

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

2三、快速跳轉到TODO列表

插件:vim-scripts/TaskList.vim

推薦等級:★★★★☆

查看並快速跳轉到代碼中的TODO列表。重構代碼時通常通讀,標記修改位置,很是實用

vimrc中配置以下:

Bundle 'vim-scripts/TaskList.vim'
map <leader>td <Plug>TaskList

2四、維基百科

插件: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 = 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]

2五、多光標批量操做

插件: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>'

2六、python語法高亮

"python syntax highlight
Bundle 'hdima/python-syntax'
let python_highlight_all = 1

2七、其餘說明

在個人vimrc中使用了ctags,須要安裝

sudo apt-get install ctags

相關文章
相關標籤/搜索