我可以让 Tmux 保持“前缀模式”直到我按下 Esc 键吗?

我可以让 Tmux 保持“前缀模式”直到我按下 Esc 键吗?

与 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]}"

相关内容