Le chiavi home e end possono essere mappate quando si utilizza Terminal?


76

I tasti homee endsu un MacBook Pro possono essere emulati con fn + freccia sinistra o fn + freccia destra. O quando vengono modificate alcune impostazioni, con il tasto Comando (Apple) anziché fn.

Nessuno di questi funziona in Terminal.

Come ho spesso bisogno di andare all'inizio o alla fine della linea e vorrei anche saltare in avanti o indietro di parole.

Come posso saltare su una linea nel Terminal?

Risposte:


64

Utilizzare control+ aper HOME e control+ eper END nel terminale.

Usa anche esc+ fper spostarti all'inizio della parola successiva e esc+ bper spostarti all'inizio della parola corrente . (Devi stare attento al corrente e al prossimo)


2
Perfetto! che ne dici di saltare in giro per parola? (ctrl-left e ctrl-right in windows)
at01

@ at01 ho aggiornato la mia risposta.
Am1rr3zA

40
Chi ha progettato le chiavi per Terminal?!?!
at01

4
Preferisco usare l'opzione + freccia sinistra e opzione + freccia destra per passare all'inizio delle parole
Allan Jikamu,

2
Ctrl + a e Ctrl + e hanno funzionato per me, ma senza ricorrere alla nuova mappatura dei tasti come proposto da così tanti qui, preferisco l'alternativa di @ AlphaFighter a Maiusc + Home e Maiusc + Fine (Maiusc + Fn + freccia sinistra e Maiusc + Fn + freccia destra sulla tastiera di MacBook Pro) per l'inizio e la fine della riga.
John Rix,

70

Per rispondere a quello su come ottenere l'inizio o la fine della riga, sembra che per impostazione predefinita Terminal associ queste chiavi ad esso:

  • shift + home → inizio riga, equivalente al tasto "home" nei terminali normali
  • shift + end → end of line, equivalente al tasto "end" nei terminali normali

Se vuoi che home e la fine funzionino nel modo "normale" (e non richiedano il cambio), vai su [Menu Terminale] → Preferenze → scheda Profili (o impostazioni su alcune versioni di OS X) → Sottoscheda Tastiera.

Quindi modifica / aggiungi queste chiavi in ​​modo che siano le seguenti "invia stringa alla shell"

  • casa: \033[H
  • fine: \033[F

È possibile ottenere la \033parte premendo il tasto Esc all'interno dell'input della finestra di dialogo di modifica, se è necessario aggiungerla.

Quindi home e end funzioneranno di nuovo normalmente (phew).

Si noti inoltre che "alt + ←" e "alt + →" per impostazione predefinita nella mappa terminale sono parola a sinistra e parola a destra, un'altra comoda combinazione da ricordare.

Nelle versioni successive di Mac OS X, se lo schermo del terminale si sposta verso l'alto o verso il basso quando si preme il tasto home / end, potrebbe essere necessario impostare il tasto home \033[1~e il tasto end \033[4~per ottenere i risultati desiderati (non è necessario alcun turno) .

Sentiti libero di modificare questa risposta per aggiungere associazioni di tasti più utili, in quanto è un wiki della comunità.


5
\ 033 [H e \ 033 [F per casa e fine non hanno funzionato per me; tuttavia \ 001 e \ 005 lo hanno fatto. Puoi inserire questi codici nella finestra di dialogo di modifica premendo ctrl-A e ctrl-E. Sto usando zsh, non sono sicuro che questo faccia differenza.
JW.

shift + home / end ha svolto il lavoro
isaias-b,

1
Sto provando a capirlo da un po ', questo mi ha salvato!
Paul Gray,

Funziona benissimo quando ci si trova nell'applicazione terminale attuale localmente. Tuttavia, quando ti trovi in ​​una macchina macOS, questi non sembrano funzionare più. Come aggirare questo ?!
Ahi Tuna,

2
@AhiTuna SSH è solo una connessione a una sessione terminale, non una connessione a un emulatore di terminale. Le opzioni di input sono sempre definite dall'emulatore di terminale in uso.
Bachsau,

39

Sembra che tu stia cercando un aiuto per usare readline e bash, ecco un folle elenco di elementi della tastiera modificati da: http://www.math.utah.edu/docs/info/features_7.html#SEC45

Ctrla Passa all'inizio della riga.
Ctrle Sposta alla fine della riga.
Escf Vai avanti di una parola.
Escb Sposta indietro di una parola.
Ctrll Cancella lo schermo, ristampando la riga corrente in alto.

Ctrlk Uccidi il testo dalla posizione corrente del cursore alla fine della riga.
Escd Uccidi dal cursore alla fine della parola corrente, o se tra le parole, fino alla fine della parola successiva.
EscDel Uccidi dal cursore l'inizio della parola precedente, o se tra le parole, all'inizio della parola precedente.
Ctrlw Uccidi dal cursore allo spazio bianco precedente. Ciò è diverso dal EscDelCtrla fatto che i confini delle parole differiscono.

Ctrld Elimina il carattere sotto il cursore.
Ctrl_ Annulla l'ultima cosa che hai fatto. Puoi annullare fino a una riga vuota.

Ed ecco come riportare il testo nella riga. Yanking significa copiare il testo ucciso più di recente dal kill buffer.

Ctrly Riporta il testo ucciso più di recente nel buffer al cursore.
Escy Ruota il kill-ring e strappa la nuova cima. Puoi farlo solo se il comando precedente è Ctrlyo Escy.


questo è prezioso - grazie - Vorrei che fosse disponibile da qualche parte come file stampabile!
matt b

Mi rendo conto che non è del tutto "ottimizzato", ma; File -> Stampa?
Jason Salaz,

Caspita, sono super imbarazzanti rispetto al termine su Linux .. un modo per rimappare questa assurdità?
BTK

Sì, prova la pagina man di Bash. (Non so come fare da solo.)
SilverWolf,

6

Per quelli che preferiscono usare i tasti freccia, premere fnShift+ Left Arrowti porterà a casa dalla riga di comando. Allo stesso modo, fnShift+ Right Arrowti porterà alla fine.


6

Puoi spostare una parola alla volta con option+ lefte option+ right.

Per quanto riguarda l'utilizzo di homee end, i collegamenti predefiniti di Terminal sono i seguenti:

  • shift+ home→ passa all'inizio della riga
  • shift+ end→ passa alla fine della riga
  • home → scorrere fino all'inizio del buffer di scorrimento indietro
  • end → scorrere fino alla fine del buffer di scorrimento indietro

In molte altre app terminali (su più piattaforme), quelle coppie modificate e non modificate vengono invertite (ovvero nude homee endvengono utilizzate per saltare attorno alla linea corrente e le versioni modificate (se di shifto qualcos'altro) vengono utilizzate per navigare nel buffer di scorrimento ). Se lo desideri, puoi invertire i collegamenti di Terminal in modo che funzionino in questo modo:

Vai al menu Terminale → Preferenze → scheda Impostazioni / Profilo → sottoscheda Tastiera.

Quindi modificare le coppie chiave-azione in modo che siano le seguenti:

  • ↖︎: invia testo: \ 033 [H
  • ⇧↖︎: scorrere verso l'alto
  • ↘︎: invia testo: \ 033 [F
  • ⇧↘︎: scorrere verso il basso

Nota: \ 033 viene inserito nella casella di testo da inviare nella finestra di dialogo Modifica premendo il tasto Esc.

Mentre sei lì, potresti voler scambiare in modo simile i collegamenti di modificati e non modificati page upe page down, per mantenere le cose coerenti: premere un tasto di navigazione con shiftrappresenta un comando a Terminale stesso (per navigare nel buffer di scorrimento indietro come un documento), mentre premendo uno senza invia la pressione di un tasto grazie a tutto ciò che è in esecuzione all'interno di esso (ad esempio bash, less, nano, screen, etc.). Le coppie chiave-azione per questo sono:

  • ⇞: invia testo: \ 033 [5 ~
  • ⇧⇞: scorrere la pagina verso l'alto
  • ⇟: invia testo: \ 033 [6 ~
  • ⇧⇟: scorrere la pagina verso il basso


4

Mappatura homee endchiavi con la funzionalità desiderata risolveranno facilmente il problema.

Sono state pubblicate molte risposte, ma nel caso in cui tu stia utilizzando zsh, puoi impostare homesu:

\001

e impostare endsu:

\005

facendo clic su preferenza - profilo - tastiera.


Ho provato anche questo ma poi rompe Home e End in vim :( È possibile mapparli su ciò che Alfredo Cardigliano ha suggerito: Chiave: ↖ Azione: \ 033OH Chiave: ↗ Azione: \ 033OF
curlingdude

Ha funzionato perfettamente per me! Uso solo Nano, quindi nessun problema qui.
Sterling Bourne,

Sì, funziona, ma non risolve il problema in generale. Mi sono trasferito da bash a zsh e mi è stato utilizzato FN-SHIFT-SINISTRA / DESTRA .. questo risolto il mio problema: stackoverflow.com/questions/8638012/...
Vlk

1

Questo è il modo più efficace per farlo funzionare anche con vim. Vai a Terminale -> Preferenze -> Profili -> Tastiera e aggiungi:

Chiave: ↖ Azione: \ 033OH

Chiave: ↗ Azione: \ 033OF


1

Vorrei fornire una soluzione alternativa a questo problema. Funziona benissimo se sei un utente vi. I collegamenti a chiave Vim nel terminale forniscono un modo per utilizzare il terminale in uno stile vim. Puoi farlo digitando il set -o viterminale e sentiti libero di inserirlo .bash_profilese vuoi. Dopo questo, il tuo terminale è effettivamente un editor VIM. Puoi usare il esctasto per andare in modalità comando e camminare in modo vim. Ad esempio, 0ti porta all'inizio e $ti porta alla fine. Puoi anche usare Ie Aper andare all'inizio e alla fine e passare subito alla modalità di modifica. we bti consente di spostarti avanti e indietro di una parola. E se provi ad entrare in modalità visiva premendov, ti verrà dato un editor vim e il testo che hai quando lasci questo editor verrà eseguito nel terminale.

Tieni presente che questa associazione chiave vim annullerà tutti i tasti di scelta rapida che hai imparato da altre risposte.


0

ecco l'elenco in forma stampabile, come desiderato :)

http://pastebin.com/uCqwn7qs

Ho anche corretto un "bug" nella descrizione. Questo è ciò che potresti leggere originariamente nelle istruzioni:

ESC-d Uccide dal cursore l'inizio della parola precedente, o se tra le parole, all'inizio della parola precedente.

Questo odora gravemente come un errore incolla, poiché entrambe le frasi parziali dicono la stessa cosa. Dicendo dalla semplice logica, la prima metà deve effettivamente leggere "dal cursore all'inizio della parola corrente".


0

... che ne dici di saltare in giro a parole? (ctrl-sinistra e ctrl-destra in windows)

# in ~/.inputrc
"\033[5C": forward-word
"\033[5D": backward-word
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.