在vim中写python程序_用 Vim 写 Python 的最佳实践是什么?

先来晒个图:语法检查

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

关于 ale 这部分的个性化配置,其实有点 “吹毛求疵”,一般使用默认的应该就够了,不过我喜欢 fancy 的东西,就折腾了一把。涉及的东西可能比较细枝末节,可以直接看 liuchengxu/space-vim 了解一下大概的配置 。先挖坑,以后再来补充...

回答太长了会降低人的阅读兴趣的,于是我在另一个回答涉及了这个问题 如何优雅地使用 Vim? - simple 的回答 - 知乎 , 基本就是设置简洁的 warning 与 error sign, 同时对 ale 提供的 statusline 内容进行再提取。如果没有 warning 或 error, 就不显示。否则以不同颜色进行区分。

2. syntax 增强

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

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

在 python-mode 的 syntax/python.vim python-mode/python-mode 里,可以看到比 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 的很多功能,有兴趣的可以尝试靠它 “一招打遍天下”。不过,目前我只是中意这一部分而已。

3. 代码格式化

这一点可以通过 google/yapf 来完成,安装好 yapf, 像下面这样 = 就能对当前文件进行格式化:

autocmd FileType python nnoremap = :0,$!yapf

4. import 整理

各种 import 是不是显得有点乱?使用 timothycrosley/isort 整理一下吧:

autocmd FileType python nnoremap i :!isort %

let g:ale_fix_on_save = 1

并在 ftplugin/python.vim 里面加入:

let b:ale_linters = ['flake8']

let b:ale_fixers = [

\ 'remove_trailing_lines',

\ 'isort',

\ 'ale#fixers#generic_python#BreakUpLongLines',

\ 'yapf',

\]

就可以实现保存自动格式化,或者也可以直接在 .vimrc 中指定:

let g:ale_fixers = {

\ 'python': [

\ 'remove_trailing_lines',

\ 'isort',

\ 'ale#fixers#generic_python#BreakUpLongLines',

\ 'yapf'

\ ]

\}

5. Python 文本对象

6. 自动补全

这一点因为我主要还是使用 Vim, 因此用的 YouCompleteMe, 实际后端用的是已经提到的 jedi-vim. 如果不喜欢 YCM, 因为安装过程确实需要费点时间和精力,NeoVim 和 Vim8 也有了新的选择:

NeoVim 可以尝试使用 Shougo/deoplete.nvim 和 roxma/nvim-completion-manager ,个人使用 NCM。因为 deoplete 的配置相对复杂,我喜欢简单的, NCM 不用怎么配置就可以有很好的效果,在并行架构上也有先进之处。 Vim 8 的异步补全插件 maralla/completor.vim ,跟 NCM 一样,配置简单的同时效果很好。现在 space-vim 只需启用 liuchengxu/space-vim auto-completion Layer 就可以满足大部分需求了。对于 YCM,我已经很久没用了:)

关于自动补全,ALE 也有意通过 LSP 支持,有兴趣的可以关注。

7. 一键运行

这个可以通过 skywind3000/asyncrun.vim 来增强, 把之前的 ! 换成 AsyncRun! 就好了 (其实还是有些小小的注意点),具体可以看这里 liuchengxu/space-vim 。

注意点在这里:

很多人的一键运行可能大概长这样(可以看前面的回答):

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

可以直接把上面的 ! 换成 AsyncRun! 吗?答案是不可以,如果要达到之前的效果,应该要这样:

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

要用分号链接多条命令(linux)或者 & 链接多条命令(windows),具体可以看这个 issue Automatically manipulate the quickfix window? · Issue #22 · skywind3000/asyncrun.vim , 作者本尊也在知乎(大家肯定是谁),前辈的答疑还是非常耐心细致的~,值得一看。

番外:vim/vim patch 8.1.0877 解决了 quickfix 的 buffer number 会爆炸的问题,推荐升级。之前每次打开 quickfix 窗口都会新开一个 buffer, 使用 asyncrun.vim 你可能会发现 quickfix 的 buffer number (很多插件都有类似问题)会急速飙升, 现在不会了,vim 会对之前的 buffer 进行重用。

8. 照着 emacs-which-key 的风格,我重写了 hecal3/vim-leader-guide :liuchengxu/vim-which-key ,再搭配 LSP 体验应该更好了 :)

9. tagbar 替代品,在符号浏览上,不仅可以显示 tags, 还支持显示 LSP symbols。另外还有搜索的功能,支持用 fzf 进行过滤跳转。liuchengxu/vista.vim​github.comv2-e02251e3fbfe9b5dbad256ae80d2d379_ipico.jpg

10. ctrlp 替代品:liuchengxu/vim-clap​github.comv2-e02251e3fbfe9b5dbad256ae80d2d379_ipico.jpg

具体的 vim 配置在这里 (注意:这里进入广告时间),liuchengxu/space-vim (如果觉得补充的有用,可以顺便到 github 点个 star 支持下哈), 启用 ycmd, syntax-checking, programming, python Layer 就能达到上面的效果了。有人觉得主题不错,上图中使用的是 liuchengxu/space-vim-dark, 修改自 spacemacs-dark-theme.

Use Vim as a Python IDE 我写了一个英文版本,有些许内容不同,就不同步更新了,有兴趣的可自行查看。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值