与 Vim 的模式类似,我希望 Tmux 保持“前缀模式”(你实际上怎么称呼它?)直到我按下 Esc,这样我就可以执行类似以下操作:
Prefix h j + +
代替
Prefix h Prefix j Prefix + Prefix +
并且不必担心计时器或过多的和弦。
答案1
我把这篇文章发布为问题并收到了这样的答复:
您可以重新绑定所有键以添加
switch-client -Tprefix
到每个命令序列的末尾,但没有自动化的方法来执行此操作。
这里的问题是,如果命令抛出错误,它将无法工作,但你可以通过使用
是的,错误将取消命令序列,你可以通过使用 run-shell 来解决这个问题,例如
run "tmux mycmd; tmux switch-client -Tprefix"
但这可能会隐藏错误的显示。
我的当前配置如下:
bind c new-window \; switch-client -T prefix
bind . command-prompt \; switch-client -T prefix
bind , copy-mode \; switch-client -T prefix
# Vim style splits
bind s split-window -v \; switch-client -T prefix
bind v split-window -h \; switch-client -T prefix
# Double tab to cycle panes
bind C-a select-pane -t :.+ \; switch-client -T prefix
据我所知,tmux 对不同的绑定使用不同的上下文。要指定在哪个上下文中使用绑定,可以使用bind <key> -T <context>
,其中前缀是默认值。您可以使用 切换上下文switch-client -T <context>
,因此我们所做的是在每个命令之后重新应用前缀。
该方法的缺点是:
- 你必须在每次绑定时明确地执行此操作
- 如果出现任何错误,它将返回正常模式(例如,当只有一个会话正在运行时尝试切换到下一个会话)
- 它会在任何非绑定键上退出,而不仅仅是 Esc。
奖金!你可以添加一个时髦的指示器,当你长时间处于前缀模式时,这非常有用,例如
set -g status-right "#{?client_prefix,#[reverse]● #[noreverse],#[reverse]○ #[noreverse]}"