如何使 Vim 下開發 Python 調試更方便?


剛開始用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

至於調試,難道你們不是用ipdb的嗎?如果不是,趕緊用用,你們會喜歡的。


照這個來: Turning Vim into a modern python IDE

http://sontek.net/turning-vim-into-a-modern-python-ide

我配置後的圖:


.vimrc文件里加這個配置,按F5即可運行當前.py文件,輔以unittest即可。

au BufRead *.py map & & :w&:!/usr/bin/env python % &


打開vi,輸入:

:!wget https://download.jetbrains.com/python/pycharm-community-5.0.2.tar.gz
:!tar xvfz pycharm-community-5.0.2.tar.gz
:!pycharm-community-5.0.2/bin/pycharm.sh

然後你就可以愉快的寫Python程序了。


這個問題應該可以分成 開發 和 調試 兩個部分吧。

開發的話可以參考這兩篇:

http://www.mikeshi.me/wordpress/?p=281

http://www.mikeshi.me/wordpress/?p=286

主要就是安裝一些插件使得開發更加方便一些。我個人是安裝了一些文件管理方面的插件(方便項目管理),其他部分的比較少用。

調試部分的話,我個人而言,已經很少使用那種step by step的調試方法了,絕大部分時間都是用觀察錯誤信息+print的方式進行調試。得益於python統一的異常輸出,在python里用這個方法更加得心應手一些,錯誤定位和分析錯誤原因一般都比較快。

開發的時候使用unittest是一個非常好的習慣,可以很大程度上減少邏輯上的錯誤。python自帶了unittest框架。另外推薦nose ( http://readthedocs.org/docs/nose/en/latest/ ),可以讓unittest更加方便。


獻上一翻譯版本:使用Vim打造現代化的Python IDE- feisky(盛大雲·軟體開發)對照這些步驟來配置。

對應原文:http://sontek.net/blog/detail/turning-vim-into-a-modern-python-ide


老老實實用pycharm


ipython

用過的都說好


開一個終端進行vim編輯,另一個終端命令行運行編輯的文件

參考猛禽 的回答,求摺疊


@凌一望

用vim那個branch,新的作者已經改了,沒有_vimrc了。

老的安裝時./install.sh vim即可


配置如下:chenfjm/VimPlugins · GitHub


習慣了在windows安裝一個vm運行一台limux打開兩個終端一個扣,另一個運行調試。可能因為裝逼和不入流,鍾情於vim。


開發python的一些補全之類的插件很多人說了我就不重複了。就提一個拋磚引玉的東西,有個東西叫vdebug,還有個東西叫vimshell。具體來說就是在vimrc裡面給f11綁定一段腳本,運行vimshell並且在vimshell裡面運行vdebug。效果不錯的,值得嘗試。

btw我想說一句,學會用vim固然是重要的技巧,但是vim無論怎麼搞事都很難達到pycharm那麼方便的程度。所以建議平時還是pycharm+vim模擬器。偶爾用用vim修改一下之類的就好了,調試其實並沒有什麼需要的。


使用jedi, 然後使用ipdb, 然後使用ipython,最好以測試驅動開發的方式去開發。


還是老實點用 pycharm 調試神奇 也方便深處理解python


不折騰!


寫python啊,用Pyvim啊,天然支持。


自己沒有用太多配置就是github上的jedi 插件就滿足我了


pyvim jonathanslenders/pyvim · GitHub just pip install pyvim


- 學會使用ipdb + ipython

- 可以用supervisor之類的實時檢測文件變更並重新執行的工具

- 猛禽說的方式


我就很好奇為什麼不直接用eclipse而非要用VIM呢?


@李繼剛

大哥~~我運行那個install.sh腳本後~居然將vim默認成emacs了~~沒效果呀~~

怎麼破~!?


推薦閱讀:

各位的編輯器一般用什麼主題?
用 Vim 寫 Python 的最佳實踐是什麼?
替換兩個 Tags 之間字元串的 VIM 命令怎麼寫?(或者, g 的輸出如何作為 s 的輸入?)
你有哪些絕妙高效處理文本操作的經歷?

TAG:Python | Vim | 軟體調試 |