Come faccio a far funzionare ⌘ ← e ⌘ → per la combinazione home / end per Terminal?


21

Perché fn- - (o altri) fanno una casa / fine nel Terminale ma a - funziona ovunque?

Quindi, per essere chiari, la domanda è: come far prendere Terminal Command+ e per casa e fine?

Risposte:


21

Conveniente come sarebbe, Terminal non può facilmente fornire la funzionalità richiesta.

Il motivo è che i programmi eseguiti all'interno di Terminal hanno regole diverse per spostare il cursore all'inizio / alla fine della riga, ad esempio:

  • bash(e altre shell) usano CtrlAeCtrlE
  • viusi 0e $/Shift4

Altri programmi possono usare altri tasti. Non esiste una combinazione di tasti universale per posizionare il cursore all'inizio / alla fine della linea.

Naturalmente, Terminal potrebbe mantenere un elenco di combinazioni di tasti per un numero di programmi comuni, controllare cosa è in esecuzione e inviare i tasti corretti per te, oppure potrebbe fornire una voce di menu come Sposta cursore all'inizio della riga all'interno della shell ⌘ ← e quindi invia CtrlAdietro le quinte. Ma immagino che gli ingegneri Apple abbiano pensato che se ti avventuri nel territorio della CLI ne conosci le idiosincrasie.

Come nota a margine, Terminal fornisce Optione Optionche si comporta bashcome ci si aspetterebbe e sposta il cursore all'inizio della parola precedente / successiva. Questo perché queste combinazioni di tasti sono mappate Escbe Escb( man bashper ulteriori informazioni, consultare la sezione "Comandi per lo spostamento"). Ad viesempio, solo quest'ultimo (tipo di) funziona (alla fine di questa risposta mostrerò come configurare viper lavorare con Optione Option).

Ma grazie ad Automator, AppleScript e alias bash puoi ottenere e lavorare con bash(e possibilmente altre shell) e vi.

Il primo passo è mappare e su CtrlAe CtrlE. In un secondo passo, ti mostrerò come configurare vionorare CtrlAe CtrlE(che, di conseguenza, renderà vicompatibile con e ).

Mappa e a CtrlAeCtrlE

  1. In Terminale, vai su Preferenze ...> Impostazioni> [il tuo profilo attivo]> Tastiera: inserisci qui la descrizione dell'immagine

  2. Premere +, selezionare "Cursore a sinistra", "Control-Shift" come modificatore e azione "Invia testo:". Quindi premere CtrlA( \001verrà visualizzato nel campo di testo) e confermare con OK: inserisci qui la descrizione dell'immagine

    (In una versione precedente di questa risposta ho usato "Shift" come modificatore. Ho notato che questa impostazione è in conflitto con shift, che mostra la scheda Terminale precedente, se non ti lasci andare immediatamente. Usando "Control-Shift" risolve quello.)

  3. Ora aggiungi una combinazione di tasti per "Cursore a destra", ma premi CtrlE( \005apparirà nel campo di testo). Confermare con OK.

  4. Apri Automator (ad esempio, premi spaceper aprire Spotlight e digita Automator ), seleziona File> Nuovo e scegli Service:

    inserisci qui la descrizione dell'immagine

  5. Trascina Run AppleScriptnel riquadro destro: inserisci qui la descrizione dell'immagine

  6. Digita il seguente script:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 123 using {shift down, control down}
            end tell
        end tell
    end run

    e salva come Move Cursor to Beginning of Line:

    inserisci qui la descrizione dell'immagine

  7. Ripeti i passaggi da 4. a 6. con questo script:

    on run {input, parameters}
        tell application "System Events"
            tell application process "Terminal"
                key code 124 using {shift down, control down}
            end tell
        end tell
    end run

    e salva come Move Cursor to End of Line:

    inserisci qui la descrizione dell'immagine

  8. Ecco come appare Terminale> Servizi:

    inserisci qui la descrizione dell'immagine

Configura viper onorare CtrlAeCtrlE

  1. Apri .bashrccon il tuo editor preferito e aggiungi questa riga:

    alias vi='vim -c "map <C-A> 0" -c "map <C-E> $" -c "map <Esc>b B" -c "map <Esc>f E"'

    I primi due mapcomandi indicano vimdi interpretare ControlEe ControlAcome $e 0, che spostano il cursore all'inizio o alla fine della riga, rispettivamente.

    Gli ultimi due mapcomandi indicano vimdi spostare il cursore di una parola alla volta come ci si aspetterebbe premendo optione Option.

Avvertenze

Noterai che c'è un breve ritardo tra il momento in cui premi o e il momento in cui il cursore si sposta effettivamente.

Tieni presente che funzionerà solo per i programmi che onorano CtrlA/ CtrlE, quindi potresti comunque voler imparare le combinazioni di tasti specifici di ciascun programma che usi in Terminal.

(Testato su macOS Sierra 10.12.4)


3
Grazie per la risposta dettagliata, c'è una petizione per far sì che Apple includa un pulsante home / end alla prossima riprogettazione :-)
Jackie,

Sono felice di poterti aiutare.
Jaume,

Wow ... tutto questo per ottenere una scorciatoia da
brividi

Questa è una buona risposta, ma potrebbe essere migliorata escludendo tutte le informazioni estranee su viquale sia un'applicazione completamente diversa dal terminale.
axiopisty

1
Questo è un grande trucco. Sono anche riuscito a far funzionare AppleScript inviando i codici chiave per "Home" ed "End": "codice chiave 115" e "codice chiave 119" "
Keymon

2

Certo che è possibile.

Prima di tutto, puoi usare lo strumento gratuito "DoubleCommand" se hai una tastiera Windows con i tasti HOME / END per farli comportare come dovrebbero (inizio / fine della riga).

In secondo luogo, per il terminale in particolare, vai alle preferenze, Tastiera, modifica l'icona / tasto che assomiglia a una freccia che punta in alto a sinistra, seleziona "invia testo" e digita ctrl + a. Fatto!

Lo stesso vale per il pulsante fine.

Se non si dispone di una tastiera per PC, è possibile fare lo stesso con altre combinazioni di tasti.

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.