屏幕带有Ctrl+ A。另一方面,在屏幕内部开发的tmux使用Ctrl+ B。但是,两次击键也都在编辑器,外壳等中使用。因此,在tmux或屏幕上使用时,选择其中任一键都会降低这些工具的用户体验和功能。
什么前缀与其他程序和shell的键绑定冲突最少?
~/.tmux.conf
请不要忘记重启tmux服务器以使更改生效(superuser.com/q/188491/105108)。
屏幕带有Ctrl+ A。另一方面,在屏幕内部开发的tmux使用Ctrl+ B。但是,两次击键也都在编辑器,外壳等中使用。因此,在tmux或屏幕上使用时,选择其中任一键都会降低这些工具的用户体验和功能。
什么前缀与其他程序和shell的键绑定冲突最少?
~/.tmux.conf
请不要忘记重启tmux服务器以使更改生效(superuser.com/q/188491/105108)。
Answers:
我认为^\
(aka ^|
)在键盘布局上的方便位置是最好的。它在其他程序中的使用非常少见:
SIGQUIT
到流程^C
截获时中止shell中的for或while循环toggle-input-method
在emacs中我不知道有任何其他用途。小心不要意外终止适应该过程之外tmux
或screen
之后的进程。几年来,这件事只发生在我身上一次。
~/.tmux.conf
unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix
~/.screenrc
escape ^|^|
C-`. Can I escape the
以某种方式使用`字符?
'C-\'
在tmux配置中写而不是`C- \`。
对于想在tmux中使用反引号作为转义符的人,您将需要添加:
unbind C-b
set -g prefix `
bind-key ` send-prefix
最后一个很重要,否则您不能为其他目的输入反引号:-)
$()
在shell中后,它开始引起麻烦。一旦您开始编写大量Markdown,这也会变得很痛苦。我已经使用了几年了,但是不幸的是我现在必须对其进行更改。
bind-key C-a set-option -g prefix C-a
。每当我需要使用反引号时,我都会按一下`-Ctrl-a
以将前缀设置为C-a
。我有bind-key C-b set-option -g prefix `
这样我就可以打C-a-C-b
回去
还已知Ctrl + A会导致Emacs出现问题,包括Emacs模式下的Bash。听起来这对您来说不是问题。
Ctrl + O是我见过的另一个选项。显然,这是RatPoison中的默认设置(这是X窗口管理器,不需要鼠标)。使用嵌套屏幕时,我已使用Ctrl + O:外部的Ctrl + O和内部的Ctrl + A。工作得很好,但我的同事还是有些害怕。:-)
我只是在想,如果您使用vi而不是Emacs,则有几种选择。例如,Ctrl + G很少使用。
set -g prefix2 C-j; bind-key C-j send-prefix -2
C-j
与CtrlP冲突。在缓冲区列表中上下移动分别使用C-k
和C-j
我使用复杂的屏幕系统。我的默认转义设置为\ 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
在执行剪切和粘贴操作时,这会将换码转换为Ctrl-O。我发现击中两次刻度很简单,并且对于大多数屏幕操作来说都是一个不错的折衷。
使用更新的解决方案重新审视此答案,该解决方案允许通过按F12并使用标题指示模式来切换模式。
## command characters
escape \140\140 # default is `
## sets caption and escape toggle
bindkey -d -k F2 process a # bound to F12
## initial caption
caption always '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{-b .c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '
## registers to toggle bindkeys
register a "\140:eval 'bindkey -d -k F2 process b' 'process c' 'escape \\017\\017'^M"
register b "\017:eval 'bindkey -d -k F2 process a' 'process d' 'escape \\140\\140'^M"
## registers to change captions
register c "\140:caption string '%{= kW}%?%F%{+b mW}%:%{= kK}%? %= %?%F%{.c}ALT%{-}%? | %-w%{KW}%n* %t%? @%u%?%{-}%+w '^M"
register d "\017:caption string '%{= kW}%?%F%{+b KW}%:%{= kK}%? %= %?%F%{.c}>>>%{-}%? | %-w%{mW}%n* %t%? @%u%?%{-}%+w '^M"
我用Ctrl-Q
的tmux
,它至今运作良好。不过,我不得不提的是,它与Shell流控制冲突。默认情况下,Ctrl-Q
用于通过停止输出后重新启用输出Ctrl-S
。Ctrl-S
我意外撞了几次壳后感到惊讶,我学会了不要压Ctrl-S
。
(也可以完全关闭流量控制stty -ixon
,或将不同的键绑定到stty start
和stty stop
。)
# tmux.conf
unbind C-b
set -g prefix C-q
quote-inserted
。使用示例(在emacs中):如果我想搜索下一个制表符<Ctrl-s>+<Ctrl-q>+<TAB>
我喜欢保留^Space
非常特殊/常见的操作,因为我发现它是最容易键入的前缀,但是现在我正在尝试将其映射为prefix
in tmux。
它使您的手指可以立即跳到您要键入的命令。试试看。
set -g prefix2 C-j; bind-key C-j send-prefix -2
迟来的建议: ctrl-s
。 ctrl-s
有许多优点:
ctrl-a
(实际上,对于大多数打字员来说,它们将使用与原来使用的相同的两个手指ctrl-a
),因此从ctrl-a
到的肌肉记忆切换ctrl-s
是微不足道的-对我来说,它在第一次尝试后约一个小时内就变成了第二自然。ctrl-a
emacs风格的“返回到行首”或vim风格的“递增编号”操作。或者,嘿,要在tmux窗格中运行屏幕,而不必担心转义前缀字符来控制嵌入式屏幕实例。(我经常使用带有包含到远程服务器的ssh会话的窗格的本地tmux来执行此操作,在其中运行屏幕)当然,在ctrl-s上没有任何内容的原因是,在终端中,传统上将其用于流控制,其历史可追溯到诸如more
和的分页工具less
普及之前。我敢肯定,某些地方的GUI终端程序仍然默认启用了流控制功能,但实际上并没有碰到过;默认情况下,我尝试过的gui终端程序似乎完全忽略了它,这使该便捷的组合键可用于更有效的使用。
因此,如果您实际上不是从(例如)原始Linux终端内部而是使用基于GUI的终端来使用screen / tmux,那么建议您ctrl-s
尝试一下;它使得在tmux中滑动和浏览对我来说更加方便。
没有冲突的键可能是C-z,因为它通常用于将程序发送到后台以在启动它的shell上继续执行其他操作。我有tmux时不这样做。
fg
在错误键入Cz之后不得不花费很多时间。
我听说使用`(反引号),然后您只需要键入两次就可以进行实际反引号。对于习惯了该操作的vi用户来说可能会更好(除非您执行Caps锁定操作)。
'; bind '
'发送前缀; 请参阅上方的Darren Hall的答案。
对于Programmer Dvorak键盘布局,使用减号(dash)键作为前缀(即ctrl
+ )非常简洁-
。
负键位于qwerty布局中的单引号键位置。另外,我将大写锁定键功能用作ctrl键。以下是一个tmux conf,将其设置为前缀:
unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window
您可能想知道,为什么使用下划线代替负号?请参阅Tmux:如何绑定到C-(控制减号)?
对于qwerty,您可以应用如何将tmux前缀键绑定到C-'?解决方案,以保留相同的快捷方式。
我想说的是,如果您使用Vim / Neovim,这是一个完美的前缀。因为前缀,例如ctrl
+ a
或ctrl
+ b
,都会以两种方式屏蔽Vim的功能(重叠)。
就我个人而言,b
距离太远了Ctrl
。当我使用tmux时,我总是将Cb的绑定更改为Ca。与Ca的主要冲突是全选,但我尚未发现与tmux一起使用的程序有问题。
我使用的是Caps Lock,在OSX上,您需要做一些特殊的事情才能使其正常工作。
您可以使用反引号。tmux的某些较旧版本不支持反引号,因此您可以执行以下解决方法(尽管会同时将C-,C- @和C-space添加为您的meta):
# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window
我通常将CapsLock重新映射为Ctrl,因此使用反引号更加有意义。
我喜欢将ctrl- \作为前缀绑定的建议,但是为了使它在Linux Mint 12上能够正常工作,我不得不将绑定的位置放到底部。否则,它将不会。在这里查看我的.tmux.conf:在emacs和vim上同时使用tmux