Schermata Bash vs. Gnu: sostituisci Ctrl-A con Ctrl-Shift-A


44

Sono un nuovo utente di GNU Screen. Uso Bash da molto tempo e voglio provare GNU Screen.

Come sapete, GNU Screen usa 'Ca' (Control-A) come carattere di comando. Il problema è che questo interferisce con la funzione di modifica della linea in Bash (e GNU Readline), perché Control-A in Bash si sposterà all'inizio della riga. "

So di poter impostare il carattere di comando su un'altra sequenza di tasti , come "^ Q" o "` `" (Backtick), ma ho difficoltà a trovare un'altra sequenza di tasti che non è già in uso (^ Q viene utilizzato dal terminale , backtick viene utilizzato quando si scrivono script di shell). Sembra che il personaggio di comando possa essere lungo solo uno o due caratteri. Posso impostare il carattere di controllo dello schermo GNU in modo che sia simile a "Control-Shift-A"?

(Non posso ancora usare più di un collegamento ipertestuale, quindi non posso collegarmi alla documentazione di Bash)


5
Per non disorientarsi quando si utilizza screensu altri sistemi, si consiglia di attenersi ai tasti predefiniti o almeno di impararli prima. ^A a, per impostazione predefinita, invierà la solita ^Acombinazione di tasti. È un po 'scomodo se usi molto quella combo; Di solito uso la HOMEchiave invece per questo. Ma poi non funziona neanche quello.
intuito il

Nessun amore qui per Ctrl-spazio. Funziona alla grande.
Wildcard il

Risposte:


18

Il problema con Control- Shift- Aè che la maggior parte dei programmi di emulazione terminale non invia un codice diverso da quello inviato da Control- A, quindi non ci sarebbe modo per lo schermo di dire la differenza.

Potresti essere in grado di usare Cq se stty -ixondisabiliti il ​​"controllo di flusso del software" su tty. Di solito lo faccio in modo da poter usare Cs per cercare dalla riga di comando.

Potresti considerare C- ^, poiché sembra essere generalmente non associato. È Control- Shift- 6su layout di tastiera statunitensi, ma potrebbe essere difficile digitare su altri layout.

La maggior parte delle persone non usa mai il carattere di controllo tty C- \ per inviare SIGQUIT. Per usarlo, disabilitare la funzionalità tty con con stty quit undefe associarla come chiave prefisso. Questo è un po 'rischioso, poiché se si preme C- \ su un tty in cui la chiave quit non è stata disabilitata con stty , è possibile interrompere il processo in primo piano invece di attivare lo schermo .

Sono passato a tmux qualche tempo fa. Il suo valore predefinito è Cb perché è stato sviluppato sotto lo schermo e non ha interferito con il valore predefinito dello schermo . Ho scoperto che Cb funziona abbastanza bene per me (di solito uso i tasti freccia per il movimento di singoli caratteri sulla riga di comando della shell, anche se utilizzo Mb e Mf per muovermi a parole).

Per inciso, l'autore di tmux usa Ca nelle sue sessioni primarie e digita sempre Ca due volte (sia in una sessione tmux o meno). Se sei disposto ad adottare questa abitudine, sembra un discreto compromesso poiché la seconda CA dovrebbe essere una no-op nella maggior parte dei contesti di editing simili a quelli di Emacs. Non funzionerebbe così se utilizzi spesso programmi / contesti al di fuori dello schermo in cui la seconda CA non sarebbe una no-op.

Per impostazione predefinita, Ca Ca è associato all'altro comando (passa alla schermata attiva più recente) nella schermata . Per fare in modo che Ca Ca invii un Ca effettivo e abbia Ca o switch windows, inserisci quanto segue nel tuo .screenrc:

escape ^A^A
bind o other

2
Questo suona bene, poi mi sono reso conto che nella schermata GNU, digitando Ca due volte si passa alla finestra visualizzata in precedenza. Forse posso mappare "Ca Ca" su qualcos'altro, anche se non sono davvero sicuro di come farlo (sembra che per questo debba specificare 'escape xy' o 'meta'). Vedi gnu.org/software/screen/ manual / screen.html # Altra finestra
Stefan Lasiewski,

1
@Stefan Lasiewski: Oops, ho dimenticato che Ca Ca non invia Ca per impostazione predefinita. Vedere l'aggiunta alla fine della risposta per un po 'di configurazione che consente a Ca Ca di inviare Ca e Ca o passare alla finestra precedente.
Chris Johnsen,

Funziona alla grande! Ca Ca invierà un vero Ca alla shell sottostante e Ca o 'passerà alla finestra' altro '. Per inviare "Ca" a Bash, premi "Ca" due volte. Questo dovrebbe essere un no-op al di fuori dello schermo e non dovrebbe causare problemi.
Stefan Lasiewski,

41

Non è necessaria la soluzione alternativa.
Per spostarti all'inizio della riga mentre usi lo schermo in bash, usa

Control- A(rilasciare e quindi)A


In generale, se c'è un carattere di controllo dello schermo in conflitto con un collegamento bash, il primo collegamento bash Controlverrà sostituito con Control-A

Allo stesso modo per altre scorciatoie per la modifica delle righe.


grazie, non l'ho fatto ora, anche se è così facile. davvero non c'è bisogno di riconfigurare nulla. mi piace la tua risposta al meglio.
Harald,

+1 ty: questa è di gran lunga l'opzione migliore. La cosa divertente è che, provando questo, ho colpito Ca Ca per caso e ho trovato l'ennesima fantastica combinazione.
kfmfe04,

3

Uso C- \ per lo schermo e non posso raccomandarlo abbastanza. È possibile selezionare qualsiasi altra definizione chiave in caso di incidente, ma in genere non C- \. Questo è quello che mi piace al riguardo.


3

Io lo usoscreenrc

escape ^bb

Esempio: per staccare si digita ctrl-b d


0

Uso ctrl-_ (che può anche essere prodotto da ctrl + 7 e di solito ctrl + /) con schermo / tmux.


0

Uso ctrl-z il più delle volte, ma uso anche ctrl-x per alcuni. Non uso l'interruzione 'stop' così tanto, ma quando è necessario, posso digitare ^ zz. Questo mi permette anche di avviare sessioni secondarie su server remoti che usano il predefinito ctrl-a. E se inizio una terza sessione (su un terzo server), allora posso usare ctrl-x. Ctrl-x è la funzione di blocco dello schermo, che in molti ambienti non è affatto normale (poiché lo schermo è spesso in esecuzione all'interno di un emulatore di terminale).

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.