Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Vim中执行python脚本的行_Python_Vim - Fatal编程技术网

在Vim中执行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。但是,我认为这个函数没有

我刚刚开始在我的主IDE中使用Vim,我在前面的IDE中经常使用的函数之一是“在python中执行选择”

我了解到在python中执行代码有两种方法, 一个是
: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>)