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

Jak*_*kob 5 tmux

与 Vim 的模式类似,我希望 Tmux 保持在“前缀模式”(你实际上称之为什么?)直到我点击 Escape,这样我就可以做类似的事情

Prefix h j + +

代替

Prefix h Prefix j Prefix + Prefix +

不必担心计时器或过度和弦。

Jak*_*kob 3

我将此作为问题发布并收到以下答案:

\n
\n

您可以重新绑定所有键以添加switch-client -Tprefix到每个命令序列的末尾,但没有自动方法可以执行此操作。

\n
\n

这里的问题是,如果命令抛出错误,它将不起作用,但您可以通过使用来解决它

\n
\n

是的错误将取消命令序列,您可以使用 run-shell 来解决这个问题,例如

\n

run "tmux mycmd; tmux switch-client -Tprefix"

\n

但这可能会隐藏错误的显示。

\n
\n

我当前的配置如下所示:

\n
bind c new-window \\; switch-client -T prefix\nbind . command-prompt \\; switch-client -T prefix\nbind , copy-mode \\; switch-client -T prefix\n\n# Vim style splits\nbind s split-window -v \\; switch-client -T prefix\nbind v split-window -h \\; switch-client -T prefix\n\n# Double tab to cycle panes\nbind C-a select-pane -t :.+ \\; switch-client -T prefix\n
Run Code Online (Sandbox Code Playgroud)\n

据我所知,tmux 对不同的绑定使用不同的上下文。要指定在哪个上下文中使用绑定,请使用bind <key> -T <context>,其中 prefix 是默认值。您可以使用 切换上下文switch-client -T <context>,因此我们要做的就是在每个命令之后重新应用前缀。

\n

这种方法的缺点是:

\n
    \n
  • 你必须在每个绑定上显式地执行此操作
  • \n
  • 如果出现错误,它将返回正常模式(例如,当只有一个会话正在运行时尝试切换到下一个会话)
  • \n
  • 它会通过任何非绑定键退出,而不仅仅是 Esc。
  • \n
\n

奖金!您可以添加一个时髦的指示器,当您长时间处于前缀模式时,这非常有帮助,方法是使用类似的东西

\n

set -g status-right "#{?client_prefix,#[reverse]\xe2\x97\x8f #[noreverse],#[reverse]\xe2\x97\x8b #[noreverse]}"

\n