標籤:

用 Vim 寫 Python 的最佳實踐是什麼?

是否需要自動提示、補全等功能,怎麼去添加這些功能。我自己eclipse寫java比較多,謝謝!


上面用 vim 寫 python 的答案似乎有些久遠了,新年新氣象,來補充點似乎尚未提及的一些內容,介紹思路而已,可能不會具體展開。

先來曬個圖:

  1. 語法檢查

如果用 vim8, 那麼可以用非同步檢測的 w0rp/ale 代替 syntastic 了,再也不用羨慕 flycheck, 也不用因為語法檢查而卡頓了。

關於 ale 這部分的個性化配置,其實有點 「吹毛求疵」,一般使用默認的應該就夠了,不過我喜歡 fancy 的東西,就折騰了一把。涉及的東西可能比較細枝末節,可以直接看 liuchengxu/space-vim 了解一下大概的配置 。先挖坑,以後再來補充...

回答太長了會降低人的閱讀興趣的,於是我在另一個回答涉及了這個問題 如何優雅地使用 Vim? - simple 的回答 - 知乎 , 基本就是設置簡潔的 warning 與 error sign, 同時對 ale 提供的 statusline 內容進行再提取。如果沒有 warning 或 error, 就不顯示。否則以不同顏色進行區分。

2. syntax 增強

vim 自帶對於 python 的高亮有點弱,連 self 都不給我亮起來, 這一點可以通過 python-mode/python-mode 來進行增強:

hi pythonSelf ctermfg=174 guifg=#6094DB cterm=bold gui=bold

具體可以看這裡 liuchengxu/space-vim

在 python-mode 的 syntax/python.vim python-mode/python-mode 里,可以看到比 vim 自帶的 syntax/python.vim 更加細緻的高亮群組,應該不難看懂各項內容,照著顏色表自行修改高亮風格就可以了。這是 terminal 256 色對照表 256 Terminal colors and their 24bit equivalent (or similar), 這是 GUI 顏色對照表 Complete HTML True Color Chart 。

這麼做的優點自然是想要什麼效果完全可自定義,但是也有缺點,因為可能沒辦法適配所有的 vim 主題。當你切換主題時,這些針對 python 自定義的高亮也許會有些不太契合。就算是只算流行的那些 vim 主題,恐怕也有兩位數了,有些是冷色調,有些是暖色調,有些以藍色為主,有些是紅色居多,應該不太容易找一些百搭的配色。不過每個人所中意的主題可能也就是那麼幾個,所以自行選擇吧.....

其實 python-mode 有點集大成的意思,囊括了用 vim 寫 python 的很多功能,有興趣的可以嘗試靠它 「一招打遍天下」。不過,目前我只是中意這一部分而已。

3. 代碼格式化

這一點可以通過 google/yapf 來完成,安裝好 yapf, 像下面這樣 &= 就能對當前文件進行格式化:

autocmd FileType python nnoremap &= :0,$!yapf&

4. 自動補全

這一點因為我主要還是使用 Vim, 因此用的 YouCompleteMe, 實際後端用的是已經提到的 jedi-vim. 如果不喜歡 YCM, 因為安裝過程確實需要費點時間和精力,NeoVim 和 Vim8 也有了新的選擇:

NeoVim 可以嘗試使用 Shougo/deoplete.nvim 和 roxma/nvim-completion-manager ,個人使用 NCM。因為 deoplete 的配置相對複雜,我喜歡簡單的, NCM 不用怎麼配置就可以有很好的效果,在並行架構上也有先進之處。 Vim 8 的非同步補全插件 maralla/completor.vim ,跟 NCM 一樣,配置簡單的同時效果很好。現在 space-vim 只需啟用 liuchengxu/space-vim auto-completion Layer 就可以滿足大部分需求了。對於 YCM,我已經很久沒用了:)

5. import 整理

各種 import 是不是顯得有點亂?使用 timothycrosley/isort 整理一下吧:

autocmd FileType python nnoremap &i :!isort %&&

6. 一鍵運行

這個可以通過 skywind3000/asyncrun.vim 來增強, 把之前的 ! 換成 AsyncRun! 就好了 (其實還是有些小小的注意點),具體可以看這裡 liuchengxu/space-vim 。

注意點在這裡:

很多人的一鍵運行可能大概長這樣(可以看前面的回答):

...
exec "!g++ % -o %&<" exec "!time ./%&<" ...

可以直接把上面的 ! 換成 AsyncRun! 嗎?答案是不可以,如果要達到之前的效果,應該要這樣:

exec "AsyncRun! g++ -stdc++11 % -o %&<; time ./%&<"

要用分號鏈接多條命令(linux)或者 鏈接多條命令(windows),具體可以看這個 issue Automatically manipulate the quickfix window? · Issue #22 · skywind3000/asyncrun.vim , 作者本尊也在知乎(大家肯定是誰),前輩的答疑還是非常耐心細緻的~,值得一看。

具體的 vim 配置在這裡 (注意:這裡進入廣告時間),liuchengxu/space-vim (如果覺得補充的有用,可以順便到 github 點個 star 支持下哈), 啟用 ycmd, syntax-checking, programming, python Layer 就能達到上面的效果了。有人覺得主題不錯,上圖中使用的是 liuchengxu/space-vim-dark, 修改自 spacemacs-dark-theme.

Use Vim as a Python IDE 我寫了一個英文版本,有些許內容不同,就不同步更新了,有興趣的可自行查看。


Vim上真正牛逼的地方不是代碼補全提示功能這些功能(我不知道有沒有提示,但是補全功能很多),而是快速定位,快速把想要的代碼格式化。

我主要是在格式上配置了一些插件和設定。編譯和調試還沒有弄。下面所說的都是linux系統上的設定,win下有些地方不一樣。

首先要在vimrc里針對python設置格式(這是我目前的最簡設置):

"顯示行數,設置軟回車和縮進還有語法
set number
set expandtab
set tabstop=8
set shiftw=4
set softtabstop=4
set autoindent
:syntax on
"補全設置,不設也能用
let Tlist_Ctags_Cmd="/usr/bin/ctags"
filetype plugin indent on
filetype plugin on
set ofu=syntaxcomplete#Complete
"這個是我喜歡的,一旦一行的字元超出80個的話就把那些字元的背景設為紅色
highlight OverLength ctermbg=red ctermfg=white guibg=#592929
match OverLength /\%81v.+/

剩下的一些插件我裝了:

VCS(版本控制,支持git,svn,hg等等)
Tabular(非常方便的排版工具)

剩下就是一些技巧了,只有慢慢練才可以
偷懶複製一下我在者也上的答案:
http://zheye.org/asks/4dc62cbbfd503c368f00000e

  • 不按Esc而是按^[或者^c,速度快很多
  • 學會幾個定位鍵的區別:0, $, {, }, g, G, w, e, b...
  • o, O分別是當前位置下面/上面插入一個新行並進入插入狀態
  • Shift+V選定幾行,然後用 一起移動
  • Ctrl+V選定行首或行尾的字元,然後用shift+i做插入,或者shift+x做刪除
  • 學會用y,d 和p, P做粘貼剪切
  • 學會用^W的窗口操作。打開文件用sp或者vs
  • 學會記錄宏的命令。用q加任意鍵開始錄製,再按q保存。然後可用@加這個任意鍵回放,在@前加數字可定義回放次數。
  • "."重複上一個命令,"u"取消上一個命令,"^r"反取消
  • ^n, ^p用buf里的關鍵詞補全。
  • 學會搜索替換":%s/要搜的東西/要換成的東西/g"
  • 任何時候移到一個單詞上按#的話可以高亮這個文檔里所有一樣的單詞
  • 用「/」做搜索, 按n或N 上一個/下一個
  • ":!命令 "可直接運行這個命令,用":!命令 %"如果你想讓這個命令對當前所編輯文件做操作。
  • 任何時候可用":cd %:p:h"來切換目錄到當前編輯文件所在目錄。

剩下的我想起來再補充


剛開始用vim寫python的時候,感覺很不方便,於是就用了圖形界面的Pycharm(如果是windows用戶,這個IDE應該是標配),用了一段時間也沒有覺得有什麼不好,不過,腦子裡總是會想起《程序員修鍊之道》中,那句」最好是精通一種編輯器,並將其用於所有編輯任務。如果不堅持使用一種編輯器,可能會面臨現代的巴別特大混亂。」所以,我又決定用vim來寫python。

在知乎上有很多vim寫python的插件推薦,不過我感覺很多人回答都不動腦子,這些回答主要有兩個問題:

  1. 回答不全面,很多人都只是推薦一款插件,然後貼個鏈接就完了,如果要想很爽的用vim寫python,可以肯定的是,一款插件是不夠的
  2. 貼上自己的配置,說自己的配置有多爽,然後就不管了。如果是一個vim新手,是用不著這麼多配置的,如果是一個vim老手,也不會放棄自己原有的配置,使用別人自定義、認為很爽的個性化配置

所以,這些回答都不是很靠譜。我爭取推薦一些靠譜的東西,那麼,就開始吧!


1. 一鍵執行

這個不是插件,而是一個自定義的vim配置。很多時候我們寫python,都是寫一些較為簡單的腳本,那麼,這個一鍵執行的功能就非常實用,我個人感覺最實用的是在寫單元測試的時候,寫完一個單元測試,都不用退出vim,立即執行就能看到結果。

將下面的配置放到.vimrc文件即可:


""""""""""""""""""""""
"Quickly Run
""""""""""""""""""""""
map & :call CompileRunGcc()&
func! CompileRunGcc()
exec "w"
if filetype == "c"
exec "!g++ % -o %&<" exec "!time ./%&<" elseif filetype == "cpp" exec "!g++ % -o %&<" exec "!time ./%&<" elseif filetype == "java" exec "!javac %" exec "!time java %&<" elseif filetype == "sh" :!time bash % elseif filetype == "python" exec "!time python2.7 %" elseif filetype == "html" exec "!firefox % " elseif filetype == "go" " exec "!go build %&<" exec "!time go run %" elseif filetype == "mkd" exec "!~/.vim/markdown.pl % &> %.html "
exec "!firefox %.html "
endif
endfunc

2. 代碼補全(snipMate)

代碼補全能夠顯著地減少你敲鍵的次數,並且將你從瑣碎的語法中解放出來。說白了,就是幫你寫代碼!

如果使用snipMate插件,那麼,當你輸入ifmain以後按tab鍵,將會自動為你生成下面的代碼:


if __name__ == "__main__":
main()

輸入for,再按tab鍵,生成如下代碼:


for needle in haystack:
# code...

代碼補全有兩款插件都比較不錯,可以根據自己的需要進行選擇:

  1. snipMate
  2. xptemplate

3. 語法檢查(Syntastic)

syntastic是一款強大的語法檢查插件,當你保存源文件時,它就會執行,並提示用戶哪些代碼存在語法錯誤,哪些代碼風格不符合規範,並給出具體的提示。

例如,python代碼風格默認設置為PEP8,即使你不知道PEP8的風格,只要你使用syntastic插件,並根據它給出的提示修改,那麼,你就能寫出完全符合PEP8風格的代碼!

4. 編程提示(jedi-vim)

jedi-vim是基於jedi的自動補全插件,與Syntastic 不同的是,該插件更加智能,更貼切的稱呼是」編程提示」,而不是代碼補全插件。

如下圖所示:

可以說,這個插件是寫vim的標配,並且,真正讓vim寫python變成一件輕鬆愉快的事情。

注意: 安裝驚jedi-vim插件,需要在電腦中安裝jedi,根據jedi-vim給出的提示,正常按裝即可。不過我之前遇到一個問題,在公司的虛擬機裡面,安裝以後不起作用,google了半天沒有成功,最後更新了一下vim就可以了,希望遇到相同問題的人,能夠看到。


sudo aptitude install vim-gnome vim vim-common vim-tiny

5. 調試

至於調試,有pdb和ipdb,難道你們不是用ipdb的嗎?如果不是,趕緊用用。

再安利一下我的其他回答(對很多人都很有幫助):

怎麼樣才算是精通 Python?
哪些 Python 庫讓你相見恨晚?


vim 3年,本身是python後端開發
鏈接是我的配置,github,支持一鍵安裝

https://github.com/wklken/k-vim


說一個很多人可能忽略的:jedi-vim


還是用PyCharm吧,非要把VIm配置成 Python IDE 太折騰了。IDE有IDE的職責,Editor有Editor的職責,沒必要非把一個變成另外一個。如果非要自己弄的話可以試試下邊這個Vim Python Distribution。也不用你自己一個一個的折騰插件了。一次搞定,鏈接和功能如下:

klen/python-mode · GitHub

Python-mode is a vim plugin that helps you to create python code very quickly by utilizing libraries including pylint, rope, pydoc, pyflakes, pep8, and mccabe for features like static analysis, refactoring, folding, completion, documentation, and more.


The plugin contains all you need to develop python applications in Vim.


There is no need to install pylint, rope or any other Python libraries on your system.

  • Support Python version 2.6+ and 3.2+
  • Syntax highlighting
  • Virtualenv support
  • Run python code (&r)
  • Add/remove breakpoints (&b)
  • Improved Python indentation
  • Python folding
  • Python motions and operators (]], 3[[, ]]M, vaC, viM, daC, ciM, ...)
  • Code checking (pylint, pyflakes, pylama, ...) that can be run simultaneously (:PymodeLint)
  • Autofix PEP8 errors (:PymodeLintAuto)
  • Search in python documentation (K)
  • Code refactoring & (rope)
  • Strong code completion (rope)
  • Go to definition (&g for :RopeGotoDefinition)
  • And more, more ...

set foldmethod=indent
set foldlevel=99

" press space to fold/unfold code
nnoremap & za
vnoremap & zf

Python這種indent縮進代表block的語言最適合用vim做代碼摺疊了。上述代碼可以實現空格鍵摺疊/展開同一縮進層級,查看代碼的時候快速把不相關函數摺疊


我是個pythoner,也是vim的忠實用戶,我認為我的配置文件寫python是非常爽的,代碼補全,錯誤提示,智能縮進,一鍵排版,一鍵執行,感興趣的話可以試試,github上的項目是:ma6174/vim · GitHub,根據README的教程可以一條命名自動安裝配置好


更新,我已經放棄spf13-vim,原因是作者目前對這個項目持放羊態度,無節制的合併pull request,沒有任何test, 在master branch上不停的引進bug,去年四月份引進的bug到現在也沒有修復的跡象。 Issues 堆了幾十頁。

用這種發行版本來就是為了節省時間,結果還要我花很多時間去修bug,簡直得不償失。
==================

用spf13吧, 我自己原來也攢了300行左右的配置了。
發現spf13/spf13-vim · GitHub 以後,就完全投靠它了。


一鍵三系統安裝喔!一鍵三系統安裝喔!一鍵三系統安裝喔!

安利一下個人vim配置。
包括最左邊的目錄顯示(原地打開、分欄打開、tab打開)、最右邊的函數列表顯示(可以函數、變數、類跳轉)----已經去掉了ctags(因為ycm的跳轉比這好用多了,堪比pycharm)、中間的編輯器(一般我都是開兩個分欄)、powerline提示欄、自動代碼提示(帶docstring)。
快捷切換是否顯示行號、是否複製模式、是否摺疊展開代碼、flake8一鍵檢查代碼(編輯時默認也是開啟的)等等功能。
tab切換、分欄切換都很方便。自定義了函數列表和編輯文件的快捷。
還有很多。。。
最重要的是:如果你是ubuntu(真正的一鍵安裝)!如果你是centos7(可能需要升級下vim,本人是7.2版本)、mac osx(一鍵安裝)!一鍵三系統安裝喔!一鍵三系統安裝喔!一鍵三系統安裝喔!
附地址:GitHub - TTWShell/legolas-vim: 個人vim配置。


直接空白Vim使用 John Anderson 的配置就行了

Turning Vim into a modern Python IDE
鏈接:http://sontek.net/turning-vim-into-a-modern-python-ide

附上我的Vim截圖一張:


答主已經轉投 Emacs 陣營,目前在用 Spacemacs,基本配置:

* projectile 快速的項目管理,文件跳轉
* jedi Python 代碼檢查,自動補全
* evil emacs vim 插件
* acejump 文件內的快速跳轉
* yasnippit 代碼片段
* 想到了再補充

相比 pycharm 的優點:
* 代碼格式化的處理比 vim 和 pycharm 要舒服
* 分屏比 pycharm 方便

缺點就是代碼跳轉沒有 pycharm 牛逼,可以通過 etags 來實現基本的跳轉,準確率不夠我也不是很常用。

====================
私下認為PyCharm+IdeaVIM插件寫Python才是最舒服的

PyCharm強大的搜索和代碼跳轉用起來真的很舒服,比ctags好用不知道多少。另外就是一個file explore,相比時不時出BUG的NERD-tree舒服多了。
當然IdeaVIM不是完美的, 比如不能支持sorround、EasyMotion等VIM插件,這是一件讓人悲傷的事情。


把vim搞成IDE,不如把IDE裝個vim吧

PyCharm的vim插件相當不錯(也就是JetBrain全系列的Vim插件),是我用過體驗最好的第三方vim模式插件了

編輯完全沒問題

關鍵是可以用IDE的全套功能啊:

  • Refactor(基於語義的改名、格式化)
  • 單步調試
  • 各種py interpreter支持,含 virtual env、遠程解釋器
  • 以及著名JetBrain廠IDE自帶的各種效率功能

缺點:

1、貴,要花錢

2、貴,要買好電腦才帶的起

以前寫過一個小的

- pycharm環境配置

- 安裝:https://www.jetbrains.com/pycharm/download/#section=mac

- Configure Python interpreter

- Preference - Project Interpreter

- Support virtualenv

- Support remote interpreter (https://www.jetbrains.com/help/pycharm/configuring-remote-interpreters-via-ssh.html)

- bazel 支持:No

- debug

- Run/Debug

- Configure run parameters

- step by step debugging

- utilizing breakpoints

- use watcher and Numpy array viewer

- notes on python path: PyCharm will set PYTHONPATH for you, remember to do that in your terminal scripts

- IDE productivity

- Refactor: rename function/class/package name

- Reformat

- auto completion, view definition

- but not support non-builtin class well (python is 弱類型)

- some shortcuts

- double shift

- Cmd + Shift + A

- best vim supports

- Diff:本地提交前自己確認下非常好用。他們集成的Git工具,我覺得就沒有必要安裝其他git可視化工具了

- view arrays:調試TensorFlow和numpy的時候挺方便的…


flake8, pylint


看了以上所有回答,發現沒有一個提到omni的...
幹嘛插件... 自己編譯個vim加入omni支持多好...
請參考 http://vim.wikia.com/wiki/Omni_completion


推薦spf13-vim,把你的vim升級到vim7.4,如果是mac可以直接使用macvim。然後spf13中的youcompleteme插件將會起作用,代碼提示,變數函數跳轉不要太方便!


jedi/rope這些都是渣渣.

渣的點在於, python是一門動態語言, 對其進行智能補全的話, 由於缺乏類型信息, 很多情況下都補全不了. 而pycharm可以分析function annotation以及特定格式的注釋, 部分地解決了這個問題.


搬運自我的專欄Vim - 配置IDE一般的python環境


Vim 作為一個經典的編輯器,如果配置合適,可以成為一個編輯python腳本非常給力的工具。這篇文章主要目的是介紹如何打造一個強大的vim編輯環境。


第一部分:軟體安裝:

在終端中執行:

vim --version

得到:

VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Oct 5 2017 04:42:50)
MacOS X (unix) version
Included patches: 1-1175
Compiled by travis@Traviss-Mac-592.local
Huge version with MacVim GUI. Features included (+) or not (-):
+acl +find_in_path -mouse_sysmouse -tag_any_white
+arabic +float +mouse_urxvt -tcl
+autocmd +folding +mouse_xterm +termguicolors
+balloon_eval -footer +multi_byte +terminal
+browse +fork() +multi_lang +terminfo
++builtin_terms +fullscreen -mzscheme +termresponse
+byte_offset -gettext +netbeans_intg +textobjects
+channel -hangul_input +num64 +timers
+cindent +iconv +odbeditor +title
+clientserver +insert_expand +packages +toolbar
+clipboard +job +path_extra +transparency
+cmdline_compl +jumplist +perl/dyn +user_commands
+cmdline_hist +keymap +persistent_undo +vertsplit
+cmdline_info +lambda +postscript +virtualedit
+comments +langmap +printer +visual
+conceal +libcall +profile +visualextra
+cryptv +linebreak +python/dyn +viminfo
+cscope +lispindent +python3/dyn +vreplace
+cursorbind +listcmds +quickfix +wildignore
+cursorshape +localmap +reltime +wildmenu
+dialog_con_gui +lua/dyn +rightleft +windows
+diff +menu +ruby/dyn +writebackup
+digraphs +mksession +scrollbind -X11
+dnd +modify_fname +signs -xfontset
-ebcdic +mouse +smartindent +xim
+emacs_tags +mouseshape +startuptime -xpm
+eval +mouse_dec +statusline -xsmp
+ex_extra -mouse_gpm -sun_workshop -xterm_clipboard
+extra_search -mouse_jsbterm +syntax -xterm_save
+farsi +mouse_netterm +tag_binary
+file_in_path +mouse_sgr +tag_old_static
...

這裡要確認兩件事:

  1. Vim的版本要求不低於7.3
  2. 要求支持python,確保列表中有+python

不同系統下Vim的安裝方式如下:

OSX:

安裝homebrew,然後在終端中執行:

brew update
brew install vim

*NIX:

在Debian或者Ubuntu上,執行:

sudo apt-get remove vim-tiny
sudo apt-get update
sudo apt-get install vim

Windows:

參考官方文檔


第二部分:配置文件

vim的配置文件是

~/.vimrc

你可以講需要的配置加入配置文件中,重新啟動vim或者在normal環境中執行

:source %

便可載入配置文件

編輯vimrc文件,可以執行:

vim ~/.vimrc

有用的配置內容有:

set nocompatible
set nonumber
syntax on
filetype plugin indent on
set ic
set hlsearch
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,GB2312,big5
set cursorline
set autoindent
set smartindent
set scrolloff=4
set showmatch
set nu

窗口移動:

vim的默認窗口移動方式是Ctrl+w Ctrl+hjkl,但是這樣太過複雜,對此進行綁定:

nnoremap & &&
nnoremap & &&
nnoremap & &&
nnoremap & &&

為python的特殊配置有:

let python_highlight_all=1
au Filetype python set tabstop=4
au Filetype python set softtabstop=4
au Filetype python set shiftw=4
au Filetype python set textw=79
au Filetype python set expandtab
au Filetype python set autoindent
au Filetype python set fileformat=unix
autocmd Filetype python set foldmethod=indent
autocmd Filetype python set foldlevel=99

自動執行:按一下F5,自動執行代碼:

map & :call CompileRunGcc()&
func! CompileRunGcc()
exec "w"
if filetype == "c"
exec "!g++ % -o %&<" exec "!time ./%&<" elseif filetype == "cpp" exec "!g++ % -o %&<" exec "!time ./%&<" elseif filetype == "java" exec "!javac %" exec "!time java %&<" elseif filetype == "sh" :!time bash % elseif filetype == "python" exec "!clear" exec "!time python3 %" elseif filetype == "html" exec "!firefox % " elseif filetype == "go" " exec "!go build %&<" exec "!time go run %" elseif filetype == "mkd" exec "!~/.vim/markdown.pl % &> %.html "
exec "!firefox %.html "
endif
endfunc


第三部分:有用的插件

安裝插件強烈建議使用插件管理工具,這裡推薦的是vundle

首先安裝vundle:

git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

然後在vimrc中加入:

set nocompatible " required
filetype off " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin("~/some/path/here")

" let Vundle manage Vundle, required
Plugin "gmarik/Vundle.vim"

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)

" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required

關閉後重新打開vim,在normal模式下執行:

:PluginInstall

插件管理工具會自動的安裝配置文件中寫到的插件。

安裝其他插件的方式是:比如對於autofomat,其github主頁是:https://github.com/Chiel92/vim-autoformat

在vimrc中加入

Plugin "Chiel92/vim-autoformat"

關閉後重新打開vim,在normal模式下執行下述代碼即可:

PluginInstall "Chiel92/vim-autoformat"


第四部分:推薦的插件:

1、YouCompleteMe

為了成為一個IDE,必須要有自動補全工具,這裡強烈推薦YouCompleteMe

強烈建議按照官方說明一步一步進行安裝,史上最難安裝的vim插件並非名副其實

2、Autoformat

這個插件vim-autoformat能夠自動的一鍵格式化代碼

Before:

After:

安裝方式:

這款插件需要已經安裝有代碼格式化工具,安裝方式是在終端下執行:

pip install autopep8

推薦的配置是:

Plugin "Chiel92/vim-autoformat"
nnoremap & :Autoformat&
let g:autoformat_autoindent = 0
let g:autoformat_retab = 0
let g:autoformat_remove_trailing_spaces = 0

每次在normal環境下按F6便可以格式化代碼

3、文件樹

在vim中瀏覽文件夾:nerdtree

推薦配置是:

Plugin "https://github.com/scrooloose/nerdtree"
nnoremap & :NERDTreeToggle&
autocmd bufenter * if (winnr("$") == 1 exists("b:NERDTree") b:NERDTree.isTabTree()) | q | endif

通過按&開關文件樹

4、不同顏色區分括弧匹配

這個插件使用不同的顏色高亮匹配的括弧:rainbow_parentheses

Plugin "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"],
["darkmagenta", "DarkOrchid3"],
["Darkblue", "firebrick3"],
["darkgreen", "RoyalBlue3"],
["darkcyan", "SeaGreen3"],
["darkred", "DarkOrchid3"],
["red", "firebrick3"],
]
let g:rbpt_max = 16
let g:rbpt_loadcmd_toggle = 0
au VimEnter * RainbowParenthesesToggle
au Syntax * RainbowParenthesesLoadRound
au Syntax * RainbowParenthesesLoadSquare
au Syntax * RainbowParenthesesLoadBraces

5、強大的狀態欄

這款插件提供了加強版的狀態欄:vim-airline

推薦配置:

Plugin "https://github.com/bling/vim-airline"

6、代碼檢查工具

syntastic提供了自動代碼檢查功能,再也不用擔心變數寫錯了。

安裝方式:

這款插件需要已經安裝好代碼檢車工具,python代碼檢查工具的安裝方式是在終端下執行:

pip install flake8

推薦配置是:

Plugin "scrooloose/syntastic"
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0


第五部分:推薦

最後推薦一下自己寫一的一個vim插件:setbreakpoints_python

它的功能是按一下F12,自動在所在行上方加入set_trace(),並且在文件開頭加入相應的模塊導入

按F12之前:

按一下F12:

再按一下F12,就回到第一張圖的情況了

推薦配置:

Plugin "sillybun/setbreakpoints_python"
autocmd FileType python nnoremap & :call ToggleBreakPoint()&


我的vim配置文件是vimrc


大家好,我是SpaceVim這一項目的發起人,看到這一問題我想簡單說下,雖然我不做py開發,但是提問者提到java,而我就是用vim做java開發的。

項目主頁 SpaceVim by SpaceVim
github 地址: SpaceVim/SpaceVim
對於一個語言開發的最佳體驗,這個問題很難回答,因為不同的人對於開發過程中的需求是不一樣的。但是最基本的需求應該包括以下這麼幾點:
1. 代碼補全,這裡的代碼補全不僅僅是語法補全這單一的補全,所以我選擇的deoplete這種可以同時展示多種來源的補全引擎。這是基於neovim的通信機制的插件,當然在vim下使用的是neocomplete。
2. 語法檢查: 我採用的是neomake這一非同步檢查工具,有些人說有ale等等,大家可以同時關注下這些項目,看看PR issue解決速度,雖然我是neomake組織的owner,這並不是主觀上的偏袒。另外neomake的java項目的maker我在維護,目前支持maven和gradle項目,當然也支持eclipse和自定義的項目。
3. 跳轉: 這裡我採用的unite-ctags 非同步跳轉,雖然不是很准,但是配上unite的模糊查詢,效率比起IDE裡面的也毫不遜色。
4. debug,這個因人而異,我目前採用 javaunit.vim配上項目源文件和測試文件之間的跳轉,還是可以完成一些簡單的debug的。
5. 文件管理: vimfiler 不多解釋
6, 代碼樹 unite-outline 或者 tagbar,前者支持模糊搜索,預覽。
spacevim的初衷不是打造一個非常完美的IDE,而是實現一個完美的框架,以及各種layer,主要的開發精力應該在layer上面,用戶只需要載入自己需要的layer,就可以將spacevim打造成自己需要的環境。


本來我很少用vim, 覺得配置起來太麻煩了。
看了這個問題及其答案之後挺受啟發,自己花了2天學習怎麼優化配置vim。寫了個小小的vim distribution。基本滿足補全、提示、查找文件、查錯、Git等功能,界面也挺漂亮,Ubuntu上支持一條命令安裝。連接學校的VM的時候終於可以擺脫龜速的Xming了。
rarezhang/simple_vim_setting · GitHub
感謝 @李繼剛 和 @馬偉偉 的答案,從這兩個答案里學習到很多。
上個圖吧。


推薦閱讀:

替換兩個 Tags 之間字元串的 VIM 命令怎麼寫?(或者, g 的輸出如何作為 s 的輸入?)
你有哪些絕妙高效處理文本操作的經歷?

TAG:Python | Vim |