在 Vim 中执行 python 行脚本

Execute line(s) of python script in Vim

我刚开始使用 Vim 作为我的主要 IDE,而我在之前的 IDE 中经常使用的功能之一是“在 python 中执行选择”。

我了解到 python 中的代码有两种执行方式, 一个是 :python3 {expression} 另一个是 :w python3

我想做的是在 vim 中执行选定的脚本行而不刷新(关闭)python 控制台。

看起来:python3 {expression}没有关闭python控制台,所以在我使用:python3 a=3之后,命令:python3 print(a) returns适当的值3.但是,我认为这个功能没有“选择功能”。虽然 :help python 显示了 [range] 参数,但我无法理解如何使用它。

另一方面,第二个函数具有选择功能(例如 :1,3w !python3),但似乎每次我使用该函数时 python 控制台都会刷新(=关闭)。

我想在 .vimrc 中添加简单的函数可以满足我的目的,但找不到。 非常感谢任何帮助!

我不明白这个问题。 命令

:1,3w !python3

应该可以解决这个问题,您所说的“python 每次我使用该功能时控制台都在刷新”到底是什么意思?如果你的意思是,它等待按下回车键返回 vim,这是很自然的。

您还可以使用:

:'<,'>w !python3

虽然之前使用可视模式 select 某些代码块。您想在新终端中执行代码吗window?

找到答案了!

我通过简单的自定义命令解决了这个问题。

python3 << EOL
import vim

def ExecuteSelectedLine(l1, l2):
    for i in range(l1-1,l2):
        print(">>" + vim.current.buffer[i])
        exec(vim.current.buffer[i],globals())
EOL
command! -range Eval <line1>,<line2> python3 ExecuteSelectedLine(<line1>, <line2>)

使用方法

  • 运行 python :1,3Eval
  • 中只有第 1 到第 3 行脚本
  • 运行 当前行在 python :Eval
  • 运行 python :'<,'>Eval
  • 中视觉选择的部分脚本

范围选择与 -range 选项一起使用,并使用 python 的“exec”函数和 globals() 选项,持久性保持不变(无刷新)。

我想我的编码风格(在控制台中尝试不同的代码片段并最终确定主脚本)是一种奇怪的编码方式,因为我在社区中找不到类似的尝试。

感谢大家!