![从 vim 运行构建命令,将输出发送到另一个 tmux 窗格?](https://linux22.com/image/125459/%E4%BB%8E%20vim%20%E8%BF%90%E8%A1%8C%E6%9E%84%E5%BB%BA%E5%91%BD%E4%BB%A4%EF%BC%8C%E5%B0%86%E8%BE%93%E5%87%BA%E5%8F%91%E9%80%81%E5%88%B0%E5%8F%A6%E4%B8%80%E4%B8%AA%20tmux%20%E7%AA%97%E6%A0%BC%EF%BC%9F.png)
我在用着多路复用器和维姆作为我的开发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 会话...