:pyf % 和 :!python % 运行 python 代码的区别

dlm*_*tei 2 python vim

我使用映射F9:pyf %vim. 但是在阅读了这个答案之后,这表明

nnoremap <buffer> <F9> :exec '!python' shellescape(@%, 1)<cr>
Run Code Online (Sandbox Code Playgroud)

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

Ing*_*kat 5

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

对于没有副作用的微不足道的代码,这应该没问题,尽管它不是为了那个。


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

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