tmux split-window 不改变焦点

tmux split-window without changing focus

有没有办法在不改变当前焦点的情况下在 tmux 中拆分 window?

我是 运行 我的一个 tmux 窗格中的一个脚本,偶尔运行 "tmux split-window ..." 一些命令需要一分钟才能完成,并且可能会请求输入。

我最终可能会尝试在其中一个 tmux 窗格中键入输入,但在我键入的过程中,原始窗格执行 "tmux split-window ..." 并且(中间词)我的光标移动到新窗格,并且我最终将部分输入输入到错误的窗格中。

注意:这个答案是正确的,但是已经过时了。正确的方法是对 split-window 命令使用 -d 标志。我留下这个答案是为了演示如何使用 tmux 剃掉牦牛毛。

tmux 提供的 split-window 命令标志将是解决此问题的正确方法。 很遗憾,tmux 没有提供这样的命令标志更新:有一个 -d split-window 标志可以做到这一点。

  • 简单的解决方法是在split-window:

    之后立即切换到上一个面板
    tmux split-window
    tmux last-pane
    

    这也可以写成一行:

    tmux split-window\; last-pane
    

    此解决方案的缺点是*理论上*如果您在 split-windowlast-pane 命令之间的时间间隔内键入字符,您最终可能会在错误的 window 中写入字符执行.

  • 这是另一种方法,缺点是它更复杂。

    在后台新建一个window并得到这个window的pane_id(注意这个命令是如何包裹在$(...)中的,因为我们希望它在一个子进程:

    pane_id=$(tmux new-window -d -P -F "#{pane_id}")
    

    现在将我们刚刚创建的 window 与光标所在的 window 连接起来(不会改变光标焦点):

    tmux join-pane -b -t "$pane_id"
    

    如果您想要水平分割,请在上面的 join-pane 中添加 -h

我建议采用第一种方法,因为它很简单。您不太可能遇到任何实际问题。