用 Vim 写 Python 的最佳实践

先来晒个图:

用 Vim 写 Python 的最佳实践

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

语法检查

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

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

立即学习“Python免费学习笔记(深入)”;

用 Vim 写 Python 的最佳实践

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

用 Vim 写 Python 的最佳实践

用 Vim 写 Python 的最佳实践

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, 像下面这样 = 就能对当前文件进行格式化:

autocmd FileType python nnoremap = :0,$!yapf

登录后复制

自动补全

这一点因为我主要还是使用 vim, 因此用的 YouCompleteMe, 实际后端用的是已经提到的 jedi-vim. 如果不喜欢 ycmd, 使用 neovim 的可以尝试使用 deoplete.nvim .

import 整理

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

autocmd FileType python nnoremap i :!isort %

登录后复制

一键运行

这个可以通过 skywind3000/asyncrun.vim 来增强, 把之前的 ! 换成 AsyncRun! 就好了. 其实还是有些小小的注意点:

很多人的一键运行可能大概长这样:

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

登录后复制

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

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

登录后复制

要用分号链接多条命令(linux)或者 & 链接多条命令(windows),具体可以看 这里。

具体完整的 vim 配置在这里: >>> space-vim (觉得写得不错的话可以顺便到 github 点个 star

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2280059.html

(0)
上一篇 2025年2月27日 17:46:21
下一篇 2025年2月27日 17:46:38

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • Python全栈之路系列之赋值与运算符

    在继续下面的文章之前我们先来浏览一下python为我们提供的几种运算符,定义两个变量,分别是a和b,a的值是10,b的值是20。 算术运算符 运算符 描述 实例 +加,两个对象相加a+b=30-减,两个对象相减,可能会得到负数a-b=-10…

    编程技术 2025年2月27日
    200
  • Python标准库之functools/itertools/operator

    引言 functools, itertools, operator是Python标准库为我们提供的支持函数式编程的三大模块,合理的使用这三个模块,我们可以写出更加简洁可读的Pythonic代码,接下来我们通过一些example来了解三大模块…

    编程技术 2025年2月27日
    200
  • 关于Python元祖,列表,字典,集合的比较

    下面小编就为大家带来一篇关于python元祖,列表,字典,集合的比较。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 定义方法列表可以包含不同类型的对象,可以增减元素,可以跟其他的列表结合或者把一个列表拆分,用…

    编程技术 2025年2月27日
    200
  • Python网络爬虫出现乱码问题的解决方法

    这篇文章主要为大家详细介绍了python网络爬虫出现乱码问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 关于爬虫乱码有很多各式各样的问题,这里不仅是中文乱码,编码转换、还包括一些如日文、韩文 、俄文、藏文之类的乱码处理,因…

    编程技术 2025年2月27日
    200
  • Python学习【第一篇】Python简介

    python介绍 发展史 Python 2 or 3? 一、 python介绍   python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚…

    编程技术 2025年2月27日
    200
  • Python自动化运维课程学习

    本文为参加老男孩python自动化运维课程第一天学习内容的总结。 大致内容如下:   Python介绍       第一个Python程序: Hello World       Python变量 立即学习“Python免费学习笔记(深入)”…

    2025年2月27日 编程技术
    200
  • python排序sort()与sorted()

    应用举例: 1.按照字母表输出一个序列 2.对记录的多个字段排序等 常用排序函数: sort() 立即学习“Python免费学习笔记(深入)”; sorted() 比较: 1.sorted()应用范围更广 sorted(iterable[,…

    编程技术 2025年2月27日
    200
  • Python,OpenGL生命游戏

      初学python和opengl,练手的第一个小程序life.py,这个小程序在日后会不断调整,增加类、优化判断及操作   执行效果:     按正规生命游戏的规则:       1、周围生命等于3时产生生命       2、周围生命等于…

    2025年2月27日
    200
  • python使用电子邮件模块smtplib的方法

    smptp类定义:smtplib.smtp(host[,port[,local_hostname[,,timeout]]]),作为smtp的构造函数,功能是与smtp服务器建立连接,在连接成功后,就可以向服务器发送相关请求,比如登陆,校验,…

    2025年2月27日
    200
  • 举例详解Python中smtplib模块处理电子邮件的使用

    在基于互联网的应用中,程序经常需要自动地发送电子邮件。如:一个网站的注册系统会在用户注册时发送一封邮件来确认注册;当用户忘记登陆密码的时候,通过邮件来取回密码。smtplib模块是python中smtp(简单邮件传输协议)的客户端实现。我们…

    编程技术 2025年2月27日
    200

发表回复

登录后才能评论