Come spostare il cursore parola per parola nel Terminale OS X.


762

Conosco la combinazione Ctrl+ Aper saltare all'inizio del comando corrente e Ctrl+ Eper saltare alla fine.

Ma c'è un modo per saltare parola per parola, come fa Alt+ / nelle applicazioni Cocoa?


2
Che shell stai usando? Bash?
Sargun Dhillon,

4
iTerm2 è molto più bello del terminale integrato. Di seguito ho pubblicato le istruzioni su come personalizzare la tastiera :)
cwd

21
I ALTcollegamenti sono stati aggiunti a Terminal nell'ultima versione di OS X.
Mosty Mostacho,

7
Questo non è fuori tema secondo me, la shell Bash è un ambiente di programmazione rilevante e i collegamenti readline sono pervasivi nella maggior parte delle app della CLI Linux più popolari. Inoltre, guarda il numero di voti espressi dalla community.
GL2014,

11
Riaprendo il voto, OS X Terminal conta molto come strumento di programmazione.
Djechlin,

Risposte:


567

Fuori dalla scatola puoi usare il Esc+ abbastanza bizzarro Fper spostarti all'inizio della parola successiva e Esc+ Bper spostarti all'inizio della parola corrente.


47
Era inopportuno ripremere entrambi i tasti per rieseguire nuovamente il comando. Trovo piuttosto zoppo farlo nel Terminale Mac OSX, rispetto al Terminale GNOME.
Phương Nguyễn,

245
È possibile abilitare "Usa opzione come meta chiave" in Terminale> Preferenze> Impostazioni> [profilo]> Tastiera . Quindi non è necessario digitare manualmente l'esc separatamente.
Chris Page

7
Inoltre, se premi Esc+ Fquando alla fine di una riga o l'altra combinazione di tasti all'inizio della riga, inserisce invece la lettera. Fastidioso!
Noldorin,

10
Ri "bizzarro": "F" e "B" stanno per "Avanti" e "Indietro". Control-F sposta il cursore in avanti di un carattere e Control-B sposta il cursore indietro di un carattere. L'uso del modificatore Meta (o ESC) significa "sposta le parole". Questi sono attacchi compatibili con emacs. Se stai usando bash, c'è un'opzione per usare i binding compatibili con vi, oppure puoi personalizzarli interamente con ~/.inputrc.
Chris Page

5
L'utilizzo dell'opzione come meta non è purtroppo un'opzione per quelli di noi che hanno bisogno del tasto opzione per digitare importanti simboli shell come ~ e | (come su una tastiera francese).
Eric O Lebigot,

417

Su Mac OS X: le seguenti scorciatoie da tastiera funzionano per impostazione predefinita. Nota che devi fare in modo che il tasto Opzione si comporti come Meta nelle preferenze del Terminale (nella scheda della tastiera)

  • alt (⌥)+ FSaltare F ORIZZONTE da una parola
  • alt (⌥)+ Bper saltare B in avanti di una parola

Ho osservato che i tasti di scelta rapida di emacs predefiniti per la semplice navigazione del testo sembrano funzionare su shell bash. Puoi usare

  • alt (⌥)+ Dper eliminare una parola a partire dalla posizione corrente del cursore
  • ctrl+ Aper saltare all'inizio della linea
  • ctrl+ Eper saltare alla fine della linea
  • ctrl+ Kper eliminare la linea a partire dalla posizione del cursore
  • ctrl+ Yper incollare il testo dal kill buffer
  • ctrl+ Rper invertire la ricerca dei comandi digitati in passato dalla cronologia
  • ctrl+ Sper inoltrare la ricerca (funziona in zsh per me ma non bash)
  • ctrl+ Fper avanzare di un carattere
  • ctrl+ Bper spostarsi indietro di un carattere
  • ctrl+ Wper rimuovere la parola indietro dalla posizione del cursore

1
Grazie! Mi chiedevo perché non ha funzionato fuori dagli schemi, è esattamente quello di cui avevo bisogno.
Flov,

11
Puoi cambiare meta in iterm2 come segue: Preferenze -> Profili -> Tasti -> Tasto opzione sinistro funziona come +ESC, quindi puoi usare OPZIONE f / b per spostare la parola avanti e indietro di conseguenza. Altro
Alan Dong,

5
[ Ctrl + W ] - per rimuovere la parola indietro dalla posizione del cursore
YemSalat

[ctrl + u] - per eliminare l'intera voce
Cornelius,

286

Ecco come puoi farlo

Per impostazione predefinita, il Terminale ha queste scorciatoie per spostare (sinistra e destra) parola per parola:

  • esc+ B(a sinistra)
  • esc+ F(a destra)

Puoi configurare alt+ e generare quelle sequenze per te:

  • Apri le preferenze del Terminale ( cmd+ ,);
  • Nella scheda Impostazioni, seleziona Tastiera e fai doppio clic ⌥ ←se è presente, oppure aggiungilo se non lo è.
  • Impostare il modificatore come desiderato e digitare il tasto di scelta rapida nella casella: esc+ B, generando il testo \033b(non è possibile digitare questo testo manualmente).
  • Ripeti per la parola a destra ( esc+ Fdiventa \033f)

In alternativa, puoi fare riferimento a questo post sul blog su textmate:

http://blog.macromates.com/2006/word-movement-in-terminal/


7
Per gli utenti di MacOSX 10+ e iTerm: assegnare i tasti di scelta rapida alle preferenze globali o come combinazione di tasti del profilo. Assicurati di selezionare: "Invia sequenza di escape" sul menu a discesa selezionare e di ingresso solo Bper tornare o Fper avanti nel Esc+campo
Gus

+1 per un grande mnemonico a cui non avevo pensato prima. Sicuramente / purtroppo non lo ricorderò ora perché ho configurato alt lefte alt rightgenerato quelle sequenze
Arc676

Se aggiungo il Key Mapping al Terminale, lo lega a '^ [B' invece di Esc-B.
Andrea Bergonzo,

164

Passa a iTerm2 . È gratuito e molto più bello del semplice vecchio terminale. Inoltre ha molte più opzioni per la personalizzazione, come le scorciatoie da tastiera.

Inoltre mi piace che tu possa usare cmde 1-9 per passare da una scheda all'altra. Provalo e non tornerai mai al terminale normale :)

Come impostare le preferenze di tastiera personalizzate in iterm2

  • Installa iTerm2
  • Avviare e quindi andare al riquadro delle preferenze.
  • Scegli la scheda dei profili della tastiera
  • Dovrai copiare il profilo su qualcosa di nuovo e quindi eliminare le scorciatoie da tastiera come ^+ Right/ Lefto se non ti interessa un backup, cancellale dal profilo predefinito.
  • Quindi assicurati che il tuo profilo modificato sia selezionato (con Speciali)

Immagine 1.png

  • Ora scegli la scheda della tastiera (riga in alto)

iTerm 2

  • Fare clic sul pulsante più per aggiungere una nuova scorciatoia da tastiera
  • Nella prima casella digitare CMD+Left arrow
  • Nella seconda casella selezionare "invia codice di escape"
  • Nella terza casella digitare la lettera B

Immagine 2.png

  • Ripetere con le combinazioni di tasti desiderate. escape+ Bsposta una parola a sinistra, escape+ fsposta una parola a destra.
  • potresti anche voler impostare cmd+ dper eliminare la parola davanti al cursore con escape+d

Spesso premo il pulsante sbagliato ( cmd/ control/ alt) con un tasto freccia e quindi ho le mie combinazioni di tasti freccia con quei pulsanti tutti impostati per saltare le parole avanti e indietro, ma per favore fai quello che ti si adatta meglio.


4
Non importa quello che faccio, non riesco a entrare Ctrl + Arrow Lefto Right- Upe Downfunziona: / provato con e senza il nuovo profilo impostato come predefinito
Tobi

4
Soluzione: ho dovuto disabilitare le scorciatoie per il controllo della missione in Preferenze di Sistema di MacOS -> Tastiera :)
Tobi,

Le istruzioni precedenti non funzionano più con iTerm2. Si prega di consultare le mie risposte di seguito per iTerm2 Build 3.3.4.
Hang

150

In realtà c'è un approccio molto migliore. Tenere premuto option( altsu alcune tastiere) e premere i tasti freccia sinistra o destra per spostarsi per parola. Semplice come quella.

option
option

Inoltre ctrleti porterà alla fine della linea e ctrlati porterà all'inizio.


2
A volte questo non funziona in alcuni casi. Per me, quando ho aperto Terminal.app, andava bene, ma per IntelliJ, ha appena stampato [De [C. Per risolvere questo problema, aggiungi bind '"[D": backward-word'e bind '"[C": forward-word'al mio .bashrc.
Jamie Counsell,

@JamieCounsell Ho aggiunto qualcosa di associato al mio .bashrcma non ha funzionato, qualcosa di sbagliato per me? (Uso RubyMine)
张艳军

@ 张艳军 Non sono sicuro se RubyMine legge .bashrcall'avvio del terminale. Prova a echo "here"vedere se quel messaggio viene visualizzato quando apri un nuovo terminale. Inoltre, devi chiudere e riaprire il terminale o eseguirlo source ~/.bashrcper farlo leggere il nuovo file.
Jamie Counsell,

79

Ho Alt+ / working: apri Preferenze »Impostazioni» Tastiera , imposta la voce per il cursore dell'opzione a sinistra per inviare la stringa alla shell: \ 033b e imposta il cursore dell'opzione a destra per inviare la stringa alla shell: \ 033f . Puoi anche usarlo per altre combinazioni di tasti Control.


20
Per ottenere \ 033b, devi effettivamente premere Esc, quindi b.
Matthew Schinckel,

7
Sono su Snow Leopard e scopro che funziona solo quando lo abiliti Enable option as meta key. A proposito, è molto bello. La chiave sarà sicuramente molto più comoda da raggiungere rispetto a Esc + B o Esc + F
Phương Nguyễn

2
Per curiosità, cosa sta succedendo esattamente qui? Perché questo codice è diverso all'inizio in OSX? Come posso trovare altri codici simili?
Koobz,

nel mio mac Preferenze> Profili> Chiavi tasto opzione sinistra impostato come + Ecs
Arun

38

In realtà dipende da quale shell si utilizza, tuttavia la maggior parte delle shell ha associazioni simili. I bind a cui ti riferisci (ad es. Ctrl+ AE Ctrl+ E) sono bind che troverai in molti altri programmi e sono usati da anni, BTW funziona anche nella maggior parte delle app dell'interfaccia utente.

Ecco uno sguardo ai collegamenti predefiniti per Bash:

Scorciatoie da tastiera più importanti di Bash

Si noti inoltre che è possibile personalizzarli. Devi creare un file, il nome che desideri, ho chiamato il mio .bash_key_bindings e l'ho messo nella mia directory home. Lì puoi impostare alcune opzioni bash generali e puoi anche impostare le combinazioni di tasti. Per essere sicuri che vengano applicati, è necessario modificare un file chiamato ".bashrc" che bash legge all'avvio (è necessario crearlo, se non esiste) ed effettuare la seguente chiamata lì:

bind -f ~/.bash_key_bindings

~ significa home directory in bash, come detto sopra, puoi nominare il file come preferisci e anche posizionarlo dove preferisci fintanto che inserisci il percorso corretto + nome da associare.

Lascia che ti mostri alcuni estratti del mio file .bash_key_bindings:

set meta-flag on
set input-meta on
set output-meta on
set convert-meta off
set show-all-if-ambiguous on
set bell-style none
set print-completions-horizontally off

Questi settano solo un paio di opzioni (es. Disabilitare la campana; questo può essere cercato nella pagina web di bash).

"A": self-insert
"B": self-insert
"C": self-insert
"D": self-insert
"E": self-insert
"F": self-insert
"G": self-insert
"H": self-insert
"I": self-insert
"J": self-insert

Questi si assicurano che i personaggi da soli non facciano altro che assicurarsi che il personaggio sia "digitato" (si inseriscono nella shell).

"\C-dW": kill-word
"\C-dL": kill-line
"\C-dw": backward-kill-word
"\C-dl": backward-kill-line
"\C-da": kill-line

Questo è abbastanza interessante Se premo Ctrl+ Dda solo (ho selezionato d per eliminare), non succede nulla. Ma se poi digito una lettera minuscola w, la parola a sinistra del cursore viene eliminata. Se scrivo in maiuscolo, tuttavia, la parola a destra del cursore viene eliminata. Lo stesso vale per le L per l'intera linea a partire dal cursore. Se digito una "a", l'intera riga viene effettivamente eliminata (tutto prima e dopo il cursore).

Ho messo saltando una parola in avanti su Ctrl+ Fe una parola all'indietro su Ctrl+B

"\C-f": forward-word
"\C-b": backward-word

Come puoi vedere, puoi creare una scorciatoia, che porta immediatamente a un'azione, oppure puoi farne una, che inserisce solo una sequenza di caratteri e quindi devi digitare uno (o più) caratteri per far sì che un'azione abbia luogo come mostrato nell'esempio più sopra.

Quindi, se non sei soddisfatto dei collegamenti predefiniti, sentiti libero di personalizzarli come preferisci. Ecco un link al manuale di bash per ulteriori informazioni.


come è il commandcodice chiave? Nel tuo esempio, controlè \C, ma come è command?
Paschalis,

Fondamentalmente voglio mappare Ctrl + A a cmd + sinistra (vai all'inizio della riga)
Paschalis

1
@Paschalis Su MacOS X, il tasto di comando è mappato Metain bash ( \M), cmd + left sarebbe \M-\e[D. Tuttavia, non è possibile mappare cmd + ... a nulla, tutte le scorciatoie da comando sono gestite (e quindi ingoiate) dall'app Terminal stessa (quelle non vengono mai inoltrate alla shell) e cmd + ha lasciato le mappe alla "finestra precedente" se si hanno più le finestre del terminale si aprono. Spiacenti, non è possibile con l'app Terminal.
Mecki,

18

Usa il preset di modifica del testo naturale !

inserisci qui la descrizione dell'immagine

Fondamentalmente si lega, tra le altre sequenze di tasti, Opzione + freccia sinistra per ^[bsequenza e Opzione + freccia destra per^[f

Funziona in pesci e bash, così come nel terminale psql.


Questo è il modo più efficiente di impostare una buona vecchia mappatura per le chiavi. Grazie!
fedesismo,

Nel caso in cui qualcun altro venga confuso come me, tenere presente che questa preimpostazione è disponibile solo nella sottoscheda Chiavi del profilo , non nella scheda Chiavi di livello superiore .
ben-albrecht,

15

Se ti capita di essere un utente Vim, potresti provare la modalità vim di bash. Esegui questo o inseriscilo nel tuo ~/.bashrcfile:

set -o vi

Di default sei in modalità inserimento; premi Esc e puoi muoverti come puoi in Vim in modalità normale, quindi il movimento per parola è wo b, e anche i soliti tasti di movimento funzionano .


15

Se controlli Use option as meta keynella scheda della tastiera delle preferenze, i comandi di stile emacs predefiniti per rispettivamente le parole avanti e indietro e ⌥F( Alt+ F) e ⌥B( Alt+ B).

Consiglierei di leggere da Bash a Z-Shell . Se vuoi aumentare la tua abilità bash / zsh!


1
Sì, funziona. Ma il problema è quando voglio digitare parentesi graffe ([] {} |) che sono su Opzione-7, Opzione-8 e Opzione-9. Le opzioni ora sono meta quindi finisce con Meta-7, Meta-8 ... Qualche idea?
Martin Wickman,

12

A partire da Mac OS X Lion 10.7, Terminale esegue il mapping da Option- Left/Right Arrowa Esc- b/fper impostazione predefinita, quindi ora è integrato per bash e altri programmi che utilizzano questi tasti di scelta rapida compatibili con emacs.


12

Tieni premuto il tasto Opzione e fai clic sul punto in cui desideri spostare il cursore


1
Non è una brutta soluzione.
duyn9uyen,

8

In Bash, questi sono legati a Esc- Be Esc- F. Bash ha molte, molte più scorciatoie da tastiera; dai un'occhiata all'output di bind -pper vedere cosa sono.


4

Sotto iterm2's Preferenze> Profilo> chiavi , si sceglie il +sotto chiave Mapping e registrare un nuovo collegamento. Per Azione , selezionare Send Escape Sequencee digitare bof per le versioni precedenti e successive.

Quando ho provato a registrarne uno per ( Ctrl+ ), ho notato nel campo Scorciatoia da tastiera che la freccia non veniva mai visualizzata. Ho scoperto che ho dovuto disabilitare prima le Preferenze di Sistema del Mac > Tastiera> Scorciatoie> Scorciamenti di Mission Control per far funzionare le cose, poiché sovrascriveranno le scorciatoie predefinite di iterm2. Dovrebbe essere vero anche per l'app terminale standard.

Preferenze di sistema della tastiera


1

Nuova risposta per gli utenti iTerm2 Build 3.3.4:

Passaggio 1: (macOS X) Preferenze di Sistema> Tastiera> scheda Scorciatoie> Seleziona Mission Control (riquadro a sinistra)> Deseleziona le scorciatoie etichettate come "Sposta a sinistra uno spazio" e "Sposta a destra uno spazio"

Passaggio 2: (iTerm2 Build 3.3.4) Preferenze> Profili> Seleziona * Predefinito (riquadro sinistro)> scheda Chiavi> Elimina entrambe le voci "⌥->" e "⌥ <-"> Imposta entrambe le opzioni "Opzione sinistra (⌥): "e" Tasto opzione destra (⌥): "su Esc +

Non si scherza con i profili della shell, non si scherza con il terminale masOS (predefinito) inferiore, senza Esc + F / B imbarazzanti, sciacquare e ripetere senza senso.

Affare fatto!!!

Goditi questo consiglio, miei compagni PROGRAMMATORI!


0

Come già detto in precedenza, puoi aggiungere le set -o vitue combinazioni di tasti / da ~/.bashrcusare , oppure puoi aggiungere la seguente parte per spostarti con i tasti freccia e:vivim.bashrcCtrl

# bindings to move 1 word left/right with ctrl+left/right in terminal, just some apple stuff!
bind '"\e[5C": forward-word'
bind '"\e[5D": backward-word'
# bindings to move 1 word left/right with ctrl+left/right in iTerm2, just some apple stuff!
bind '"\e[1;5C": forward-word'
bind '"\e[1;5D": backward-word'

Per iniziare l'effetto di queste righe di codice, source ~/.bashrco avviare una nuova sessione 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.