先來曬個(gè)圖:
對(duì)于一些 Python 的小項(xiàng)目,使用 vim 是一個(gè)不錯(cuò)的選擇。本文內(nèi)容整理自我在知乎的回答 用 用 Vim 寫 Python 的最佳實(shí)踐是什么?炎功,下面的內(nèi)容是對(duì)知乎舊有回答的一個(gè)補(bǔ)充,尤其有一些主要針對(duì) vim8. 如果想要更多內(nèi)容缓溅,可以查看知乎對(duì)于該問題的其他一些回答蛇损。
語法檢查
如果用 vim8, 那么可以用異步檢測(cè)的 w0rp/ale 代替 syntastic 了,再也不用羨慕 flycheck, 也不用因?yàn)檎Z法檢查而卡頓了坛怪。
關(guān)于 ale 這部分的個(gè)性化配置淤齐,其實(shí)有點(diǎn) “吹毛求疵”,一般使用默認(rèn)的應(yīng)該就夠了酝陈,不過我喜歡 fancy 的東西床玻,就折騰了一把。涉及的東西可能比較細(xì)枝末節(jié)沉帮,可以直接看 space-vim: syntax-checking 了解一下大概的配置 锈死。主要是針對(duì) ale 提供的 statusline 內(nèi)容進(jìn)行再提取進(jìn)行展示。如果沒有語法錯(cuò)誤就不顯示在 statusline, 如果有 warning 或 error, 則通過不同顏色就行區(qū)分穆壕。
而關(guān)于側(cè)邊的 warning 或 error sign, 我喜歡干凈一點(diǎn)待牵,用前景色區(qū)分就好,下面這樣有時(shí)候會(huì)像一塊塊的補(bǔ)丁貼在上面喇勋,覺得不太好看缨该。
syntax 增強(qiáng)
vim 自帶對(duì)于 python 的高亮有點(diǎn)弱,連 self 都不給我亮起來, 這一點(diǎn)可以通過 python-mode/python-mode 來進(jìn)行增強(qiáng):
hi pythonSelf ctermfg=174 guifg=#6094DB cterm=bold gui=bold
具體可以看這里 space-vim: python layer
在 python-mode 的 syntax/python.vim 里川背,可以看到比 vim 自帶的 syntax/python.vim 更加細(xì)致的高亮群組贰拿,應(yīng)該不難看懂各項(xiàng)內(nèi)容,照著顏色表自行修改高亮風(fēng)格就可以了熄云。這是 terminal 256 色對(duì)照表 256 Terminal colors and their 24bit equivalent (or similar)膨更, 這是 GUI 顏色對(duì)照表 Complete HTML True Color Chart 。
這么做的優(yōu)點(diǎn)自然是想要什么效果完全可自定義缴允,但是也有缺點(diǎn)荚守,因?yàn)榭赡軟]辦法適配所有的 vim 主題。當(dāng)你切換主題時(shí)练般,這些針對(duì) python 自定義的高亮也許會(huì)有些不太契合矗漾。就算是只算流行的那些 vim 主題,恐怕也有兩位數(shù)了薄料,有些是冷色調(diào)敞贡,有些是暖色調(diào),有些以藍(lán)色為主摄职,有些是紅色居多嫡锌,應(yīng)該不太容易找一些百搭的配色虑稼。不過每個(gè)人所中意的主題可能也就是那么幾個(gè)琳钉,所以自行選擇吧.....
其實(shí) python-mode 有點(diǎn)集大成的意思势木,囊括了用 vim 寫 python 的很多功能,有興趣的可以嘗試靠它 “一招打遍天下”歌懒。不過啦桌,目前我只是中意這一部分而已。
代碼格式化
這一點(diǎn)可以通過 google/yapf 來完成及皂,安裝好 yapf, 像下面這樣 <LocalLeader>=
就能對(duì)當(dāng)前文件進(jìn)行格式化:
autocmd FileType python nnoremap <LocalLeader>= :0,$!yapf<CR>
自動(dòng)補(bǔ)全
這一點(diǎn)因?yàn)槲抑饕€是使用 vim甫男, 因此用的 YouCompleteMe, 實(shí)際后端用的是已經(jīng)提到的 jedi-vim. 如果不喜歡 ycmd, 使用 neovim 的可以嘗試使用 deoplete.nvim .
import 整理
各種 import 是不是顯得有點(diǎn)亂?使用 timothycrosley/isort 整理一下吧:
autocmd FileType python nnoremap <LocalLeader>i :!isort %<CR><CR>
一鍵運(yùn)行
這個(gè)可以通過 skywind3000/asyncrun.vim 來增強(qiáng)验烧, 把之前的 !
換成 AsyncRun!
就好了. 其實(shí)還是有些小小的注意點(diǎn):
很多人的一鍵運(yùn)行可能大概長(zhǎng)這樣:
...
exec "!g++ % -o %<"
exec "!time ./%<"
...
可以直接把上面的 !
換成 AsyncRun!
嗎板驳?答案是不可以,如果要達(dá)到之前的效果碍拆,應(yīng)該要這樣:
exec "AsyncRun! g++ -stdc++11 % -o %<; time ./%<"
要用分號(hào)鏈接多條命令(linux)或者 & 鏈接多條命令(windows)若治,具體可以看 這里。
具體的 vim 配置在這里: space-vim (覺得寫的不錯(cuò)的話可以順便到 github 點(diǎn)個(gè) star 支持下哈), 啟用 ycmd, syntax-checking, programming, python Layer 就能達(dá)到上面的效果了感混。