使用Anaconda时让Vim8.2支持Python3(Win10)
补充
- 2020年4月18日:发现方案一会导致一些其他的问题,建议使用方案二。
遇到问题
从官方的GitHub里下载的Vim 64-bit。
可以看到,已经支持了python2和python3。
另外,我使用了coc-nvim来实现补全等高级功能。
Plug 'neoclide/coc.nvim', {'branch': 'release'}
coc-nvim提供了另一套功能扩展来提供更丰富的功能支持。支持的扩展在这里:https://www.npmjs.com/search?q=keywords%3Acoc.nvim。
我选择使用coc-snippets
来支持snippets,https://www.npmjs.com/package/coc-snippets。
它支持使用UltiSnips
的snippets,同时也支持使用UltiSnips
的大部分特性,包括使用python进行代码段的扩展。
根据手册[4]和文章[5],我简单写了一个小的片段:
snippet a_py "author's information" b
# @Time : `!p from datetime import datetime
if not snip.c:
snip.rv=datetime.now().strftime("%Y-%m-%d")`
# @Author : lartpang
# @FileName: `!v expand('%')`
# @Project : ${1:ProjectName}
# @GitHub : https://github.com/lartpang
endsnippet
但是以为没有做进一步python的配置,导致这里的python代码是没有办法执行的。
如何配置
方案一
主要满足以下两点即可:
- 系统里安装和VIM相同位数和版本(包括小版本)的
Python
- 环境变量里添加
PYTHONHOME
&PYTHONPATH
这里我们需要注意几条指令:
echo has('python')
echo has('python3')
python print "Hello"
python3 print("Hello")
前两条会返回0或1,可以表示:when Python 2 and 3 are both available and loaded dynamically, these has() calls will try to load them.
返回1的时候说明对应版本(2或3)的python是可以检测并且能动态载入的。一般来说,在我们开始配置前,这里的echo
返回的都是0,即并没有检测。
而第三条指令,是为了查找到我们需要安装的python小版本。如果报错,是会提示对应的版本,这时我们就可以安装对应的版本的python就可以。
python准备OK后(我使用的是Minicanda安装的,直接升级了主环境里的python),这时我们需要配置环境变量了。为了方便的处理,这里我们使用一款windows的软件:rapidee
https://www.rapidee.com/,这款软件可以很方便的修改调整系统和用户的环境变量:
我们在用户变量里添加两条新的变量:
分别指向我们安装好的python的目录即可。
此时我们再重新打开VIM,可以输出看看了:
这个时候我们再使用编写的脚本,可以看到已经能够展示时间了:
方案二
似乎Vim对于使用Miniconda安装的Python是无法检测到的,但是对于使用官网的Python安装包安装的Python确是可以检测到的。
所以我们可以这样处理:
- 首先安装Miniconda,这里推荐从https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/下载平时开发使用的版本。
- 安装Miniconda的时候,使用默认的勾选即可,不要添加到环境变量里(虽然我们将无法再终端直接调用Miniconda的主环境里的python,但是conda依然是可以使用的。
- 单独安装匹配Vim的Python版本,这里我安装的是windows的64 bit版本(要注意,直接下载是32 bit,你得进一步选择下)。
- 这里安装独立的Python的时候要勾选添加到环境变量里。
这样的流程之后,我们在终端里输入python,可以看到输出:
可知,这是官方的Python安装包对应的python。
但是激活子环境后,我们可以看到:
此时打开Vim看看:
同时我们的子环境也可以正常使用了。这种方式相当于我们不再使用Miniconda的子环境,而是仅仅使用其管理子环境的优势。
参考链接
- https://stackoverflow.com/questions/38132755/importerror-no-module-named-encodings/45667503#45667503
- 不重新编译,让官方网站下载的Vim支持Python: https://blog.zengrong.net/post/pyton_support_on_vim/
- vim无法完美支持Python2和Python 3: https://blog.youkuaiyun.com/qq_42672770/article/details/87108703
- https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt
- Creating Markdown Front Matter with Ultisnips: https://jdhao.github.io/2019/12/22/ultisnips_avoid_content_update/