如何使 Vim 下開發 Python 調試更方便?
剛開始用vim寫python的時候,感覺很不方便,於是就用了圖形界面的Pycharm(如果是windows用戶,這個IDE應該是標配),用了一段時間也沒有覺得有什麼不好,不過,腦子裡總是會想起《程序員修鍊之道》中,那句」最好是精通一種編輯器,並將其用於所有編輯任務。如果不堅持使用一種編輯器,可能會面臨現代的巴別特大混亂。」所以,我又決定用vim來寫python。
在知乎上有很多vim寫python的插件推薦,不過我感覺很多人回答都不動腦子,這些回答主要有兩個問題:
- 回答不全面,很多人都只是推薦一款插件,然後貼個鏈接就完了,如果要想很爽的用vim寫python,可以肯定的是,一款插件是不夠的
- 貼上自己的配置,說自己的配置有多爽,然後就不管了。如果是一個vim新手,是用不著這麼多配置的,如果是一個vim老手,也不會放棄自己原有的配置,使用別人自定義、認為很爽的個性化配置
所以,這些回答都不是很靠譜。我爭取推薦一些靠譜的東西,那麼,就開始吧!
1. 一鍵執行這個不是插件,而是一個自定義的vim配置。很多時候我們寫python,都是寫一些較為簡單的腳本,那麼,這個一鍵執行的功能就非常實用,我個人感覺最實用的是在寫單元測試的時候,寫完一個單元測試,都不用退出vim,立即執行就能看到結果。
將下面的配置放到.vimrc文件即可:
""""""""""""""""""""""
"Quickly Run
""""""""""""""""""""""
map &
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...
代碼補全有兩款插件都比較不錯,可以根據自己的需要進行選擇:
- snipMate
- 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
照這個來: 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 &
打開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=281http://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 的輸入?)
※你有哪些絕妙高效處理文本操作的經歷?