Qual è il prefisso / sequenza di escape meno contrastanti per screen o tmux?


96

Lo schermo va con Ctrl+ A. d'altra parte, come sviluppato nello schermo, usa Ctrl+ B. Entrambi i tasti, tuttavia, vengono utilizzati anche in editor, shell, ecc. Scegliendo uno di essi si degrada l'esperienza dell'utente e la funzionalità di quegli strumenti quando vengono utilizzati all'interno di tmux o dello schermo.

Quale prefisso è il meno in conflitto con le combinazioni di tasti di altri programmi e shell?


6
"quale è meno in conflitto con altri programmi?" non ha nulla a che fare con l'opinione.
iconoclasta dal

Dopo la modifica ~/.tmux.conf, non dimenticare di riavviare tmux server per rendere effettive le modifiche ( superuser.com/q/188491/105108 ).
ks1322,

Alternativa all'uso di un prefisso: alcuni terminali ora offrono l'integrazione di tmux tramite "tmux -CC" (cioè iTerm2 per macOS). In questo modo le finestre di tmux vengono visualizzate come schede nel terminale. È quindi possibile utilizzare i collegamenti dei tasti per la gestione di schede che non sono in conflitto con nessun programma terminale, ad esempio utilizzando il tasto cmd (noto anche come tasto super, tasto Windows).
giovedì

Risposte:


48

Penso che ^\(aka ^|) sia il migliore se si trova in una posizione comoda sul layout della tastiera. I suoi usi in altri programmi sono piuttosto rari:

  • invio SIGQUITa un processo
  • l'interruzione per o mentre i loop in una shell ^Cvengono intercettati
  • toggle-input-method in emacs

Non conosco altri usi. Fai attenzione a non uccidere accidentalmente un processo al di fuori tmuxo screendopo esserti abituato. Mi è successo solo una volta ogni pochi anni.

~/.tmux.conf

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

~/.screenrc

escape ^|^|

Ci ho provato ma tmux si lamenta dell'uso del C-`. Can I escape the carattere in qualche modo?
Jason,

2
Solo per far sapere a qualcun altro, dovresti scrivere 'C-\'invece di "C- \" nella configurazione di tmux.
gns-ank,

2
Non dimenticare di 'tmux source-file /path/to/tmux.conf' quando hai finito di provare le nuove impostazioni
user72923

12
ma poi ho l'abitudine di quel comando e quando dimentico di essere sullo schermo, comincio a inviare accidentalmente SIGQUIT ...
Kache

3
"se si trova in una posizione comoda sul layout della tastiera" per impostazione predefinita non lo è, stai insinuando che c'è qualche rimappatura popolare che stai usando che rende C- \ conveniente?
Storypixel

53

Per le persone che vogliono usare il backtick come escape in tmux, ti consigliamo di aggiungere:

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

Quest'ultimo è importante, altrimenti non puoi digitare un backtick per altri scopi :-)


Backtick sembra una buona idea finché non si incolla un po 'di SQL ...
Synchro

3
@Synchro su tmux 1.8 non è più un problema grazie all'opzione assume-paste-time che è attiva di default (impostata su 1ms). Vedi qui: sourceforge.net/p/tmux/tmux-code/ci/…
sickill

Ho trovato questa domanda alla ricerca di alternative per il backtick poiché ha iniziato a causare problemi dopo essermi abituato a utilizzare i backtick anziché $()nelle shell. Inoltre, diventa un dolore quando inizi a scrivere molto Markdown. Lo uso da diversi anni, ma sfortunatamente dovrò cambiarlo ora.
Kirelagin,

4
In .tmux.conf ho anche bind-key C-a set-option -g prefix C-a. Ogni volta che ho bisogno di usare i backtick premo `-Ctrl-ache imposta il mio prefisso su C-a. E bind-key C-b set-option -g prefix `così posso colpire C-a-C-bper tornare indietro
Boris,

E se stai scrivendo markdown? Come sfuggire al prefisso?
OJFord,

21

Ctrl + A è anche noto per causare problemi con Emacs, incluso Bash in modalità Emacs. Sembra che questo non sia un problema per te.

Ctrl + O è l'altra opzione che ho visto. Apparentemente, questo è il valore predefinito in RatPoison (questo è un X Window Manager che non necessita di mouse). Ho usato Ctrl + O quando ho usato schermate nidificate: Ctrl + O per quella esterna e Ctrl + A per quelle interne. Ha funzionato bene, ma un po 'ha spaventato i miei colleghi. :-)

Stavo solo pensando e se usi vi piuttosto che Emacs, ci sono alcune alternative. Ctrl + G non è molto usato, per esempio.


8
Per gli utenti di Emacs Ctrl + O sembra essere la scelta migliore: in emacs è solo "aprire una nuova riga sul cursore" e in bash "ripetere una sequenza di comandi".
Flusso

2
+1 se stai bene con le operazioni ctrl con la mano destra, questo sembra un buon backup. Sono un
mancino

9
Penso che Ctrl + O rompe Vim
Mu Qiao il

14
Sono d'accordo con @MuQiao. Ctrl-o viene utilizzato in Vim per passare a una posizione del cursore precedente (equivalente del pulsante Indietro in molti IDE), una funzione che utilizzo molto spesso durante la navigazione del codice in Vim. Ctrl-b è sinonimo di PageUp in Vim. Non uso Ctrl-b su Vim. Quindi per gli utenti di Vim come me, Ctrl-b è ancora una scelta migliore di Ctrl-o. Uso Cj come chiave di prefisso poiché Cj è sinonimo di j o <Down> in Vim e nessuno usa Cj per spostare una riga in basso in Vim. Ho questo nel mio ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

C-jè in conflitto con CtrlP. Spostarsi su e giù nell'elenco dei buffer utilizza C-ke C-jrispettivamente
blockloop

14

Ho CAPS-LOCKmappato a livello globale ESC. Quindi, utilizzo M-Space(es. CAPS-LOCK+ Space) Per il mio prefisso.


Sto provando a farlo, ma se tengo CAPS-LOCK(pensando al mio prossimo comando o qualcosa del genere) tmux — o iTerm, non sono sicuro di ciò che sta causando questo — ricevo ESCripetutamente il comando causando M-Spacedi non funzionare. C'è un modo per disabilitare quel problema chiave ripetuto? Ad esempio, funziona quando premo rapidamente CAPS-LOCK + Space, ma non se lo tengo premuto CAPS-LOCKper circa un secondo e poi premo Spacenon registra l' M-Spaceaccordo ...
Bruno Ely

12

Uso un sistema complesso per lo schermo. La mia escape predefinita è impostata su \ 140 \ 140, che è backtick. Ctrl-A complica sia Emacs che la modifica della riga di comando per me all'interno di Zsh, e non mi piace Ctrl-O (operazioni a 2 mani per la maggior parte delle azioni sullo schermo).

Ricollego 's' alla schermata 1 in modo che vengano create nuove sessioni da sinistra a destra sulla tastiera a partire da 1. Questo mi consente di riservare la schermata 0 per ciò che considero finestre persistenti o di riferimento. È molto veloce il gesto con una sola mano di (backtick) 1, (backtick) 2, (backtick) 3 per passare da una finestra all'altra.

Il problema con l'utilizzo del backtick in un ambiente unix è quando si tenta di tagliare e incollare il codice di script shell / perl. Per questo motivo premo il tasto F11 / F12 per passare dal mio carattere di escape.

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

Questo cambierà la fuga in Ctrl-O per quando sto facendo operazioni di taglia e incolla. Ho scoperto che colpire un doppio segno di spunta è semplice e un buon compromesso per la maggior parte delle operazioni sullo schermo.

Rivisitare questa risposta con una soluzione più recente che consente di attivare / disattivare la modalità premendo F12 e utilizzando una didascalia per indicare la modalità.

## 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"

Soluzione creativa. Sono impressionato.
staticsan

bind-key -n F11 set -g prefisso `bind-key -n F12 set -g prefisso Co Aggiornamenti per tmux nel caso in cui altri vogliano adattarlo.
milkypostman,

1
C'è un modo per impostare una sorta di timeout minimo per il prefisso + altra combinazione di tasti in tmux, quindi quando si incolla il codice non attiva alcun comando ma quando si digita backtick + tasto dalla tastiera lo fa perché la pausa tra backtick e l'altro tasto era più lunga ?
sickill

11

Io lo uso Ctrl-Qin tmuxe ha funzionato bene finora. Devo dire, tuttavia, che è in conflitto con il controllo del flusso della shell. Per impostazione predefinita, Ctrl-Qviene utilizzato per riattivare l'output dopo averlo interrotto con Ctrl-S. Dopo essere stato sorpreso da un guscio bloccato alcune volte dopo aver accidentalmente colpito Ctrl-S, ho imparato a non premere Ctrl-S.

(Si potrebbe anche disattivare del tutto il controllo del flusso stty -ixono associare diversi tasti a stty starte stty stop.)

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

Ho adottato questo legame e lo trovo molto conveniente. Grazie!
aymericbeaumet il

Anche il mio preferito, poiché disabilito sempre il flusso di controllo del terminale.
Jack O'Connor,

2
Utilizzato in emacs per quote-inserted. Esempio di utilizzo (in emacs): se voglio cercare il prossimo carattere di tabulazione -<Ctrl-s>+<Ctrl-q>+<TAB>
nhed

6

Mi piace prenotare ^Spaceper operazioni molto speciali / comuni perché trovo che sia il prefisso più semplice da digitare, ma in questo momento lo sto provando mappato come prefixin tmux .

Lascia le dita libere per saltare all'istante al comando che si desidera digitare. Provaci.


3
Non è durato a lungo - Sono tornato a ^ j. ^ Lo spazio è troppo simile ai comandi che uso per richiamare le app di livello OSX (Spotlight, QuickSilver, DTerm).
terrazza

Uso anche Cj. Questo è quello che uso nel mio ~ / .tmux.conf:set -g prefix2 C-j; bind-key C-j send-prefix -2
Susam Pal

1
Uso anche C-Space, non è usato quasi da nessun'altra parte.
Mahdix,

1
C-space è perfetto per me, dato che sono su un Chromebook: D
Eric Nguyen,

6

Un suggerimento tardiva: ctrl-s. ctrl-spresenta una serie di vantaggi:

  1. Sulla riga di casa.
  2. Ancora vicino ctrl-a(in effetti, per la maggior parte dei dattilografi userà le stesse due dita per cui hanno usato ctrl-a), quindi il passaggio dalla memoria muscolare ctrl-aa ctrl-sè banale - per me, è diventato una seconda natura entro circa un'ora dal primo tentativo.
  3. Viene ctrl-aliberato per le operazioni "torna all'inizio della riga" in stile emacs o "numero di incremento" in stile vim. O ehi, per eseguire lo schermo all'interno di un riquadro di tmux senza preoccuparsi di sfuggire ai caratteri prefisso per controllare l'istanza dello schermo incorporato. (Lo faccio spesso usando un tmux locale con riquadri contenenti sessioni ssh su server remoti, in cui eseguo schermo)
  4. Non sostituisce né aggiunge requisiti di escape a qualsiasi altra funzionalità terminale comunemente usata. niente che la stragrande maggioranza delle persone usa oggi è su ctrl-s!

Naturalmente, la ragione per cui nulla è su ctrl-s è che nel terminale, tradizionalmente, viene utilizzato per il controllo del flusso, risalente ai giorni precedenti agli strumenti di paging come moreed lesserano comuni. Sono sicuro che qualche programma terminale della GUI da qualche parte ha ancora quella funzionalità di controllo del flusso abilitata per impostazione predefinita, ma in realtà non ne ho incontrato uno; i programmi di terminale gui che ho provato sembrano ignorarli completamente per impostazione predefinita, il che rende disponibile questa comoda combinazione di tasti per usi più produttivi.

Quindi se in realtà non stai usando screen / tmux dall'interno (per esempio) di un terminale Linux grezzo, ma piuttosto da un terminale basato su GUI, allora ti consiglio di ctrl-sprovare; ha reso zippare in tmux e lo schermo molto più conveniente per me.


4
Ctrl-s è la ricerca in avanti, per quando vado lontano con Ctrl-r :)
Jack O'Connor

Ctrl-S è comune per arrestare l'output della console (noto anche come "blocco"). Questo mi ha morso quando ho provato a rimapparlo.
Dave,

5

Una chiave senza conflitti può essere C-z, poiché viene solitamente utilizzata per inviare il programma in background per continuare un'altra cosa sulla shell che l'ha avviato. Non lo faccio quando ho tmux.


L'unico problema che ho avuto con l'uso di Cz è che la maggior parte delle altre persone usano Cb, quindi la mia memoria muscolare è disattivata quando si programma la coppia sulla macchina di qualcun altro. Finisco per dover correre fgmolto dopo aver sbagliato a scrivere Cz.
Steve Jorgensen,

La grande idea di Cz è che, supponendo che tu non voglia usare Ca, è molto vicino al tasto Ctrl sinistro, che è l'unico tasto di controllo sulla maggior parte delle tastiere dei computer portatili in questi giorni. Anche vicino al Blocco maiuscole se lo hai mappato su Ctrl. Mappo il mio Caps Lock su Esc poiché utilizzo spesso una tastiera Kinesis Freestyle Solo che ha il tasto Esc in un posto scomodo.
Steve Jorgensen,

4

Ho sentito parlare di `(backtick) in uso e quindi devi solo digitarlo due volte per un backtick reale. Potrebbe essere migliore per gli utenti vi che sono abituati all'azione (a meno che tu non faccia la cosa del Blocco maiuscole).


Come si può definire il backtick per tmux?
Alexandre Nizoux,

Qualcosa del tipo: unbind Cb; imposta -g prefisso ' '; bind '' send-prefix; vedere la risposta di Darren Hall sopra.
bluehavana,

Sto con il backtick da circa un anno e non tornerò mai più al prefisso a due tasti / combo. Provaci.
sickill

4

Consiglio C-j, che non interferisce molto con vi o emacs. In sostanza, concordo con un commento di Susam Pal, che sembra degno di apparire come una risposta, dal momento che gli altri sembrano avere conflitti significativi dal mio punto di vista.

Uso Cj come prefisso poiché Cj è sinonimo di j o in Vim e nessuno usa Cj per spostare una riga in basso in Vim. Ho questo nel mio ~ / .tmux.conf:

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


1
Sulla base della tua raccomandazione, sto usando Cj da un po 'di tempo e l'unico conflitto che ho riscontrato è con il plug-in vim CtrlP. Cj e Ck sono usati per spostare rispettivamente verso il basso e verso l'alto le opzioni.
Blockloop,

3

Per il layout di tastiera del programmatore Dvorak, è piuttosto semplice utilizzare un tasto meno (trattino) come prefisso, ovvero ctrl+ -.
La chiave negativa si trova sulla posizione della chiave a virgoletta singola nel layout qwerty. Inoltre ho la funzione di blocco maiuscole come tasto ctrl. Di seguito è riportato un tmux conf, per impostarlo come prefisso:

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

Potresti chiederti, perché il carattere di sottolineatura viene utilizzato invece di meno? Fare riferimento a Tmux: come si collega a C— (control-meno)?
Per qwerty, potresti applicare Come associare il tasto del prefisso tmux a C- '? soluzione, al fine di mantenere lo stesso collegamento.

Direi che questo è un prefisso perfetto se usi Vim / Neovim. Perché i prefissi, come ctrl+ ao ctrl+ b, fanno ombra (si sovrappongono) alla funzionalità di Vim, in entrambi i modi.


2

Personalmente, bè troppo lontano Ctrlper me. Quando uso tmux, cambio sempre il legame da Cb a Ca. Il conflitto principale con Ca è selezionare tutto, ma non ho riscontrato che questo sia un problema con i programmi con cui utilizzo tmux.


anzi, utilizzo il valore predefinito (sullo schermo, non ho mai provato tmux) e non ho ancora trovato la necessità di cambiarlo.
Quack Quixote,

2

Come utente GNU emacs, zsh e MS Windows, utilizzo Control-T. (ad es. in .screenrc :)

fuga "^ T ^ T"

Sì Control-T ha qualcosa di legato ad esso, come il menu a discesa nell'attitudine di Ubuntu o trasporre il personaggio in Emacs.

Ho ignorato Co perché richiede due mani per me.


2

Penso che la soluzione migliore sia ^ C. Emacs usa ^ C come chiave di prefisso e trovo che quando devo digitare ^ C in una shell quasi sempre ne scrivo due comunque. :-)

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


1

Puoi usare il backtick. Alcune versioni precedenti di tmux non supportano il backtick, quindi puoi fare quanto segue per aggirare il problema (che aggiungerebbe C-`, C- @ e C-space come meta allo stesso tempo):

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

Normalmente rimappo il mio CapsLock su Ctrl, quindi ha ancora più senso con il backtick.


Uso anche questo. C-Space è abbastanza facile da scrivere.
kzh

Il backtick è abbastanza buono. Tuttavia non è un terminale amichevole come risulta. Sicuramente non puoi sbagliare con xterm su Linux, ma terminali come putty e iTerm2 (macos) hanno problemi ad emularlo correttamente. Fortunatamente in iTerm2 puoi aggirarlo nella configurazione. Non uso molto windows / putty, quindi ctrl-space sembra essere una soluzione fattibile. :)
Alex,

1

La maggior parte delle risposte qui usa Ctrl come parte di una combinazione di tasti.
Quando ho usato Ctrl, il mio mignolo ha iniziato a farmi male perché dovevo sempre spargerlo fino a Ctrl.
Uso quello Alt-jche scrivo con il pollice sinistro e l'indice destro ed è molto comodo. Finora non ho trovato collisioni con nessun altro programma.

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

1

Per lo schermo GNU, mappando il backtick per fuggire, il seguente in ~ / .screenrc funziona per me.

escape ``


0

Penso che gli utenti Mac troveranno il §più conveniente del backtick.

Sulla tastiera non Mac , il backtick è posizionato all'incirca allo stesso tasto delle §tastiere Mac. Quindi, per provare la stessa comodità delle persone che suggeriscono di usare il backtick, usa il segno di paragrafo sulla tastiera di un Mac.

L'uso del backtick su tastiere Mac è complicato in quanto si trova molto vicino allo shift sinistro (⇧), al controllo (⌃) e ai tasti alt (⌥). Sui MacBook anche vicino al fntasto sinistro .


Definisci tastiera Mac ;-)
Arjan

Ok, hai ragione, intendevo un layout di tastiera Apple Mac US, anche se indipendentemente da una tastiera estesa estesa o da un macbook.
nanoso
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.