TaoBeier 的 Vim 配置,支持 Python、Javascript、Golang 等
這是 TaoBeier 精心打造的 Vim 環境配置,支持 Python、Javascript、Vue.js、Golang 和 Markdown。
安裝
你需要一個有 Python 支持的 Vim 版本。請使用 vim --version | grep +python 來檢查確認。
依賴
Debian/Ubuntu 平台
sudo apt-get install python vim exuberant-ctags gitsudo pip install dbgp pep8 flake8 pyflakes isort
RedHat/CentOS 平台
CentOS 6.7 的 yum 源自帶的 Python 版本較舊,推薦自行安裝 Python2.7。
sudo yum install python vim ctags gitsudo pip install dbgp pep8 flake8 pyflakes isort
Mac OS 平台
brew install python vim gitwget http://tenet.dl.sourceforge.net/project/ctags/ctags/5.8/ctags-5.8.tar.gz && tar -zxvf ctags-5.8.tar.gz && cd ctags-5.8 && ./configure && make && sudo make installsudo pip install dbgp pep8 flake8 pyflakes isort
下載 vimrc 文件到用戶主目錄
wget https://raw.githubusercontent.com/tao12345666333/vim/master/vimrc -O $HOME/.vimrc
安裝插件
打開 Vim,它將會自動安裝插件。請耐心等待它完成。或者你可以使用下麵的命令來自行安裝。
vim -E -u $HOME/.vimrc +qall
享受你的 Vim 並個性化它吧!
支持特性
插件管理(Vundle)
在這份配置中,使用了 Vundle 作為插件管理器。Vundle 會自動接管 .vim 文件夾,所有配置好的插件將默認下載至~/.vim/bundle/, 在使用之前請確保.vim文件夾幹淨。 Vundle 的插件安裝需要觸發 git clone 操作,搜索需要 curl 支持。
配置(截取了部分)
" let Vundle manage VundlePlugin 'gmarik/vundle'" ============================================================================" Active plugins" You can disable or add new ones here:" Plugins from github repos:" Better file browserPlugin 'scrooloose/nerdtree'" Code commenterPlugin 'scrooloose/nerdcommenter'" Class/module browserPlugin 'majutsushi/tagbar'" Code and files fuzzy finderPlugin 'kien/ctrlp.vim'" Extension to ctrlp, for fuzzy command finderPlugin 'fisadev/vim-ctrlp-cmdpalette'" Zen codingPlugin 'mattn/emmet-vim'" Git integrationPlugin 'motemen/git-vim'" Tab list panelPlugin 'kien/tabman.vim'
支持操作
| 命令 | 解釋 |
|---|---|
:PluginList |
列出所有插件 |
:PluginInstall(!) |
安裝/更新插件 |
:PluginSearch(!) foo |
搜索 foo 相關的插件 |
:PluginClean(!) |
清理未使用的插件 |
:PluginUpdate |
更新插件 |
工程文件瀏覽(NERDTree)
在這份配置中, 使用了 NERDTree 查看文件列表。你可以在 NERDTree 中瀏覽和打開你文件係統中的目錄或文件。還可以進行文件隱藏和過濾,設置添加書簽等。在 NERDTree 窗口輸入?可獲得操作指南。這份配置中默認過濾掉了 .pyc、.git、.hg、 .svn等文件或文件夾的顯示。
配置
" auto open or close NERDTreeautocmd vimenter * if !argc() | NERDTree | endifautocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTreeType") && b:NERDTreeType == "primary") | q | endif" NERDTree -----------------------------" toggle nerdtree displaymap <F3> :NERDTreeToggle<CR>" open nerdtree with the current file selectednmap ,t :NERDTreeFind<CR>" don;t show these file typeslet NERDTreeIgnore = ['\.pyc$', '\.pyo$']
支持操作
| 快捷鍵 | 解釋 |
|---|---|
F3 |
打開/關閉 NERDTree |
,t |
打開 NERDTree 並選中當前文件 |
語法檢查(Syntastic)
在這份配置中,使用 Syntastic 插件進行語法靜態檢查. 包括但不限於C/C++/Go/Python/Haskell/Ruby/JavaScript等 。在本配置中對 JavaScript 的靜態檢查使用eslint,可以支持 ES6 及 JSX 等,細節可以參考 JSLint, JSHint 和 ESLint 的對比及 Vim 配置,想要切換檢查工具隻要修改對應位置即可。
配置
" Syntastic ------------------------------" show list of errors and warnings on the current filenmap <leader>e :Errors<CR>" turn to next or previous errors, after open errors listnmap <leader>n :lnext<CR>nmap <leader>p :lprevious<CR>" check also when just opened the filelet g:syntastic_check_on_open = 1" syntastic checker for javascript." eslint is the only tool support JSX." If you don't need write JSX, you can use jshint." And eslint is slow, but not a hindrance" let g:syntastic_javascript_checkers = ['jshint']let g:syntastic_javascript_checkers = ['eslint']" don't put icons on the sign column (it hides the vcs status icons of signify)let g:syntastic_enable_signs = 0" custom icons (enable them if you use a patched font, and enable the previous" setting)let g:syntastic_error_symbol = ''let g:syntastic_warning_symbol = ''let g:syntastic_style_error_symbol = ''let g:syntastic_style_warning_symbol = ''
特性
保存時自動進行語法靜態檢查,方便的錯誤提示及靈活的可擴展性。
支持操作
| 快捷鍵 | 解釋 |
|---|---|
\e |
打開錯誤列表 |
\n |
移動到下一個錯誤位置 |
\p |
移動到上一個錯誤位置 |
Git 支持(vim-fugitive 和 vim-signify)
在這份配置中,使用 vim-fugitive 和 vim-signify 做 Git 方麵的支持。可以進行常用的 Git 操作及優雅的狀態提示等(目前支持git和hg)。
配置
" Signify ------------------------------" this first setting decides in which order try to guess your current vcs" UPDATE it to reflect your preferences, it will speed up opening fileslet g:signify_vcs_list = [ 'git', 'hg' ]" mappings to jump to changed blocksnmap <leader>sn <plug>(signify-next-hunk)nmap <leader>sp <plug>(signify-prev-hunk)" nicer colorshighlight DiffAdd cterm=bold ctermbg=none ctermfg=119highlight DiffDelete cterm=bold ctermbg=none ctermfg=167highlight DiffChange cterm=bold ctermbg=none ctermfg=227highlight SignifySignAdd cterm=bold ctermbg=237 ctermfg=119highlight SignifySignDelete cterm=bold ctermbg=237 ctermfg=167highlight SignifySignChange cterm=bold ctermbg=237 ctermfg=227
支持操作
| 快捷鍵 | 解釋 |
|---|---|
:Git [args] |
類似執行git命令一樣 |
:Gstatus |
類似git status。在列表中使用-添加/移除文件 |
:Gcommit [args] |
類似 git commit
|
:Gmerge [args] |
類似 git merge
|
:Gpull [args] |
類似 git pull
|
:Gpush [args] |
類似 git push
|
:Gvdiff [revision] |
類似 git push 但是會切分窗口 |
更多詳細的操作可以使用 :help fugitive。
Tag 支持(Tagbar)
在這份配置中,使用了 Tagbar 做 Tag 支持,可以顯示當前文件中定義的類/變量等。
配置
" Tagbar -----------------------------" toggle tagbar displaymap <F4> :TagbarToggle<CR>" autofocus on tagbar openlet g:tagbar_autofocus = 1
支持操作
| 快捷鍵 | 解釋 |
|---|---|
F4 |
打開 Tag 列表 |
超全自動補全(Neocomplcache)
在這份配置中, 使用了 Neocomplcache 作為主要的自動補全插件。
配置
" NeoComplCache ------------------------------" most of them not documented because I'm not sure how they work" (docs aren't good, had to do a lot of trial and error to make" it play nice)" Disable AutoComplPop.let g:acp_enableAtStartup = 0" Use neocomplcache.let g:neocomplcache_enable_at_startup = 1let g:neocomplcache_enable_ignore_case = 1" Use smartcase.let g:neocomplcache_enable_smart_case = 1let g:neocomplcache_enable_auto_select = 1let g:neocomplcache_enable_fuzzy_completion = 1let g:neocomplcache_enable_camel_case_completion = 1let g:neocomplcache_enable_underbar_completion = 1let g:neocomplcache_fuzzy_completion_start_length = 1let g:neocomplcache_auto_completion_start_length = 1let g:neocomplcache_manual_completion_start_length = 1" Set minimum syntax keyword length.let g:neocomplcache_min_keyword_length = 1let g:neocomplcache_min_syntax_length = 1let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'" complete with workds from any opened filelet g:neocomplcache_same_filetype_lists = {}let g:neocomplcache_same_filetype_lists._ = '_'" <TAB>: completion.inoremap <expr><TAB> pumvisible() ? "\<C-n>" : "\<TAB>"" Define keyword.if !exists('g:neocomplcache_keyword_patterns')let g:neocomplcache_keyword_patterns = {}endiflet g:neocomplcache_keyword_patterns['default'] = '\h\w*'" Plugin key-mappings.inoremap <expr><C-g> neocomplcache#undo_completion()inoremap <expr><C-l> neocomplcache#complete_common_string()" <C-h>, <BS>: close popup and delete backword char.inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"inoremap <expr><C-y> neocomplcache#close_popup()inoremap <expr><C-e> neocomplcache#cancel_popup()
支持操作
| 快捷鍵 | 解釋 |
|---|---|
<Tab> |
使用 Tab 鍵進行待提示項目選擇 |
<C-g> |
取消補全 |
<C-l> |
完成待補全項中共同的字符串 |
<C-h> |
關閉待選項 |
<C-y> |
關閉待選項 |
<C-e> |
退出待選項 |
<BS> |
關閉待選項 |
類 Tmux 的窗口選擇(vim-choosewin)
在這份配置中,使用了 vim-choosewin 進行窗口管理器。支持類 Tmux 的操作。
配置
" Window Chooser ------------------------------" mappingnmap - <Plug>(choosewin)" show big letterslet g:choosewin_overlay_enable = 1
支持操作
| 快捷鍵 | 解釋 |
|---|---|
- |
開啟窗口選擇 |
- [ |
選擇上一個 tab 的窗口 |
- ] |
選擇下一個 tab 的窗口 |
更多操作可以使用 :help choosewin。
靈活的 Tab 管理(TabMan)
在這份配置中使用了 TabMan 進行 Tab 管理,可以進行靈活切換與管理。
配置
" TabMan ------------------------------" mappings to toggle display, and to focus on itlet g:tabman_toggle = 'tl'let g:tabman_focus = 'tf'
支持操作
| 快捷鍵 | 解釋 |
|---|---|
tl |
開啟/關閉 tab 管理 |
tf |
將光標移動到 tab 管理窗口 |
優雅的狀態欄(Airline)
在這份配置中,使用了 Airline 提供更多狀態欄支持。
配置
" Airline ------------------------------let g:airline_powerline_fonts = 1let g:airline_theme = 'bubblegum'"let g:airline#extensions#tabline#enabled = 1"let g:airline#extensions#tabline#left_sep = ' '"let g:airline#extensions#tabline#left_alt_sep = '|'let g:airline#extensions#whitespace#enabled = 1" to use fancy symbols for airline, uncomment the following lines and use a" patched font (more info on the README.rst)if !exists('g:airline_symbols')let g:airline_symbols = {}endiflet g:airline_left_sep = ''let g:airline_left_alt_sep = ''let g:airline_right_sep = ''let g:airline_right_alt_sep = ''let g:airline_symbols.branch = ''let g:airline_symbols.readonly = ''let g:airline_symbols.linenr = ''
支持特性
可以顯示分支,語法靜態檢查結果等。
自動插入頭部
在這份配置中寫了個小函數根據新建的不同類型的文件,自動插入頭部,支持python、ruby、 bash等。
Markdown 實時預覽(vim-instant-markdown 和 vim-markdown)
在這份配置中,使用了 vim-instant-markdown 和 vim-markdown 做 Markdown 格式的支持,可以支持實時預覽等特性。
此功能需要有 node 環境支持,可以執行 npm -g install instant-markdown-d 進行安裝。
配置
" Vim-markdown ------------------------------" Disabled automatically foldinglet g:vim_markdown_folding_disabled=1" LeTeX mathlet g:vim_markdown_math=1" Highlight YAML frontmatterlet g:vim_markdown_frontmatter=1" Vim-instant-markdown -----------------" If it takes your system too much, you can specify" let g:instant_markdown_slow = 1" if you don't want to manually control it" you can open this setting" and when you open this, you can manually trigger preview" via the command :InstantMarkdownPreviewlet g:instant_markdown_autostart = 0
支持操作
| 快捷鍵 | 解釋 |
|---|---|
:InstantMarkdownPreview |
手動觸發 markdown 文件的預覽 |
多遊標選擇、編輯等
在這份配置中,可以在高亮某單詞時,通過使用 Ctrl-n 或者 Ctrl-p 進行多遊標選擇,然後進行編輯或修改等操作。
快速文件查找
在這份配置中,可以通過使用,R進行全文查找或者,r進行快速查找,或者在當前字符串上使用,wR以及,wr來進行全文查找或者快速查找。
快速注釋
使用 NERDCommenter 插件完成快速注釋,可以通過\ci進行快速注釋。
Python 支持
完備的 Python 支持,可以自動識別當前是係統環境或虛擬環境,使用:Isort可智能對導入包進行排序,使用:PymodeLintAuto可自動格式化。
原文發布時間為:2017-01-08
本文來自雲棲社區合作夥伴“Linux中國”
最後更新:2017-05-31 10:32:24