从 vim 运行构建命令,将输出发送到另一个 tmux 窗格?

从 vim 运行构建命令,将输出发送到另一个 tmux 窗格?

我在用着多路复用器维姆作为我的开发IDE。我在 tmux 中打开了 3 个窗格:一个用于编辑源代码,一个用于调试,一个作为显示控制台。

我想从 Vim 运行该make命令并将其发出的所有构建信息发送到显示控制台窗格。我该怎么做呢?

答案1

您可以从一个窗格运行任何 shell 命令,并使用该run-shell命令在另一个窗格中显示其输出。例如:

tmux run-shell -t 2 "echo hello"

...并且“hello”将被打印到第 2 号窗格。您可以使用 来查看窗格编号prefix + q

vim你应该能够做到:

:!tmux run-shell -t 2 "make ..."

添加-b在后台运行命令。

更新:解决@SLN 提出的一些问题这条评论...

  • tmux将输出窗格放入复制模式,与滚动时的模式相同,因此请按照通常的方式打破它(Ctrl+C是一种方式)。注意:如果您[12/34]在窗格的右上角看到类似(即页数/总页数)的内容,则表明您处于此模式。
  • 至于 Vim 要求您在 或其他命令完成后点击Enter(或Ctrl+ L) make,这就是 Vim 处理外部命令的方式 ( :!cmd)。我不知道有什么方法可以避免这种情况,但我相信你可以Enter在命令完成之前点击,并且一旦完成它就会返回。 (这可能取决于系统。)

更新2:我确实知道第二项的解决方法。如果您使用映射来运行外部命令,则可以嵌入退出键。这是我只是ls按照 shell 命令执行的示例:

nnoremap <leader>ls :!ls<CR><C-L>

在正常模式下,我点击ls 命令,然后控制台输出将关闭并立即\ls返回。vim也许无论你的命令是什么,你都可以适应这一点。

答案2

你可以提前触摸一个文件 & tail -f file: 它在一个窗格中...所以在 vim 中启动 make 并将输出重定向到该文件,它将显示你的 make 会话...

相关内容