Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.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
如何在vimscript中执行终端程序并在其关闭时执行操作_Vim - Fatal编程技术网

如何在vimscript中执行终端程序并在其关闭时执行操作

如何在vimscript中执行终端程序并在其关闭时执行操作,vim,Vim,我想编写一个执行以下操作的Vim命令: 进行新的拆分。 启动终端程序。 等待程序停止并关闭拆分。 将第二步中产生的输出读入原始缓冲区。 这似乎是一个非常常见的工作流程,但我很难让它正常工作。 问题在步骤3和4中。作为我定义的测试: function MyExitFunction(a,b,c) close read blah endfunction 后来: :new | call termopen('fzf>blah',{on_exit:MyExitFunction} 程序完成后

我想编写一个执行以下操作的Vim命令:

进行新的拆分。 启动终端程序。 等待程序停止并关闭拆分。 将第二步中产生的输出读入原始缓冲区。 这似乎是一个非常常见的工作流程,但我很难让它正常工作。 问题在步骤3和4中。作为我定义的测试:

function MyExitFunction(a,b,c)
  close
  read blah
endfunction
后来:

:new | call termopen('fzf>blah',{on_exit:MyExitFunction}
程序完成后,它会启动终端并关闭拆分。然而,read命令似乎没有任何作用。也许它将输入读取到错误的拆分中

我应该怎么做才能将实际的程序输出放入当前的缓冲区


注意,fzf不是我正在运行的实际程序,但它的工作原理有点像它。

如果您有一个干净地输出到stdout的命令,那么您只需要:read


如果您想要交互性,即首先从stdin读取,那么您可能应该在终端内使用:vs | te运行它,然后将输出拉过来。Vim没有一种干净、简单的方法来与交互式脚本进行互操作,因此这可能是最好的方法。

你的意思可能是:结尾的vert term?这也行,但都是一样的。只需打开一个垂直分割的终端,这就是我目前正在做的。我在终端启动我的程序,进入insert,使用它,退出insert,选择我需要的东西,猛拉它,关闭缓冲区并粘贴。这是相当多的工作。我想让它自动运行。