Alla ricerca della soluzione ALT + LeftArrowKey in zsh


130

Di recente sono passato da bash a zsh, tuttavia mi mancano i miei Alt+ LeftArrowKeye Alt+ RightArrowKeyper andare avanti e indietro una parola alla volta.

In questo momento, se premo Alt+ LeftArrowKeytorno indietro di un paio di lettere e poi sono bloccato. Non andrò più indietro e non tornerò alla fine della riga con Alt+ RightArrowKeycome mi sarei aspettato. Non posso nemmeno usare i tasti freccia per andare alla fine della riga, solo al penultimo. Non è possibile inserire nuovi caratteri sulla riga o addirittura eliminare.

Come posso riavere la mia amata scorciatoia?

Sono su Mac OS X utilizzando Terminal se è importante.

Risposte:


243

Esegui, catquindi premi i tasti per vedere i codici inviati dal collegamento.
(Premi Ctrl+ Cper uccidere catquando hai finito.)
Per me, (ubuntu, konsole, xterm) premendo Alt+ send ^[[1;3D, quindi inserisco il mio .zshrc

bindkey "^[[1;3C" forward-word
bindkey "^[[1;3D" backward-word

(In realtà preferisco usare Ctrl+ freccia per muovermi parola per parola, come in una normale casella di testo sotto Windows o Linux GUI.)

Domanda correlata: correggi le impostazioni dei tasti (Home / Fine / Inserisci / Elimina) in .zshrc durante l'esecuzione di Zsh nell'emulatore di terminale Terminator


15
Sei il mio salvatore! Sul mio Mac "Alt + <-" ha dato "^ [b" e -> ha dato "^ [f", quindi ho aggiunto questi. Funziona come un fascino. Le frecce Ctrl + sono riservate per passare da un desktop all'altro su Mac.
Mads Ohm Larsen

1
Una nota è che per ctrl + <- cat stava segnalando ^[[Dper me mentre ctrl + v stava segnalando ^[OD. Il suggerimento di Ctrl + v ha funzionato, ma quello di gatto no. Inoltre, ctrl + v riportava la stessa cosa sia per alt + <- che per alt + ->. Sono stato in grado di aggiungere questi due guardando l'output di gatto e sostituendo qualsiasi "[[" con "O"
Mike S

10
il mio output sotto cat è ^[^[[Cper la parola in avanti e ^[^[[Dper la parola all'indietro, ma l'aggiornamento per questi in .zshrc non ha funzionato per qualche motivo.
Yunti

2
@ Yunti - Mettere bindkey "^[^[[D" backward-worde bindkey "^[^[[C" forward-wordin ~ / .zprofile ha funzionato per me!
Fernando Espinosa

Uomo! Salvato la mia vita! grazie per la condivisione!
Joao Henrique

187

Per chiunque utilizzi iTerm, indipendentemente dalla shell

Tutte le soluzioni qui offerte adottano un approccio all'indietro a mio parere. In pratica stai dicendo alla tua shell di ascoltare qualche sequenza esc o altra associazione di tasti che hai impostato nel tuo terminale, creando problemi di compatibilità quando cambi shell (se usi SSH in qualche altra shell, passi da BASH a ZSH, ecc. E perdi alcune se non tutte le tue associazioni di tasti).

La maggior parte delle shell ha una serie di sequenze predefinite che vengono pre-associate. Inoltre, sebbene non siano coerenti al 100%, sono abbastanza vicini. Quindi il modo più semplice che ho trovato per creare combinazioni di tasti per una particolare azione nella shell è dire alla tua applicazione terminale di collegarsi alle associazioni di tasti predefinite che sono coerenti tra le shell.

Ho scritto una soluzione di compressione per far sì che il tuo terminale risponda il più vicino alle associazioni di tasti native del Mac qui

Apri le preferenze di iTerm + ,e vai alla Profilesscheda (la Keysscheda può essere utilizzata, ma l'aggiunta della combinazione di tasti al tuo profilo ti consente di salvare il tuo profilo e sincronizzarlo su più computer) e la keyssottoscheda e inserisci quanto segue:

Sposta il cursore di una parola a sinistra

+ Invia codici esadecimali:0x1b 0x62

Sposta il cursore di una parola a destra

+ Invia codici esadecimali:0x1b 0x66

E questo dovrebbe darti il ​​comportamento desiderato non solo in ZSH, ma anche se esegui SSH in un server che esegue BASH, irb / pry, node ecc.


1
Avevo problemi con la soluzione accettata perché avevo zsh che funzionava bene ma non irb e altre console. La cancellazione delle impostazioni precedenti (nel profilo iTerm come suggerito) funziona a meraviglia!
llekn

1
La soluzione bindkey produrrebbe un fastidioso suono di errore su Mac. Questo dovrebbe essere il modo giusto per farlo.
Weishi Zeng

@Lev Probabilmente perché la tua shell non è mappata alla configurazione predefinita. Esegui bindkey | grep forward-worddovresti vedere "^[f" forward-wordrestituito, ma se non lo fai, hai 2 opzioni. mappare a uno degli altri restituiti o aggiungerlo "^[f" forward-wordal tuo .zshrc.
Travis

Noterò che "^[f"sembra essere il binding più utilizzato in modo coerente per l' forward-worduso tra le shell e l'unico impostato di default nella mia versione di bash.
Travis

In qualche modo ha funzionato con il pulsante di comando per me invece che con l'opzione. Grazie uomo. :)
Vaibhav Jain

72

L'aggiunta di quanto segue a ~ / .zshrc ha funzionato per me su OSX Mountain Lion.

bindkey -e
bindkey '[C' forward-word
bindkey '[D' backward-word

4
Questa soluzione fa scattare un "campanello" in iTerm 2 ad ogni utilizzo, quindi saltare tra le parole può diventare davvero fastidioso.
Matthew Morek

1
chiunque capisca come impedire che ciò accada ^ @MatthewMorek
Daniel Kobe,

18
"\ e \ e" impedisce il campanello. La mia configurazione su El Capitan con iTerm 2 in modalità di compatibilità Terminal è bindkey "\e\e[D" backward-word bindkey "\e\e[C" forward-word
Johannes Gontrum

Grazie, questo ha risolto il problema su macOs Sierra. Non ricevo alcun suono di campana né su Terminal né su iTerm2.
Raspo

Come si imposta in modo che si sposti dalla fine delle parole e non dall'inizio o da esse?
Mafro34

23

Su MacOS High Siera 10.13.6 o Mojave 10.14.2 e utilizzando iTerm2 con ZSH Per passare dalle parole devo mettere in questo modo:

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

Un'altra soluzione non funziona per me


1
Questa è l'unica soluzione che ha funzionato anche per me. Grazie! Mac OS Mojave
jamescampbell

Funziona anche su OS Catalina!
Reed Richards,

7

Sebbene non risponda rigorosamente alla tua domanda, l'associazione predefinita per forward-worde backward-wordsono alt-frisp. alt-b.

Funziona ovunque, non richiede di lasciare la riga home e ha una bella proprietà mnemonica (f = avanti, b = indietro), pur essendo coerente con ctrl-fed ctrl-bessendo forward-charactere backward-character.

Strappa i tasti freccia!


4
non funziona per me in zsh / iterm2, stampa ƒ e ∫ (cb cf funziona).
Davorin

2

Per farlo funzionare per me ho usato questa risposta , tuttavia ho dovuto scambiare i codici (sinistra <-> destra)

⌥ + ← Invia codici esadecimali: 0x1b 0x66
⌥ + → Invia codici esadecimali: 0x1b 0x62

e aggiungi quanto segue al mio ~/.zshrc

bindkey -e
bindkey "^[b" forward-word
bindkey '^[f' backward-word

Probabilmente sarebbe meno confuso se cambiassi il tuo bindkeyinvece, per legare ^[fa forward-worde non a backward-word.
Nickolay

1

Su Mavericks (10.9.4) il codice è 1; 5 ... quindi per associare alt con le frecce ho il mio .zshrc che usa questo:

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

Puoi usare CTRL + V e poi il comando che vuoi usare

in Yosemite usa la soluzione di Rob


1
bindkey "[C" forward-word bindkey "[D" backward-word
Farkie

0

In zsh, puoi utilizzare il bindkeycomando per visualizzare le scorciatoie da tastiera.

Utilizzare bindkeyper esplorare le opzioni disponibili senza combinazioni di tasti personalizzate.

Vale ^[b a dire per andare indietro di una parola e ^[fper andare avanti di una parola.

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.