用于运行python代码的:pyf%和:!python%之间的区别

时间:2017-07-20 14:23:39

标签: python vim

我用来将 F9 映射到:pyf %以运行来自vim的python文件。但在阅读了这个answer之后,这表明了

nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>

只是想知道从vim会话运行python代码应该首选哪种方法。

2 个答案:

答案 0 :(得分:3)

:pyfile:python的变体(从文件读取代码,而不是直接参数)。两者都在Vim的嵌入式Python解释器中执行代码。这主要用于用Python编写的Vim插件。您可以访问Vim的Python接口(cp。:help python-vim),任何代码/全局变量都会一直存在,直到您退出Vim。

对于没有副作用的琐碎代码,这应该没问题,虽然它不适用于此。

:!python ...启动外部Python解释器,与Vim完全分开。 Vim甚至不需要在这里使用Python支持进行编译。由于每次调用都是一个单独的进程,因此运行之间没有持久性。每个都是新鲜的,就像直接从命令行启动脚本一样。此外,您正在使用系统的默认Python解释器,而不是编译的Vim。

除非您明确编写Vim插件,否则我会推荐这种方法。

答案 1 :(得分:2)

:pythonfile使用内置于vim的Python执行文件,因此脚本可以导入模块vim

!python执行无法访问vim内部的外部解释器。