屏幕或 tmux 冲突最少的前缀/转义序列是什么?

Flo*_*low 112 hotkeys gnu-screen tmux

屏幕带有Ctrl+ A。另一方面,在 screen 中开发的 tmux 使用Ctrl+ B。然而,这两种击键也用于编辑器、shell 等。因此,在 tmux 或 screen 中使用时,选择其中任何一种都会降低这些工具的用户体验和功能。

什么前缀与其他程序和 shell 的键绑定冲突最少?

小智 57

对于想要在 tmux 中使用反引号作为转义符的人,您需要添加:

unbind C-b
set -g prefix `
bind-key ` send-prefix
Run Code Online (Sandbox Code Playgroud)

最后一个很重要,否则你不能为其他目的输入反引号:-)

  • @Synchro 在 tmux 1.8 上不再是问题,这要归功于默认情况下启用的假设粘贴时间选项(设置为 1 毫秒)。见这里:http://sourceforge.net/p/tmux/tmux-code/ci/5fe0576dcbf47954957007296839e43471b088f9/tree/tmux.1#l2134 (4认同)
  • 在 .tmux.conf 我也有`bind-key Ca set-option -g prefix Ca`。每当我需要使用反引号时,我都会点击 `\`-Ctrl-a`,它将我的前缀设置为 `Ca`。而且我有 `bind-key Cb set-option -g prefix \`` 所以我可以点击 `CaCb` 返回 (4认同)

小智 56

我认为^\(又名^|)是最好的,如果它在您的键盘布局上方便的位置。它在其他程序中的使用非常罕见:

  • 发送SIGQUIT到进程
  • ^C拦截时中止 shell 中的 for 或 while 循环
  • toggle-input-method 在 emacs 中

不知道还有什么其他用途。小心不要意外杀死进程之外tmuxscreen习惯之后。不过,这几年只在我身上发生过一次。

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix
Run Code Online (Sandbox Code Playgroud)

~/.screenrc

escape ^|^|
Run Code Online (Sandbox Code Playgroud)

  • 但后来我习惯了那个命令,当我忘记我在屏幕上时,我开始不小心发送 SIGQUITs ...... (15认同)
  • “C-\”是一个糟糕的前缀键,因为围绕它构建肌肉记忆会导致您在使用未以这种方式配置的 tmux 时无意中发送“SIGQUIT”。如果我们要隐藏进程控制键组合,那么“Cz”是一个更良性的选择。 (5认同)
  • “如果它在您的键盘布局上处于方便的位置”默认情况下不是,您是否暗示您正在使用一些流行的重新映射使 C-\ 方便? (3认同)
  • 只是为了让其他人知道,您应该在 tmux 配置中编写 `'C-\'` 而不是 `C-\`。 (2认同)
  • 完成后不要忘记 'tmux source-file /path/to/tmux.conf' 以尝试新设置 (2认同)

小智 21

Ctrl+A也已知会导致 Emacs 出现问题,包括 Emacs 模式下的 Bash。听起来这对你来说不是问题。

Ctrl+O是我见过的另一种选择。显然,这是RatPoison 中的默认设置(这是一个不需要鼠标的 X 窗口管理器)。我Ctrl+O在使用嵌套屏幕时使用过:Ctrl+O用于外部屏幕和Ctrl+A内部屏幕。效果很好,但有点吓到我的同事。:-)

我只是在想,如果您使用 vi 而不是 Emacs,还有一些选择。Ctrl+G例如,没有被很多人使用。

  • 我同意@MuQiao。Ctrl-o 在 Vim 中用于跳转到较旧的光标位置(相当于许多 IDE 中的后退按钮),这是我在 Vim 中浏览代码时经常使用的功能。Ctrl-b 与 Vim 中的 PageUp 同义。我在 Vim 上根本不使用 Ctrl-b。所以对于像我这样的 Vim 用户来说,Ctrl-b 仍然是比 Ctrl-o 更好的选择。我使用 Cj 作为我的前缀键,因为 Cj 与 Vim 中的 j 或 <Down> 同义,并且没有人使用 Cj 在 Vim 中向下移动一行。我的 ~/.tmux.conf 中有这个:`set -g prefix2 Cj; 绑定密钥 Cj 发送前缀 -2` (15认同)
  • 我认为 Ctrl+O 会破坏 vim (11认同)
  • 对于 Emacs 用户 Ctrl+O 似乎是最好的选择:在 emacs 中它只是“在光标处打开一个新行”,而在 bash 中“重复命令序列”。 (9认同)
  • +1 如果您可以使用右手 ctrl 操作,这看起来是一个不错的备份。我自己是左撇子;-) (2认同)

小智 15

我已经CAPS-LOCK全局映射到ESC. 然后,我使用M-Space(ie. CAPS-LOCK+ Space) 作为我的前缀。


sim*_*air 13

我使用Ctrl-Qtmux,到目前为止效果很好。不过,我不得不提一下,它与 shell 流控制相冲突。默认情况下,Ctrl-Q用于在用 停止输出后重新启用输出Ctrl-S。在意外击中后几次被卡住的外壳感到惊讶后Ctrl-S,我学会了不按Ctrl-S

(也可以使用 完全关闭流量控制stty -ixon,或者将不同的键绑定到stty startstty stop。)

# tmux.conf
unbind C-b
set -g prefix C-q
Run Code Online (Sandbox Code Playgroud)

  • 在 emacs 中用于 `quote-inserted`。示例使用(在 emacs 中):如果我想搜索下一个制表符 - `<Ctrl-s>+<Ctrl-q>+<TAB>` (2认同)

Dar*_*all 12

我使用复杂的屏幕系统。我的默认转义设置为 \140\140,这是反引号。这Ctrl-A使我在 Zsh 中的 Emacs 和命令行编辑变得复杂,我不喜欢Ctrl-O(大多数屏幕操作的 2 手操作)。

我将 's' 重新绑定到屏幕 1,以便在键盘上从左到右创建新会话,从 1 开始。这允许我为我认为持久或参考窗口保留屏幕 0。一个手势到 (backtick)1, (backtick)2, (backtick)3 在窗口之间切换是非常快速的。

在 Unix 环境中使用反引号的问题是在尝试剪切和粘贴 shell/Perl 脚本代码时。出于这个原因,我绑定了F11/F12在我的转义字符之间切换。

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12
Run Code Online (Sandbox Code Playgroud)

Ctrl-O当我进行剪切和粘贴操作时,这会将转义交换为for。我发现点击双勾很简单,而且对于大多数屏幕操作来说是一个很好的折衷方案。

使用更新的解决方案重新审视此答案,该解决方案允许通过点击 来切换模式F12,并使用标题来指示模式。

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12
Run Code Online (Sandbox Code Playgroud)


ter*_*ace 7

我喜欢保留^Space非常特殊/常见的操作,因为我发现它是最容易输入的前缀,但现在我正在尝试将其映射为prefixin tmux

它让您的手指自由地立即跳转到您想要输入的命令。试一试。

  • 这并没有持续多久——我又回到了 ^j。^Space 与我用来调用 OSX 级应用程序(Spotlight、QuickSilver、DTerm)的命令太相似了。 (4认同)

Tre*_*ell 6

一个迟来的建议: ctrl-sctrl-s有很多优点:

  1. 在主排。
  2. 仍然接近ctrl-a(事实上​​,对于大多数打字机来说,它会使用与之前相同的两个手指ctrl-a),所以从ctrl-a到的肌肉记忆切换ctrl-s是微不足道的——对我来说,它在第一次尝试后大约一个小时内就变成了第二天性。
  3. 腾出ctrl-a的emacs风格“回行开始”或者vim式“增量号”业务。或者嘿,用于在 tmux 窗格内运行 screen 而无需担心转义前缀字符来控制嵌入的屏幕实例。(我经常使用带有包含到远程服务器的 ssh 会话的窗格的本地 tmux 来执行此操作,我在其中运行 screen)
  4. 不会覆盖或添加任何其他常用终端功能的转义要求。 今天绝大多数人使用的任何东西都不是ctrl-s!

当然,ctrl-s 上没有任何东西的原因是在终端中,它传统上用于流量控制,可以追溯到像这样的分页工具之前more并且less很常见。我确信某个地方的某个 GUI 终端程序仍然默认启用了流程控制功能,但我实际上并没有碰到过;默认情况下,我尝试过的 gui 终端程序似乎都完全忽略了它,这使得方便的组合键可用于更高效的用途。

因此,如果您实际上不是在(例如)原始 Linux 终端中使用 screen/tmux,而是从基于 GUI 的终端中使用,那么我建议您ctrl-s尝试一下;它使在 tmux 和 screen 中压缩对我来说更方便。

  • Ctrl-s 是向前搜索,因为当我用 Ctrl-r 走得更远时:) (4认同)

小智 5

一个没有冲突的键可能是C-z,因为它通常用于将程序发送到后台以在启动它的 shell 上继续另一件事。当我有 tmux 时,我不会这样做。