tmux分割窗口没有改变焦点

End*_*nis 5 tmux

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

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

我最终可能会尝试在其中一个tmux窗格中输入输入,但在我打字的过程中,原始窗格执行"tmux split-window ..."和(mid word)我的光标移动到新窗格,而我最终在错误的窗格中输入部分输入.

小智 6

注意:这个答案是正确的,但已经过时了.正确的方法是使用-dflag作为split-window命令.我将离开这个答案作为演示如何用tmux做一些牦牛剃须.

split-window由TMUX提供命令标志将是这个正确的解决方案.不幸的是,tmux没有提供这样的命令标志.更新:有一个-d split-window标志可以做到这一点.

  • 简单的解决方案是在以下后立即切换到上一个窗格split-window:

    tmux split-window
    tmux last-pane
    
    Run Code Online (Sandbox Code Playgroud)

    这也可以写成一个班轮:

    tmux split-window\; last-pane
    
    Run Code Online (Sandbox Code Playgroud)

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

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

    在后台创建一个新窗口并获取pane_id此窗口的内容(注意如何包装此命令,$(...)因为我们希望它在子进程中执行:

    pane_id=$(tmux new-window -d -P -F "#{pane_id}")
    
    Run Code Online (Sandbox Code Playgroud)

    现在使用光标所在的窗口加入我们刚刚创建的窗口(不会更改光标焦点):

    tmux join-pane -b -t "$pane_id"
    
    Run Code Online (Sandbox Code Playgroud)

    如果要进行水平拆分,请添加-hjoin-pane上面.

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

  • 不会`拆分窗口-d`工作? (2认同)