Come saltare le parole nel terminale OS X?


11

Diciamo che ho scritto un lungo comando nel terminale Mac OSX, cioè

say "Hello, how are you? I am good thank you. How is it going with you? Fine, thanks"

e ora voglio cambiare la parola Helloin Hi.

Per farlo, in questo momento devo continuare a premere (o tenere premuto) il tasto sinistro della tastiera fino a quando il "cursore" arriva alla fine della parola Hello, quindi eliminarlo. La solita tecnica "tenendo premuto" non funziona come nella maggior parte delle altre applicazioni OS X.

Esiste invece un modo per saltare una parola alla volta (o qualsiasi altro modo più breve per ottenere il cursore lì)?

Risposte:


19

La modifica della riga di comando è una funzione della shell, non di Terminale . Probabilmente la tua shell è bash e probabilmente il suo stile di modifica della riga di comando è impostato su "emacs".

Ecco alcune delle combinazioni di tasti in stile Emacs che potresti trovare utili:

  • Circa: beginning-of-line
  • Ce: end-of-line
  • Mf: forward-word
  • MB: backward-word
  • CD: delete-char
  • Md: kill-word(cancella la 'parola' successiva)
  • M-DEL: backward-kill-word

C- x significa Control+ x, quindi Ca è Control+ a.

M- x significa Meta+ x, ma probabilmente non c'è alcun tasto Meta sulla tastiera. Quindi, invece, puoi usare ESC x (cioè Escapeallora x). Il terminale ha un'impostazione per inviare automaticamente ESC prima di premere i tasti Optiontenendo premuto. L'uso di questa funzione disabilita la gestione estesa dei caratteri che Mac OS X solitamente fornisce quando si utilizza il modificatore Opzione. Quindi, se usi pochi caratteri estesi e vuoi avere Option+ xinviare ESC x , puoi abilitare questa opzione Terminale .

Esistono molti modi per passare a "Hello" nel tuo esempio:

  • Cerca “Hello”: Cr H ello Cj (o ESC)
    • In Emacs normali, dovresti semplicemente usare RET ( Return) per terminare la ricerca nella posizione corrente e tornare alla modifica. Ma in bash , i collegamenti predefiniti fanno sì che RET (cioè Cm) esegua sempre la linea corrente, anche se è attiva una ricerca incrementale. Quindi la parte Cj / ESC è una deviazione dai normali Emacs.
  • Salta all'inizio della riga e vai avanti: Ca Mf Cf (o )
  • Salta all'inizio della riga, quindi muoviti con le parole: Ca Mf Mf Mb
  • Usa Mb molto (fattibile solo se mappi Opzione su Meta).

Esistono anche diversi modi per ottenere la sostituzione desiderata:

  • cancellare la parola e sostituirla: Md H i
  • cancellare i caratteri e sostituirli: Cd Cd Cd Cd Cd H i
  • passare oltre "H" ed eliminare il seguente lavoro, sostituirlo: Cf Md i
  • passare oltre "H" ed eliminare i caratteri rimanenti, sostituirli: Cf Cd Cd Cd Cd i

Se ti fermassi alla fine della parola (forse via Ca Mf Mf), potresti usare M-DEL H i.

Potresti fare qualcosa di simile bind -P | lessper trovare altri attacchi interessanti. Consultare la sezione readline della pagina man bash (o le parti readline delle pagine info bash ) per i dettagli.


Ok, questo non riguarda davvero la domanda, ma come metti le parole che sembrano tasti della tastiera?
Wuffers,

1
@Sig. Man: Usa gli <kbd>elementi. Un sottoinsieme di HTML è consentito nel markup qui . L'aspetto è dovuto allo stile locale del tag (sfondo, colore del bordo, stile del bordo, larghezza del bordo, ecc.). Puoi rivedere il markup di origine del mio post ("visualizza sorgente" in questa pagina ). Vedi meta.stackexchange.com/questions/5527 anche se lo stile di fantasia è disabilitato su MSO: meta.stackexchange.com/questions/1939/#23571
Chris Johnsen,

Non sono sicuro che sia ovvio o no, mi ci è voluto un minuto per capirlo, ma sono su un MBP senza una meta chiave e sto usando una configurazione Terminale predefinita. Per andare avanti e indietro sulle parole posso premere Esc e poi F, oppure Esc e poi B. Volevo solo menzionarlo perché il modo in cui è stato spiegato sopra mi stava facendo provare a premere Esc + x e poi f o b ...
Cwd,

C'è un modo per cambiare l'ambiente o la shell in modo che io possa fare ctrl o fn + tasti freccia per abbinare il mio IDE?
codecowboy,

1
Puoi anche usare i collegamenti vi aggiungendo il set -o vituo .bashrc! gnu.org/software/bash/manual/html_node/…
Will Munn,

2

L'associazione predefinita readline forward-wordè Meta-F ( bash(1)pagina man, sezione READLINE , sottosezioni Comandi per spostamento ). Non sono sicuro di cosa si traduca Meta in OS X. Opzione, forse.


+1 - in realtà hai ragione. questo funziona bash su OSX
Yuval
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.