Perché Ctrl-Arrow non funziona in bash su OS X?


15

Uso Ctrl- e Ctrl- su ogni sistema Linux su cui lavoro, ma queste combinazioni di tasti non funzionano bash sul mio Macbook Pro. Esegue Snow Leopard e sto utilizzando l'applicazione Terminale integrata.

Le combinazioni di tasti non sembrano essere catturate da nulla prima o da Terminale, perché se faccio ssh su uno dei miei server Linux, posso usare Ctrl- / per passare alla parola successiva / precedente sulla riga di comando. Tuttavia, quando provo questa combinazione di tasti in bash sul mio Macbook, ottengo solo "C" per la freccia destra e "D" per la freccia sinistra.

Qualche idea su come posso far funzionare queste chiavi in ​​Darwin Bash?


2
Se stai usando Spaces, Ctrl + freccia di default cambia spazio.
mark4o

Risposte:


13

OS X usa la chiave emacs vincolando il mio valore predefinito. Questo è vero praticamente ogni applicazione su OS X, è piuttosto carina. Significa che cose come Ca e Ce sono l'inizio / fine della linea. Ottieni anche l'uccisione di parole all'indietro con M-backspace, oh, e linea di uccisione con Ck.

Ciò dovrebbe significare che nel terminale le parole avanti / indietro sono associate rispettivamente a Mf e Mb (M = Meta = alt / opzione), ma non è così. Su OS X forward / backword-word sono associati a M- → e M- ← per impostazione predefinita.

Puoi modificare questo comportamento cambiando il modo in cui la libreria GNU Readline è configurata per il tuo account. Questo avviene nel tuo ~/.inputrcfile. Puoi ottenere un grande elenco di comandi associabili man readlinee nella documentazione online come questa qui. .

Quindi, per rispondere alla tua domanda, vuoi rimappare ciò che Readline fa quando vede C- → e C- ← per fare ciò che fa sul tuo server Linux.

La sintassi di un ~/.inputrcfile è abbastanza semplice per quello che si vuole fare: key-sequence: action.

Questo dovrebbe essere ciò di cui hai bisogno per ottenere il comportamento desiderato:

"\e[5C": forward-word
"\e[5D": backward-word

Ecco un'altra pagina con ulteriori utili collegamenti.

(Probabilmente potresti scappare copiando / etc / inputrc dal tuo box Linux sul tuo OS X ~ / .inputrc)


Una nota: Se si utilizza tmux con xterm-chiavi molto, sarà anche necessario \e[1;5Ce \e[1;5Dad anche grilletto forward-worde backward-word.
Arne,

2
Un'altra nota: se continua a non funzionare, potrebbe essere a causa di un conflitto di scelta rapida con Controllo missione / Spazi. Preferenze di Sistema -> Tastiera -> Tasti di scelta rapida -> Controllo missione, Sposta a sinistra / a destra di uno spazio
bhh1988

Non capisco "OS X utilizza per impostazione predefinita l'associazione dei tasti emacs". "Ctrl-freccia" è anche un'associazione chiave emacs.
Greg

3

inserire le ~/.inputrcseguenti righe:

"\e[5C": forward-word
"\e[5D": backward-word

0

In questi giorni sembra che le sequenze di escape emesse da Ctrl-Frecce nel terminale siano cambiate. Ecco cosa funziona per me da oggi (fine 2018):

"\e[1;5C": forward-word "\e[1;5D": backward-word

Nota: puoi sempre capire le sequenze di escape effettive digitando cat -vnel Terminale e premendo Ctrl-Freccia sinistra o Ctrl-Freccia destra. Ecco un esempio di output per la mia freccia Ctrl-Sinistra:

^[[1;5C ^[[1;5C

Per tradurre in .inputrcgergo, sostituire il segno di escape ^[con \ee inserire il risultato tra virgolette doppie.


0

Come menzionato @ bhh1988, la configurazione di Mission Control impedisce ai tasti Ctrl di funzionare con i tasti freccia bash. Non volevo interferire con queste scorciatoie, quindi uso invece il tasto Opzione (cioè Alt). Attualmente su Mojave usando una tastiera tedesca (non so se è rilevante) ho inserito quanto segue .inputrcper usare Opzione-freccia-sinistra e Opzione-freccia-destra per spostarmi tra le parole.

"\e\e[C": forward-word
"\e\e[D": backward-word

0

AGGIORNAMENTO Gennaio 2020

Nelle versioni più recenti di OSX la shell predefinita è zsh. Pertanto l'incantesimo magico per far funzionare ctrl-arrowleft e ctrl-arrowright come previsto è il seguente:

bindkey '^[[1;5D' backward-word
bindkey '^[[1;5C' forward-word

(mettilo nel tuo .zshrc)

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.