我想从使用ctrl+b arrow-keys
选中的窗格中删除一个窗格。这是因为我有一个使用tmux clock-mode -t 2
显示时间的窗格,并且我永远都不想切换到该窗格。
答案 0 :(得分:0)
此解决方案与我在姊妹站点unix.stackexchange上回答的问题类似,但并不完美。
tmux在每个窗格上都有一个标志,说明它是否处于某种模式。例如,时钟模式下的窗格的display -p #{pane_in_mode}
打印1
。
不幸的是,您无法区分例如复制模式和时钟模式。但是,如果一次不可能有多个窗格 ,则可以编写一个小的Shell脚本来拦截相应的绑定,并测试最终的移动是否最终落入了模式。如果是这样,脚本将重复该移动,可能会移动到下一个窗口。
在PATH中创建以下文件mytmux
并使其可执行(chmod +x mytmux
):
#!/bin/bash
# https://stackoverflow.com/a/51232832/5008284
noclock(){
tmux "$@"
inmode=$(tmux display -p '#{pane_in_mode}')
[ "$inmode" = 1 ] && tmux "$@"
exit 0
}
case $1 in
-noclock)shift
: ${1?select-pane cmd and args}
noclock "$@" ;;
esac
然后在~/.tmux.conf
中设置以下绑定:
bind-key -T prefix o run-shell 'mytmux -noclock select-pane -t :.+'
bind-key -T prefix l run-shell 'mytmux -noclock select-pane -l'
bind-key -r -T prefix Up run-shell 'mytmux -noclock select-pane -U'
bind-key -r -T prefix Down run-shell 'mytmux -noclock select-pane -D'
bind-key -r -T prefix Left run-shell 'mytmux -noclock select-pane -L'
bind-key -r -T prefix Right run-shell 'mytmux -noclock select-pane -R'
例如,如果要处理多个会话,则需要扩展它。我将select-pane -l
放在了绑定中,但这没有用,就好像它重复了一样,只会回到您的起点。