百科问答小站 logo
百科问答小站 font logo



用 Vim 写 Python 的最佳实践是什么? 第1页

  

user avatar   simple_the_best 网友的相关建议: 
      

先来晒个图:

  1. 语法检查

如果用 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     

具体可以看这里 liuchengxu/space-vim

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

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

4. import 整理

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

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

ALE 现在也支持了代码格式化: Autofix support? (Javascript here, ESLint) · Issue #541 · w0rp/ale!安装好 isort, yapf, 在 .vimrc 中添加

       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 文本对象

github.com/jeetsukumara 提供了很多针对 Python 的文本对象,比如类,方法,函数等等。

6. 自动补全

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

NeoVim 可以尝试使用 Shougo/deoplete.nvimroxma/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-guideliuchengxu/vim-which-key ,再搭配 LSP 体验应该更好了 :)

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


10. ctrlp 替代品:

具体的 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 我写了一个英文版本,有些许内容不同,就不同步更新了,有兴趣的可自行查看。


user avatar   mingxinglai 网友的相关建议: 
      

当感情成为生活的一种负担而且无力改变的时候。

与女生不同,大多数男生是不会把感情当作生活的全部的,过日子是头等大事,感情只是其中一部分。所以对于男生来说,一段好的感情是能让生活更轻松的。

一个男生可能会因为你漂亮而喜欢你,但这种喜欢无非是荷尔蒙冲动无法长时间维系,真正能让男生愿意和你一辈子走下去的,是你能够理解他,能够支持陪伴,能够默契相处。

但就这一点上,很多女生都是在逆行。她们所期望的感情都是建立在对于男生的索取之上,她们会因为男朋友没有足够专注自己而去作,会因为男朋友没满足自己的需要而去闹,会频繁吵架提分手来试探这个男人是否足够爱自己,却忽略了这个过程中,自己一步步在抛掉自己值得被爱的筹码。

当男生觉得和你在一起,不但体会不到丝毫乐趣,反而成为一种负担的时候,其实就已经在积累失望了。但这个时候男生一般不会直接放弃,他们会尝试逃避,会尝试沟通,会寄希望于你能逐渐去改变。

所以有经验的女生应该知道,男人的态度变化是有个周期的,不会因为你和他吵几次而一下子和你分手,但是会逐渐冷漠下来,这个过程中他就是在开始怀疑是否真的合适,会希望看到你有所变化。然而往往女生在这个阶段,又会因为男生的逃避而更加变本加厉去作去闹,想要控制对方,最终形成恶性循环。

等到失望积累够了,也就变成绝望。他会判断你已经不会变了,无药可救了,再相处下去只会让那自己越来越累,最终决定分开,等你意识到问题所在时已经来不及了,这种理性思考下的分手,往往挽回难度也是比较大的。

很多女生整天担心男生变心不爱自己,但同时却又是亲手在不断把他往外推,想想还挺可笑的。




  

相关话题

  在2019年这个时候,总体而言,Python程序员是不是编程水平最差的程序员? 
  如何理解python的类与对象? 
  C、C++、Java、JavaScript、PHP、Python、Ruby 这些语言分别主要用来开发什么? 
  python爬虫如何处理.js链接? 
  为什么不同的死循环占用资源不同? 
  Python中一个字符串的所有字母用它的后继字母代替(比如,a用b代替,b用c代替),怎么搞? 
  pytorch ddp训练中一个node fail,导致整个训练失败,有可能解决吗? 
  如何在业余时学数据分析? 
  用 Vim 写 Python 的最佳实践是什么? 
  你见过哪些令你瞠目结舌的 Python 代码技巧? 

前一个讨论
文明6中随机地图是怎样一种机制?
下一个讨论
有这种小渣图吗?





© 2024-12-23 - tinynew.org. All Rights Reserved.
© 2024-12-23 - tinynew.org. 保留所有权利