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


96

屏幕带有Ctrl+ A。另一方面,在屏幕内部开发的tmux使用Ctrl+ B。但是,两次击键也都在编辑器,外壳等中使用。因此,在tmux或屏幕上使用时,选择其中任一键都会降低这些工具的用户体验和功能。

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


6
“哪一个与其他程序的冲突最少?” 与意见无关。
iconoclast

更改后,~/.tmux.conf请不要忘记重启tmux服务器以使更改生效(superuser.com/q/188491/105108)。
ks1322

替代使用前缀:现在,某些终端通过“ tmux -CC”(即,适用于macOS的iTerm2)提供tmux集成。这样,tmux窗口在终端中显示为选项卡。然后,您可以使用按键绑定来管理与任何终端程序不冲突的选项卡,即使用cmd按键(又名超级按键,Windows按键)。
cjay

Answers:


48

我认为^\(aka ^|)在键盘布局上的方便位置是最好的。它在其他程序中的使用非常少见:

  • 发送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

~/.screenrc

escape ^|^|

我试过了,但是tmux抱怨C-`. Can I escape the 以某种方式使用`字符?
杰森

2
只是让其他人知道,您应该'C-\'在tmux配置中写而不是`C- \`。
gns-ank 2014年

2
不要忘了“TMUX源文件/path/to/tmux.conf”说完尝试新的设置时
user72923

12
但是后来我习惯了该命令的习惯,当我忘记自己在屏幕上时,我开始不小心发送了SIGQUIT ...
Kache 2015年

3
默认情况下,“如果它在键盘布局上处于方便的位置”则不是,这是否意味着您正在使用一些流行的重新映射功能,从而使C- \方便使用?
storypixel '17

52

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

unbind C-b
set -g prefix `
bind-key ` send-prefix

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


在您粘贴一些SQL之前,Backtick似乎是一个好主意……
Synchro

3
在tmux 1.8上使用@Synchro不再是问题,这要归功于默认情况下(设置为1ms)的假定粘贴时间选项。看到这里:sourceforge.net/p/tmux/tmux-code/ci/…–
生病了

我发现这个问题正在寻找反引号的替代方法,因为在我习惯于使用反引号而不是$()在shell中后,它开始引起麻烦。一旦您开始编写大量Markdown,这也会变得很痛苦。我已经使用了几年了,但是不幸的是我现在必须对其进行更改。
kirelagin

4
在.tmux.conf中,我也有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回去
鲍里斯·

如果您要写降价怎么办?您如何转义前缀?
OJFord

21

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

Ctrl + O是我见过的另一个选项。显然,这是RatPoison中的默认设置(这是X窗口管理器,不需要鼠标)。使用嵌套屏幕时,我已使用Ctrl + O:外部的Ctrl + O和内部的Ctrl + A。工作得很好,但我的同事还是有些害怕。:-)

我只是在想,如果您使用vi而不是Emacs,则有几种选择。例如,Ctrl + G很少使用。


8
对于Emacs用户,Ctrl + O似乎是最好的选择:在emacs中,它只是“在光标处打开新行”,而在bash中则是“重复命令序列”。
流量

2
如果您对右手Ctrl键操作没问题,请+1,这看起来是一个很好的备份。我自己是一个左撇子;-)
DaveParillo

9
我认为Ctrl + O会中断vim
Mu Qiao

14
我同意@MuQiao。在Vim中使用Ctrl-o跳转到较旧的光标位置(在许多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 C-j; bind-key C-j send-prefix -2
Susam Pal 2014年

C-j与CtrlP冲突。在缓冲区列表中上下移动分别使用C-kC-j
blockloop '17

14

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


我正在尝试执行此操作,但是如果我持有CAPS-LOCK(考虑下一个命令或其他命令)tmux(或iTerm,不确定是什么原因ESC引起的)M-Space,则反复接收到该命令,导致该命令不起作用。有办法禁用重复的密钥问题吗?例如,当我快速按下时,它会起作用CAPS-LOCK + Space,但是如果我按住CAPS-LOCK一秒钟左右然后再按下,Space它不会注册M-Space和弦,则不会起作用...
Bruno Ely

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

在执行剪切和粘贴操作时,这会将换码转换为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"

创意解决方案。我印象深刻
staticsan

bind-key -n F11设置-g前缀`bind-key -n F12设置-g前缀Co为tmux更新,以防其他人想要适应它。
milkypostman 2012年

1
有没有一种方法可以为tmux中的prefix + other_key组合设置某种最小超时,因此在粘贴代码时它不会触发任何命令,但是在键盘上键入backtick + key时会这样做,因为backtick和另一个键之间的停顿时间更长?
生病2012年

11

我用Ctrl-Qtmux,它至今运作良好。不过,我不得不提的是,它与Shell流控制冲突。默认情况下,Ctrl-Q用于通过停止输出后重新启用输出Ctrl-SCtrl-S我意外撞了几次壳后感到惊讶,我学会了不要压Ctrl-S

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

# tmux.conf
unbind C-b
set -g prefix C-q

我已经采用了这种绑定,我发现它非常方便。谢谢!
aymericbeaumet

我也很喜欢,因为我总是禁用终端控制流程。
Jack O'Connor

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

6

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

它使您的手指可以立即跳到您要键入的命令。试试看。


3
持续的时间不长-我回到^ j。^ Space太类似于我用来调用OSX级应用程序(Spotlight,QuickSilver,DTerm)的命令。
露台

我也用Cj。这是我在〜/ .tmux.conf中使用的:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal 2014年

1
我也使用C-Space,几乎没有其他地方使用它。
mahdix'6

1
C空间非常适合我,因为我正在使用Chromebook:D
Eric Nguyen

6

迟来的建议: ctrl-sctrl-s有许多优点:

  1. 在首页上。
  2. 仍然接近ctrl-a(实际上,对于大多数打字员来说,它们将使用与原来使用的相同的两个手指ctrl-a),因此从ctrl-a到的肌肉记忆切换ctrl-s是微不足道的-对我来说,它在第一次尝试后约一个小时内就变成了第二自然。
  3. 释放ctrl-aemacs风格的“返回到行首”或vim风格的“递增编号”操作。或者,嘿,要在tmux窗格中运行屏幕,而不必担心转义前缀字符来控制嵌入式屏幕实例。(我经常使用带有包含到远程服务器的ssh会话的窗格的本地tmux来执行此操作,在其中运行屏幕)
  4. 不会覆盖或将转义要求添加到任何其他常用的终端功能中。 如今,绝大多数人都没有使用ctrl-s!

当然,在ctrl-s上没有任何内容的原因是,在终端中,传统上将其用于流控制,其历史可追溯到诸如more和的分页工具less普及之前。我敢肯定,某些​​地方的GUI终端程序仍然默认启用了流控制功能,但实际上并没有碰到过;默认情况下,我尝试过的gui终端程序似乎完全忽略了它,这使该便捷的组合键可用于更有效的使用。

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


4
Ctrl-s是正向搜索,当我使用Ctrl-r进行更深入的搜索时:)
Jack O'Connor

Ctrl-S通常用于停止控制台输出(也称为“冻结”它)。当我尝试重新映射它时,这使我有点痛苦。
戴夫

5

没有冲突的键可能是C-z,因为它通常用于将程序发送到后台以在启动它的shell上继续执行其他操作。我有tmux时不这样做。


我使用Cz的唯一问题是大多数其他人都在使用Cb,因此在其他人的计算机上进行配对编程时,我的肌肉记忆消失了。我最终fg在错误键入Cz之后不得不花费很多时间。
史蒂夫·乔根森

关于Cz的伟大思想是,假设您不想使用Ca,它非常靠近左Ctrl键,这是当今大多数笔记本计算机键盘上唯一的控制键。如果已将其映射到Ctrl,也请靠近Caps Lock。我将Caps Lock映射到Esc,因为我经常使用Kinesis Freestyle Solo键盘,该键盘在笨拙的位置具有Esc键。
史蒂夫·乔根森

4

我听说使用`(反引号),然后您只需要键入两次就可以进行实际反引号。对于习惯了该操作的vi用户来说可能会更好(除非您执行Caps锁定操作)。


如何定义tmux的反引号?
Alexandre Nizoux 2011年

像这样:解除Cb的绑定;设置-g前缀' '; bind ''发送前缀; 请参阅上方的Darren Hall的答案。
bluehavana 2011年

我使用backtick已有大约一年的时间,以后再也不会回到两键/组合键前缀了。试试看。
生病

4

我推荐C-j,它不会对vi或emacs造成太大影响。本质上,我同意Susam Pal的评论,似乎值得作为回答,因为从我的角度来看,其他所有人似乎都存在重大冲突。

我将Cj用作前缀键,因为Cj是j或Vim的同义词,没有人使用Cj在Vim中向下移动一行。我的〜/ .tmux.conf中有这个:

set -g prefix2 C-j; bind-key C-j send-prefix -2


1
根据您的建议,我使用Cj已有一段时间了,我发现的唯一冲突是使用CtrlP vim插件。Cj和Ck分别用于上下移动选项。
blockloop

3

对于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+ actrl+ b,都会以两种方式屏蔽Vim的功能(重叠)。


2

就我个人而言,b距离太远了Ctrl。当我使用tmux时,我总是将Cb的绑定更改为Ca。与Ca的主要冲突是全选,但我尚未发现与tmux一起使用的程序有问题。


确实,我使用默认值(在屏幕上,从未尝试过tmux),并且尚未发现需要更改它。
魁北克吉ote德09年

2

作为GNU emacs,zsh和MS Windows用户,我使用Control-T。(例如在.screenrc中:)

转义“ ^ T ^ T”

是的,Control-T绑定了一些东西,例如Ubuntu权限中的下拉菜单或Emacs中的转置字符。

我无视Co,因为它需要两只手。


2

我认为最好的解决方案是^ C。Emacs使用^ C作为前缀键,我发现当我需要在shell中键入^ C时,无论如何我几乎总是键入两个。:-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix


1

您可以使用反引号。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,因此使用反引号更加有意义。


我也用这个。C-Space非常易于键入。
2014年

反勾非常好。然而,事实证明它不是终端友好的。在Linux上使用xterm绝对不会出错,但是像putty和iTerm2(macos)这样的终端在正确模拟它时会遇到问题。幸运的是,在iTerm2中,您可以在配置中解决该问题。我不经常使用Windows / putty,因此ctrl-space似乎是一种可行的解决方法。:)
Alex

1

这里的大多数答案都使用Ctrl作为组合键的一部分。
当我使用Ctrl时,我的小指手指开始受伤,因为我总是不得不将其展开到Ctrl。
我用Alt-j我的左手拇指和右手食指输入,非常方便。到目前为止,我还没有发现与任何其他程序的任何冲突。

unbind C-b
set-option -g prefix M-j

1

对于GNU屏幕,将反引号映射为转义,〜/ .screenrc中的以下内容对我有用。

escape ``


0

我认为,Mac用户会发现§比反引号更方便。

非Mac键盘上,反引号的位置与§Mac键盘上的大致相同。因此,要体验与建议使用反引号的人员相同的便利,请使用Mac键盘上的段落符号。

在Mac键盘上使用反引号非常棘手,因为它非常靠近左侧的(⇧)shift,(⌃)控制键和(⌥)alt键。在MacBooks上,甚至靠近左键fn


定义Mac键盘 ;-)
Arjan

好的,您在这里有一个要点,我的意思是Apple Mac US键盘布局,尽管无论是完整扩展键盘还是Macbook键盘。
令人讨厌的
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.