利器系列-更高效的Vim

利器系列-更高效的Vim

來自專欄 k8s生態4 人贊了文章

截圖

便捷安裝

我提供了 Docker 鏡像,你可以簡單的使用下面的命令來使用。

sudo docker run -it --rm taobeier/vim

安裝

(你需要一個有Python支持的Vim版本. 請使用 vim --version | grep +python 來檢查)

  • 依賴(Debian/Ubuntu 平台)

    sudo apt-get install python vim exuberant-ctags git

    sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort

  • 依賴(RedHat/CentOS 平台)

    CentOS 6.7的yum源自帶的Python版本較舊,推薦自行安裝Python2.7.

    sudo yum install python vim ctags git

    sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort
  • 依賴(Mac OS 平台)

    brew install python vim git

    wget tenet.dl.sourceforge.net && tar -zxvf ctags-5.8.tar.gz && cd ctags-5.8 && ./configure && make && sudo make install

    sudo pip install dbgp vim-debug pep8 flake8 pyflakes isort
  • 下載vimrc 文件到用戶主目錄

    wget raw.githubusercontent.com -O $HOME/.vimrc
  • 打開 Vim

    打開Vim, 它將會自動安裝插件. 請耐心等待它完成. 或者你可以使用下面的命令來自行安裝.

    vim -E -u $HOME/.vimrc +qall
  • 享受你的Vim並個性化它吧!

支持特性

插件管理(Vundle)

在這份配置中,使用了Vundle作為插件管理器. Vundle會自動接管 .vim 文件夾,所有配置好的插件將默認下載至~/.vim/bundle/, 在使用之前請確保.vim文件夾乾淨. Vundle的插件安裝需要觸發 git clone 操作,搜索需要 curl 支持.

配置(截取了部分)

" let Vundle manage VundleBundle gmarik/vundle" ============================================================================" Active plugins" You can disable or add new ones here:" Plugins from github repos:" Python and PHP DebuggerBundle fisadev/vim-debug.vim" Better file browserBundle scrooloose/nerdtree" Code commenterBundle scrooloose/nerdcommenter" Class/module browserBundle majutsushi/tagbar" Code and files fuzzy finderBundle kien/ctrlp.vim" Extension to ctrlp, for fuzzy command finderBundle fisadev/vim-ctrlp-cmdpalette" Zen codingBundle mattn/emmet-vim" Git integrationBundle motemen/git-vim" Tab list panelBundle kien/tabman.vim

支持操作

命令

解釋

:PluginList

列出所有Plugin

:PluginInstall(!)

安裝/更新Plugin

:PluginSearch(!) foo

搜索foo相關的Plugin

:PluginClean(!)

清理未使用的Plugin

: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插件進行語法靜態檢查. 包括但不限於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 dont 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]" dont 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

打開錯誤列表


移動到下一個錯誤位置

p

移動到上一個錯誤位置

Git支持

在這份配置中, 使用vim-fugitivevim-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做Tag支持,可以顯示當前文件中定義的類/變數等.

配置

" Tagbar -----------------------------" toggle tagbar displaymap <F4> :TagbarToggle<CR>" autofocus on tagbar openlet g:tagbar_autofocus = 1

支持操作

快捷鍵

解釋

F4

打開Tag列表

超全自動補全

在這份配置中, 使用了Neocomplcache作為主要的自動補全插件.

配置

" NeoComplCache ------------------------------" most of them not documented because Im not sure how they work" (docs arent 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] = hw*" 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進行窗口管理器. 支持類Tmux的操作.

配置

" Window Chooser ------------------------------" mappingnmap - <Plug>(choosewin)" show big letterslet g:choosewin_overlay_enable = 1

支持操作

快捷鍵

解釋

-

開啟窗口選擇

- [

選擇上一個tab的窗口

- ]

選擇下一個tab的窗口

更多操作可以使用 :help choosewin

靈活的Tab管理

在這份配置中使用了TabMan進行Tab管理,可以進行靈活切換與管理

配置

" TabMan ------------------------------" mappings to toggle display, and to focus on itlet g:tabman_toggle = tllet g:tabman_focus = tf

支持操作

快捷鍵

解釋

tl

開啟/關閉tab管理

tf

將游標移動到tab管理窗口

優雅的狀態欄

在這份配置中,使用了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做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 dont 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可自動格式化.

除了上述列出的功能以外, 還有很多方便的特性,可以大大提升效率,在使用中慢慢體會吧!有問題可以在tao12345666333/vim on github 提issue

?


推薦閱讀:

Mu 入門:一個面向初學者的 Python 編輯器
Vim 科普之用 text objects 高效編輯[視頻]
代碼編輯器系列 #1 架構與解耦
vim 使用宏實現批量騷操作[視頻]
vim-indentLine縮進線,從此告別遊標卡尺[視頻]

TAG:Vim | Python | 代碼編輯器 |