从Vim在另一个shell中执行命令

4
我在开发工作流中使用两个监视器,一个是全屏Vim编辑会话,另一个是全屏终端,在其中运行make && ./test以显示结果。相当频繁地,我会在后台打开一堆其他窗口(浏览器、更多的shell等)。我不喜欢这样做有几个原因:
  • 我不喜欢记住我必须按多少次tab键才能获得我的make窗口。
  • 在Ubuntu中,没有强烈的视觉反馈来确定当前焦点在哪个窗口。我可能可以解决这个问题,但这是另一个问题。
  • 老实说,我很懒,:w alt-tab up-arrow enter alt-tab太多按键了。

我认为一个好的解决方案可能是有一个Vim命令在另一个窗口中运行make && ./test,但我想不出如何做到这一点。我可以编写一个服务器/客户端脚本,等待一些来自vim的通知然后运行命令,但它真的看起来应该有一个更简单的解决方案。有什么想法吗?


1
请参见http://www.drbunsen.org/text-triumvirate.html了解更多上下文信息,查看https://github.com/benmills/vimux。 - Jim Deville
它并没有完全回答你的问题,但是我编写了一个vim脚本来在后台运行构建并保持对vim的控制。也许它会给你一些启示:http://www.vim.org/scripts/script.php?script_id=1391 - jheddings
1
我不想听起来很精英主义,但你在错误地使用vim。Vim有一个内置的make命令(尝试:make),一旦make完成而没有错误,你可以紧接着使用:!./test。:make vim命令的关键是它支持将make命令中的错误解析为快速修复列表,这也是我首选vim的前十大原因之一。 - ldog
1
不会说“使用vim错误”,更像是“错过了一个超酷的功能”。 - Michael Berkowski
是的,我知道 :make:!cmd。但它们不能帮助我在另一个屏幕上显示结果,这正是我想要做的。这只是个人喜好,我并不真的喜欢快速修复列表。 - Alex
1个回答

2
感谢Jim的评论让我开始。这是我现在正在做的事情:
在第一个监视器上: tmux new-session -s dev (创建名为dev的新tmux会话)
在第二个监视器上:tmux new -t dev(连接到该新会话)
在第二个监视器上:Ctrl-b + c(创建一个新窗口)
forked vimux并编写了将命令发送到另一个窗口的函数。因此,现在在vim中,我可以使用:call VimuxRunCommandWin("make && ./test")
我想这可能已经足够拖延一天了...

为什么不在一个tmux会话中使用两个垂直面板呢?可以使用Ctrl-b + %实现。 - romainl
我不喜欢将窗口拉伸到两个屏幕上。无论如何,我只需要添加大约两个函数就能得到我所需的内容。 - Alex
通过创造新的东西并分享它来解决自己的问题,这是一个很棒的做法。 - Cheezmeister

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接