用 Vim 寫 Python 的最佳實踐

先來曬個圖:html

圖片描述

對於一些 Python 的小項目,使用 vim 是一個不錯的選擇。本文內容整理自我在知乎的回答 用 Vim 寫 Python 的最佳實踐是什麼?,下面的內容是對知乎舊有回答的一個補充,尤爲有一些主要針對 vim8. 若是想要更多內容,能夠查看知乎對於該問題的一些回答。python

語法檢查

若是用 vim8, 那麼能夠用異步檢測的 w0rp/ale 代替 syntastic 了,不再用羨慕 flycheck, 也不用由於語法檢查而卡頓了。linux

關於 ale 這部分的個性化配置,其實有點 「吹毛求疵」,通常使用默認的應該就夠了,不過我喜歡 fancy 的東西,就折騰了一把。涉及的東西可能比較細枝末節,能夠直接看 space-vim: syntax-checking 瞭解一下大概的配置 。主要是針對 ale 提供的 statusline 內容進行再提取進行展現。若是沒有語法錯誤就不顯示在 statusline, 若是有 warning 或 error, 則經過不一樣顏色就行區分。c++

圖片描述

而關於側邊的 warning 或 error sign, 我喜歡乾淨一點,用前景色區分就好,下面這樣有時候會像一塊塊的補丁貼在上面,以爲不太好看。git

圖片描述

圖片描述

syntax 加強

vim 自帶對於 python 的高亮有點弱,連 self 都不給我亮起來, 這一點能夠經過 python-mode/python-mode 來進行加強:github

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

具體能夠看這裏 space-vim: python layervim

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

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

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

代碼格式化

這一點能夠經過 google/yapf 來完成,安裝好 yapf, 像下面這樣 <LocalLeader>= 就能對當前文件進行格式化:

autocmd FileType python nnoremap <LocalLeader>= :0,$!yapf<CR>

自動補全

這一點由於我主要仍是使用 vim, 所以用的 YouCompleteMe, 實際後端用的是已經提到的 jedi-vim. 若是不喜歡 ycmd, 使用 neovim 的能夠嘗試使用 deoplete.nvim .

import 整理

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

autocmd FileType python nnoremap <LocalLeader>i :!isort %<CR><CR>

一鍵運行

這個能夠經過 skywind3000/asyncrun.vim 來加強, 把以前的 ! 換成 AsyncRun! 就行了. 其實仍是有些小小的注意點:

不少人的一鍵運行可能大概長這樣:

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

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

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

要用分號連接多條命令(linux)或者 & 連接多條命令(windows),具體能夠看 這裏

具體完整的 vim 配置在這裏: >>> space-vim (以爲寫得不錯的話能夠順便到 github 點個 star ? 支持下哈), 啓用 ycmd, syntax-checking, programming, python Layer 就能達到上面的效果了。

相關文章
相關標籤/搜索