在Vim中执行python脚本的行
我刚刚开始在我的主IDE中使用Vim,我在前面的IDE中经常使用的函数之一是“在python中执行选择” 我了解到在python中执行代码有两种方法, 一个是在Vim中执行python脚本的行,python,vim,Python,Vim,我刚刚开始在我的主IDE中使用Vim,我在前面的IDE中经常使用的函数之一是“在python中执行选择” 我了解到在python中执行代码有两种方法, 一个是:python3{expression},另一个是:w python3 我想做的是在vim中执行脚本的选定行,而不刷新(关闭)python控制台。 看起来:python3{expression}没有关闭python控制台,所以在我使用:python3 a=3之后,命令:python3 print(a)返回正确的值3。但是,我认为这个函数没有
:python3{expression}
,另一个是:w python3
我想做的是在vim中执行脚本的选定行,而不刷新(关闭)python控制台。
看起来:python3{expression}
没有关闭python控制台,所以在我使用:python3 a=3
之后,命令:python3 print(a)
返回正确的值3
。但是,我认为这个函数没有“选择功能”。虽然:help python
显示了[range]
参数,但我不明白如何使用它
另一方面,第二个函数具有选择功能(例如,:1,3w!python3
),但每次使用该函数时,python控制台似乎都会刷新(=关闭)
我想向.vimrc添加简单函数就可以了,但找不到。
任何帮助都将不胜感激 我不明白这个问题。 命令 应该这样做,您所说的“python控制台每次使用该函数时都在刷新”到底是什么意思?如果您的意思是,它等待按下enter键返回到vim,这是很自然的 您也可以使用:
:'<,'>w !python3
:”找到了答案
我通过制作一个简单的自定义命令解决了这个问题
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>)
python3-Eval
范围选择使用-range选项,并使用python的“exec”函数和globals()选项,持久性保持不变(无刷新)
我想我的编码风格,在控制台中尝试不同的代码片段并完成主脚本,是一种奇怪的编码方式,因为我在社区中找不到类似的尝试
谢谢大家 我指的是先前执行的的结果!python
命令在关闭终端后消失。例如,如果有两行代码a=3
print(a)
,我执行第一行代码:1w!python3
然后是第二行:2w!python3
,第二个命令将返回错误,即没有名为a.Hmm的变量。。我认为你不能用它做任何事情,因为它只执行某些行。我知道你的意思,你可能想要得到与用Python的空闲语言编写时相同的结果,所以变量被写在内存中的某个地方,以备以后使用,对吗?据我所知,它只作为执行行工作,所以除非在执行print函数之前提供一个值声明,否则它将无法访问这个特定的值。我很了解你吗?是的,你说得很对!我通常会放弃,但是:py3
命令保存了我想要的变量,所以我正在研究这个问题。
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>)