用 Vim 写 Python 的最佳实践

先来晒个图:

screenshot

对于一些 Python 的小项目,使用 vim 是一个不错的选择。本文内容整理自我在知乎的回答 用 用 Vim 写 Python 的最佳实践是什么?,下面的内容是对知乎旧有回答的一个补充,尤其有一些主要针对 vim8. 如果想要更多内容,可以查看知乎对于该问题的其他一些回答。

语法检查

如果用 vim8, 那么可以用异步检测的 w0rp/ale 代替 syntastic 了,再也不用羡慕 flycheck, 也不用因为语法检查而卡顿了。

关于 ale 这部分的个性化配置,其实有点 “吹毛求疵”,一般使用默认的应该就够了,不过我喜欢 fancy 的东西,就折腾了一把。涉及的东西可能比较细枝末节,可以直接看 space-vim: syntax-checking 了解一下大概的配置 。主要是针对 ale 提供的 statusline 内容进行再提取进行展示。如果没有语法错误就不显示在 statusline, 如果有 warning 或 error, 则通过不同颜色就行区分。

ale statusline

而关于侧边的 warning 或 error sign, 我喜欢干净一点,用前景色区分就好,下面这样有时候会像一块块的补丁贴在上面,觉得不太好看。

error/warning sign
error/warning sign

syntax 增强

vim 自带对于 python 的高亮有点弱,连 self 都不给我亮起来, 这一点可以通过 python-mode/python-mode 来进行增强:

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

具体可以看这里 space-vim: python layer

在 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 Chart

这么做的优点自然是想要什么效果完全可自定义,但是也有缺点,因为可能没办法适配所有的 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 就能达到上面的效果了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容