Was ist die am wenigsten widersprüchliche Präfix- / Escape-Sequenz für screen oder tmux?

96

Bildschirm geht mit Ctrl+ A. tmux verwendet dagegen - wie in screen entwickelt - Ctrl+ B. Beide Tastenanschläge werden jedoch auch in Editoren, Shells usw. verwendet. Wenn Sie also eine der beiden Tasten auswählen, werden die Benutzerfreundlichkeit und die Funktionalität dieser Tools in tmux oder screen beeinträchtigt.

Welches Präfix kollidiert am wenigsten mit den Tastenkombinationen anderer Programme und Shells?

Scott
quelle
6
"Welches widerspricht am wenigsten anderen Programmen?" hat nichts mit meinung zu tun.
Bilderstürmer
~/.tmux.confVergessen Sie nach der Änderung nicht, den tmux-Server neu zu starten, damit die Änderungen wirksam werden ( superuser.com/q/188491/105108 ).
ks1322
Alternative zur Verwendung eines Präfixes: Einige Terminals bieten jetzt die Integration von tmux über "tmux -CC" (dh iTerm2 für macOS) an. Auf diese Weise werden tmux-Fenster im Terminal als Registerkarten angezeigt. Sie können dann Tastenkombinationen zum Verwalten von Registerkarten verwenden, die nicht mit einem Terminalprogramm in Konflikt stehen, z. B. mit der Befehlstaste (auch als Supertaste oder Windows-Taste bezeichnet).
30.

Antworten:

48

Ich denke, ^\(aka ^|) ist am besten, wenn es in einer günstigen Position auf Ihrem Tastaturlayout ist. Seine Verwendung in anderen Programmen ist sehr selten:

  • Senden SIGQUITan einen Prozess
  • Abbrechen für oder während Schleifen in einer Shell, wenn ^Cabgefangen wird
  • toggle-input-method in Emacs

Ich kenne keine anderen Verwendungen. Achten Sie darauf, dass Sie nicht versehentlich Prozesse außerhalb tmuxoder screennach der Gewöhnung abbrechen. Es ist mir allerdings nur einmal in ein paar Jahren passiert.

~/.tmux.conf

unbind-key C-b
set -g prefix 'C-\'
bind-key 'C-\' send-prefix

~/.screenrc

escape ^|^|
cjay
quelle
Ich habe es versucht, aber tmux beschwert C-`. Can I escape the sich irgendwie über die Verwendung von `character?
Jason
2
Nur um es jemand anderem 'C-\'mitzuteilen , sollten Sie in der tmux-Konfiguration anstelle von `C- \` schreiben.
gns-ank
2
Vergessen Sie nicht die 'tmux-Quelldatei /path/to/tmux.conf', wenn Sie fertig sind, um die neuen Einstellungen
auszuprobieren
12
Aber dann gewöhne ich mich an diesen Befehl und wenn ich vergesse, dass ich auf dem Bildschirm bin, fange ich versehentlich an, SIGQUITs zu senden ...
Kache
3
"Wenn es sich in einer bequemen Position auf Ihrem Tastaturlayout befindet", bedeutet dies standardmäßig nicht, dass Sie eine beliebte Neuzuordnung verwenden, die C- \ bequem macht?
Storypixel
53

Für Leute, die backtick als Flucht in tmux verwenden möchten, sollten Sie Folgendes hinzufügen:

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

Letzteres ist wichtig, sonst kann man kein Backtick für andere Zwecke eingeben :-)

Ned Ruggeri
quelle
Backtick scheint eine gute Idee zu sein, bis Sie SQL einfügen ...
Synchro
3
@Synchro unter tmux 1.8 ist kein Problem mehr, da die Option "Einfügezeit" standardmäßig aktiviert ist (auf 1 ms eingestellt). Siehe hier: sourceforge.net/p/tmux/tmux-code/ci/…
sickill
Ich fand diese Frage auf der Suche nach Alternativen zu Backtick, da sie Probleme verursachte, nachdem ich mich daran gewöhnt hatte, Backticks anstelle von $()Muscheln zu verwenden. Auch wird es zu einem Schmerz, wenn Sie anfangen, viel Markdown zu schreiben. Ich benutze es seit einigen Jahren, aber leider muss ich es jetzt ändern.
kirelagin
4
In der .tmux.conf habe ich auch bind-key C-a set-option -g prefix C-a. Wann immer ich Backticks verwenden muss, drücke ich, um `-Ctrl-amein Präfix auf zu setzen C-a. Und ich habe , bind-key C-b set-option -g prefix `so kann ich schlagen C-a-C-bzurück zu gehen
Boris
Was ist, wenn Sie einen Abschlag schreiben? Wie kann man dem Präfix entkommen?
OJFord
21

Es ist auch bekannt, dass Strg + A Probleme mit Emacs verursacht, einschließlich Bash im Emacs-Modus. Es hört sich so an, als wäre dies kein Problem für Sie.

Strg + O ist die andere Option, die ich gesehen habe. Anscheinend ist dies die Standardeinstellung in RatPoison (dies ist ein X-Fenstermanager, der keine Maus benötigt). Ich habe Strg + O verwendet, wenn ich verschachtelte Bildschirme verwende: Strg + O für den äußeren und Strg + A für den inneren. Hat gut funktioniert, aber irgendwie hat es meinen Kollegen Angst gemacht. :-)

Ich habe nur darüber nachgedacht, und wenn Sie vi anstelle von Emacs verwenden, gibt es ein paar Alternativen. Strg + G wird zum Beispiel nicht oft verwendet.

staticsan
quelle
8
Für Emacs-Benutzer scheint Strg + O die beste Wahl zu sein: In Emacs wird nur "eine neue Zeile am Cursor öffnen" und in Bash "eine Befehlssequenz wiederholen".
Flow
2
+1 Wenn Sie mit rechtshändigen Strg-Operationen einverstanden sind, sieht dies wie ein gutes Backup aus. Ich bin selbst ein
Linkshänder ;-)
9
Ich denke, Strg + O bricht vim
Mu Qiao
14
Ich bin mit @ MuQiao einverstanden. Strg-o wird in Vim verwendet, um zu einer älteren Cursorposition zu springen (entspricht in vielen IDEs der Zurück-Schaltfläche), eine Funktion, die ich sehr oft beim Durchsuchen von Code in Vim verwende. Strg-B steht für PageUp in Vim. Ich benutze Ctrl-b überhaupt nicht bei Vim. Für Vim-Benutzer wie mich ist Strg-B immer noch eine bessere Wahl als Strg-O. Ich benutze Cj als Präfix-Schlüssel, da Cj in Vim gleichbedeutend mit j oder <Down> ist und niemand in Vim Cj verwendet, um eine Zeile nach unten zu verschieben. Ich habe dies in meiner ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal
C-jKonflikte mit CtrlP. Auf- und Abbewegung der Pufferliste verwendet C-kund C-jjeweils
blockloop
14

Ich habe CAPS-LOCKglobal zugeordnet ESC. Dann benutze ich M-Space(dh. CAPS-LOCK+ Space) Für mein Präfix.

Nathan Speed
quelle
Ich versuche dies zu tun, aber wenn ich CAPS-LOCKtmux halte (überlege, was ich als nächstes befehle oder so) - oder iTerm, nicht sicher, was dies verursacht -, wird der ESCBefehl wiederholt empfangen, was dazu führt, dass M-Spaceer dann nicht funktioniert. Gibt es eine Möglichkeit, dieses sich wiederholende Schlüsselproblem zu deaktivieren? Zum Beispiel funktioniert es, wenn ich schnell drücke CAPS-LOCK + Space, aber nicht, wenn ich CAPS-LOCKeine Sekunde lang gedrückt halte und dann drücke Space, wird der M-SpaceAkkord nicht registriert ...
Bruno Ely,
12

Ich benutze ein komplexes System für den Bildschirm. Mein Standard-Escape ist auf \ 140 \ 140 gesetzt, was ein Backtick ist. Die Strg-A-Taste erschwert sowohl die Bearbeitung von Emacs als auch der Befehlszeile in Zsh und ich mag Strg-O nicht (2-Hand-Operationen für die meisten Bildschirmaktionen).

Ich binde 's' erneut an Bildschirm 1, sodass neue Sitzungen von links nach rechts auf der Tastatur ab 1 erstellt werden. Dies ermöglicht mir, Bildschirm 0 für das zu reservieren, was ich als persistent oder Referenzfenster betrachte. Es ist eine sehr schnelle einhändige Geste, mit der Sie zwischen (Backtick) 1, (Backtick) 2, (Backtick) 3 zwischen Fenstern wechseln können.

Das Problem bei der Verwendung von Backtick in einer Unix-Umgebung ist der Versuch, Shell- / Perl-Skriptcode auszuschneiden und einzufügen. Aus diesem Grund drücke ich die Taste F11 / F12, um zwischen meinen Escape-Zeichen zu wechseln.

bindkey -d -k F1        escape ^O^O # bound to F11
bindkey -d -k F2        escape \140\140 # bound to F12

Dadurch wird die Escape-Taste bei Ausschneiden und Einfügen auf Strg-O umgestellt. Ich habe festgestellt, dass das Schlagen eines doppelten Ticks einfach ist und für die meisten Bildschirmoperationen ein guter Kompromiss ist.

Wiederholen Sie diese Antwort mit einer neueren Lösung, mit der Sie den Modus umschalten können, indem Sie F12 drücken und eine Beschriftung zum Anzeigen des Modus verwenden.

## 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"
Darren Hall
quelle
Kreative Lösung. Ich bin beeindruckt.
staticsan
bind-key -n F11 set -g Präfix `bind-key -n F12 set -g Präfix Co Updates für tmux, falls andere dies anpassen wollen.
Milkypostman
1
Gibt es eine Möglichkeit, eine minimale Zeitüberschreitung für die Kombination Präfix + andere_Taste in tmux festzulegen, sodass beim Einfügen von Code kein Befehl ausgelöst wird, beim Eingeben von Backtick + Taste über die Tastatur jedoch, weil die Pause zwischen Backtick und der anderen Taste länger war ?
5.
11

Ich benutze Ctrl-Qin tmuxund es hat bisher gut funktioniert. Ich muss jedoch erwähnen, dass dies im Widerspruch zur Shell-Flusssteuerung steht. Standardmäßig Ctrl-Qwird verwendet, um die Ausgabe nach dem Stoppen mit wieder zu aktivieren Ctrl-S. Nachdem Ctrl-Sich einige Male nach einem versehentlichen Schlag von einer stecken gebliebenen Muschel überrascht worden war , habe ich gelernt, nicht zu drücken Ctrl-S.

(Man kann die Flusskontrolle auch ganz mit ausschalten stty -ixonoder verschiedene Schlüssel an stty startund binden stty stop.)

# tmux.conf
unbind C-b
set -g prefix C-q
simonair
quelle
Ich habe diese Bindung übernommen und finde sie sehr praktisch. Vielen Dank!
Aymericbeaumet
Mein Favorit auch, da ich den Terminal-Kontrollfluss immer deaktiviere.
Jack O'Connor
2
Verwendet in Emacs für quote-inserted. Anwendungsbeispiel (in Emacs): Wenn ich nach dem nächsten Tabulatorzeichen suchen möchte -<Ctrl-s>+<Ctrl-q>+<TAB>
nhed
6

Ich reserviere gerne ^Spacefür sehr spezielle / häufige Operationen, da ich finde, dass es das am einfachsten zu tippende Präfix ist, aber ich versuche es gerade als prefixin tmux abgebildet .

Sie haben die Finger frei, um sofort zu dem Befehl zu springen, den Sie eingeben möchten. Versuche es.

Terrasse
quelle
3
Das hat nicht lange gedauert - ich bin zurück zu ^ j. ^ Der Speicherplatz ist den Befehlen zu ähnlich, die ich zum Aufrufen von Apps auf OSX-Ebene (Spotlight, QuickSilver, DTerm) verwende.
Terrasse
Ich benutze auch Cj. Das benutze ich in meiner ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal 10.04.14
1
Ich benutze auch C-Space, es wird fast nirgendwo anders verwendet.
Mahdix
1
C-Space ist perfekt für mich, da ich auf einem Chromebook bin: D
Eric Nguyen
6

Ein verspäteter Vorschlag: ctrl-s. ctrl-shat eine Reihe von Vorteilen:

  1. In der Startreihe.
  2. Immer noch in der Nähe ctrl-a(in der Tat werden bei den meisten Schreibmaschinen dieselben zwei Finger verwendet wie bei ihnen ctrl-a), so dass das Umschalten des Muskelgedächtnisses von ctrl-aauf ctrl-strivial ist - für mich wurde es innerhalb von etwa einer Stunde nach dem ersten Versuch zur zweiten Natur.
  3. Ermöglicht ctrl-aemacs-artige Operationen "Zurück zum Zeilenanfang" oder vim-artige Operationen "Inkrementieren von Zahlen". Oder wie wäre es, wenn Sie den Bildschirm in einem tmux-Fenster ausführen, ohne sich Gedanken darüber machen zu müssen, ob Präfixzeichen zur Steuerung der eingebetteten Bildschirminstanz fehlen. (Ich verwende dazu häufig einen lokalen tmux mit Bereichen, die ssh-Sitzungen zu Remote-Servern enthalten, auf denen ich screen ausführe.)
  4. Überschreibt keine anderen häufig verwendeten Terminalfunktionen und erweitert diese nicht um Escape-Anforderungen. nichts, was die allermeisten Leute heutzutage benutzen, ist auf Ctrl-s!

Natürlich ist der Grund, dass nichts auf ctrl-s steht, dass es im Terminal traditionell zur Flusskontrolle verwendet wird und aus den Tagen stammt, bevor Paging-Tools wie moreund lessüblich waren. Ich bin mir sicher, dass in einigen GUI-Terminalprogrammen immer noch diese Flusssteuerungsfunktionalität standardmäßig aktiviert ist, aber ich bin noch nicht auf eine gestoßen. Die GUI-Terminal-Programme, die ich ausprobiert habe, scheinen es standardmäßig vollständig zu ignorieren, was diese praktische Tastenkombination für produktivere Anwendungen verfügbar macht.

Wenn Sie also screen / tmux nicht direkt von einem Linux-Terminal aus verwenden, sondern von einem GUI-basierten Terminal aus, empfehle ich, es zu ctrl-sversuchen. Es ist so gemacht, dass es in tmux und auf dem Bildschirm viel praktischer für mich ist.

Trevor Powell
quelle
4
Ctrl-s ist Vorwärtssuche, wenn ich mit Ctrl-r zu weit gehe :)
Jack O'Connor
Ctrl-S ist üblich, um die Konsolenausgabe zu stoppen (auch "einfrieren" genannt). Das hat mich gebissen, als ich versucht habe, es neu zuzuordnen.
Dave
5

Ein Schlüssel ohne Konflikt kann sein C-z, da er normalerweise verwendet wird, um das Programm in den Hintergrund zu schicken und eine andere Sache auf der Shell fortzusetzen, die es gestartet hat. Ich mache das nicht, wenn ich tmux habe.

Josuah Demangeon
quelle
Das einzige Problem, das ich bei der Verwendung von Cz hatte, ist, dass die meisten anderen Leute Cb verwenden, so dass mein Muskelgedächtnis ausgeschaltet ist, wenn Paare auf dem Computer eines anderen programmiert werden fg.
Steve Jorgensen
Das Beste an Cz ist, dass es, vorausgesetzt, Sie möchten Ca nicht verwenden, sehr nahe an der linken Strg-Taste liegt, die heutzutage die einzige Steuertaste auf den meisten Notebook-Tastaturen ist. Auch in der Nähe der Feststelltaste, wenn Sie diese Strg zugeordnet haben. Ich ordne meine Feststelltaste Esc zu, da ich häufig eine Kinesis Freestyle Solo-Tastatur verwende, bei der die Esc-Taste an einer ungünstigen Stelle steht.
Steve Jorgensen
4

Ich habe gehört, dass `(backtick) verwendet wird, und dann muss man es für ein tatsächliches backtick nur zweimal eingeben. Könnte für vi-Benutzer besser sein, die an die Aktion gewöhnt sind (es sei denn, Sie machen die Feststelltaste).

Bluehavana
quelle
Wie kann man backtick für tmux definieren?
Alexandre Nizoux
So etwas wie: binde Cb los; set -g prefix ' '; bind '' send-prefix; siehe die Antwort von Darren Hall oben.
Bluehavana
Ich bin seit ungefähr einem Jahr bei backtick und werde nie wieder auf Two-Key / Combo-Präfix zurückgreifen. Versuche es.
Sichel
4

Ich empfehle C-j, die nicht viel mit vi oder Emacs stören. Im Wesentlichen stimme ich einer Bemerkung von Susam Pal zu, die es wert zu sein scheint, als Antwort zu erscheinen, da alle anderen aus meiner Sicht erhebliche Konflikte zu haben scheinen.

Ich benutze Cj als Präfixschlüssel, da Cj gleichbedeutend mit j oder in Vim ist und niemand Cj verwendet, um in Vim eine Zeile nach unten zu verschieben. Ich habe dies in meiner ~ / .tmux.conf:

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

Nealmcb
quelle
1
Aufgrund Ihrer Empfehlung benutze ich Cj seit einiger Zeit und der einzige Konflikt, den ich gefunden habe, ist mit dem CtrlP vim-Plugin. Cj und Ck werden verwendet, um die Optionen nach unten bzw. oben zu verschieben.
Blockloop
3

Für das Tastaturlayout von Programmer Dvorak ist es ziemlich einfach, eine Minustaste (Bindestrich) als Präfix zu verwenden, dh ctrl+ -.
Die Minus-Taste befindet sich im QWERTY-Layout an der Position der Anführungszeichen. Außerdem habe ich eine Feststelltaste als Strg-Taste. Es folgt eine tmux conf, um sie als Präfix zu setzen:

unbind C-b
set -g prefix C-_
bind C-_ send-prefix
bind - last-window

Sie fragen sich vielleicht, warum der Unterstrich anstelle des Minus verwendet wird? Siehe Tmux: Wie binde ich an C - (Strg-Minus)?
Für qwerty könnten Sie Folgendes anwenden: Wie binde ich den tmux-Präfixschlüssel an C- '? Lösung, um die gleiche Verknüpfung beizubehalten.

Ich würde sagen, dass dies ein perfektes Präfix ist, wenn Sie Vim / Neovim verwenden. Weil Präfixe wie ctrl+ aoder ctrl+ bdie Funktionalität von Vim in jeder Hinsicht überlappen.

Vladimir Bauer
quelle
2

Persönlich bist es Ctrlfür mich einfach zu weit weg . Wenn ich tmux benutze, ändere ich immer die Bindung von Cb zu Ca. Der Hauptkonflikt mit Ca besteht darin, alle auszuwählen, aber ich habe nicht festgestellt, dass dies ein Problem mit den Programmen ist, mit denen ich tmux verwende.

DaveParillo
quelle
In der Tat verwende ich die Standardeinstellung (auf dem Bildschirm, habe tmux noch nie ausprobiert) und habe noch keine Notwendigkeit gefunden, sie zu ändern.
Quack Quijote
2

Als Benutzer von GNU emacs, zsh und MS Windows verwende ich Control-T. (zB in .screenrc :)

Escape "^ T ^ T"

Ja, Control-T ist an etwas gebunden, wie das Pulldown-Menü in Ubuntus Aptitude oder das Transponieren von Zeichen in Emacs.

Ich habe Co ignoriert, weil es zwei Hände für mich erfordert.

piyo
quelle
2

Ich denke die beste Lösung ist ^ C. Emacs verwendet ^ C als Präfixschlüssel, und wenn ich ^ C in eine Shell eingeben muss, gebe ich sowieso fast immer zwei ein. :-)

unbind-key C-b
set -g prefix C-c
bind-key C-c send-prefix
user114905
quelle
1

Sie können backtick verwenden. Einige ältere Versionen von tmux unterstützen kein Backtick, daher können Sie Folgendes tun, um dieses Problem zu umgehen (wobei C-`, C-@ und C-space gleichzeitig als Meta hinzugefügt werden):

# meta prefix - @ - backtick
unbind C-b
set -g prefix C-@
bind C-@ send-prefix
bind C-@ last-window

Normalerweise ordne ich meine Feststelltaste der Strg-Taste zu, was mit dem Backtick noch sinnvoller ist.

Alex
quelle
Ich benutze das auch. C-Space ist recht einfach zu tippen.
kzh
Das Backtick ist ziemlich gut. Es ist jedoch nicht terminalfreundlich, wie sich herausstellt. Sie können definitiv nichts falsch machen mit xterm unter Linux, aber Terminals wie Putty und iTerm2 (MacOS) haben Probleme, es richtig zu emulieren. Zum Glück können Sie es in iTerm2 in der Konfiguration umgehen. Ich benutze Windows / Putty nicht oft, daher scheint der Strg-Raum eine praktikable Lösung zu sein. :)
Alex
1

Die meisten Antworten hier verwenden Strg als Teil einer Tastenkombination.
Wenn ich Strg verwendete, fing mein kleiner Finger an zu schmerzen, weil ich ihn immer auf Strg ausbreiten musste.
Ich benutze das, Alt-jwas ich mit meinem linken Daumen und meinem rechten Zeigefinger tippe und es ist sehr praktisch. Ich habe auch noch keine Kollisionen mit einem anderen Programm gefunden.

unbind C-b
set-option -g prefix M-j
wullxz
quelle
1

Für den GNU-Bildschirm funktioniert die Zuordnung des Backtick zum Escape in ~ / .screenrc für mich.

escape ``
user1056720
quelle
0

Ich mag den Vorschlag , ctrl- \ als Präfix zu binden , aber um dies unter Linux Mint 12 zum Laufen zu bringen, musste ich die Bindung am unteren Rand entfernen . Sonst würde es nicht dauern. Siehe meine .tmux.conf hier: Verwenden von tmux mit Emacs und Vim

justingordon
quelle
Bitte bezeichnen Sie die Antworten nicht als "oben" und "unten", da sich die Reihenfolge ändern könnte. Verknüpfe stattdessen die Antwort. Vielen Dank für Ihre Antwort :)
Flow
0

Ich denke, dass Mac-Benutzer das §bequemere als das Backtick finden werden.

Bei Nicht-Mac- Tastaturen befindet sich das Backtick ungefähr auf der gleichen Taste wie §bei Mac-Tastaturen. Verwenden Sie das Absatzzeichen auf einer Mac-Tastatur, um den gleichen Komfort zu erzielen wie die Benutzer, die das Backtick verwenden möchten.

Das Verwenden des Backtick auf Mac-Tastaturen ist schwierig, da es sich sehr nahe an der linken (⇧) Umschalttaste, der (⌃) Steuerung und den (⌥) Alt-Tasten befindet. Bei MacBooks sogar in der Nähe der linken fnTaste.

nanitös
quelle
Definieren Sie Mac - Tastatur ;-)
Arjan
Okay, Sie haben hier einen Punkt, ich meinte ein Apple Mac US-Tastaturlayout, obwohl es sich nicht um eine vollständig erweiterte oder eine Macbook-Tastatur handelt.
Nanitous