iTerm 2: Come impostare le scorciatoie da tastiera per saltare all'inizio / alla fine della riga?


395

Vedo che Ctrl+ left/ rightsalta all'inizio / alla fine della riga. Come cambiarlo in Cmd+ left/ right arrow?

Per far funzionare correttamente il Alt+ left/ right arrowper il salto delle parole segui questo articolo .



1
Se vuoi che anche queste scorciatoie funzionino in VIM, vedi questa risposta: stackoverflow.com/a/9611698/991068
Razvan Grigore

Risposte:


735

Aggiungi in iTerm2 i seguenti tasti di scelta rapida del profilo

FOR  ACTION         SEND
⌘←  "SEND HEX CODE"      0x01 
⌘→  "SEND HEX CODE"      0x05
⌥←  "SEND ESC SEQ"  b
⌥→  "SEND ESC SEQ"  f

Ecco una visuale per chi ne ha bisogno

iTerm aggiunge chiave visiva


3
Sai qual è il codice / sequenza per Command + Delete? (cancella il prompt)
Steven Lu

10
Ho risposto al mio primo commento altrove, sostanzialmente il codice esadecimale 0x15 dà Ctrl + U che cancella la riga. Tuttavia sto trovando 0x01 Ctrl + A per interferire con l'utilizzo di Tmux. Pertanto intendo mapparlo invece sul tasto Home (stessa funzionalità di Fn + Sinistra su una tastiera Mac).
Steven Lu

7
La sequenza di escape per Home è [1 ~ e la sequenza di escape per End è [4 ~
Steven Lu

3
Funziona come un fascino, fantastico!
Juto,

25
L'associazione corretta è ⌘← "SEND ESC SEQ" OHper Home e ⌘→ "SEND ESC SEQ" OFper End (quelli sono maiuscoli o zeri). Questo simula effettivamente premendo i tasti Home ed End, e come tale funzionerà in bash, vim, ecc.
Timothy Zorn,

433

Per saltare tra le parole e l'inizio / fine delle linee in iTerm2, scegli una delle due soluzioni seguenti.

1. Soluzione semplice (consigliata)

  1. Apri Preferenze
  2. Fai clic sulla scheda "Profilo"
  3. Seleziona un profilo nell'elenco a sinistra (ad es. "Predefinito") e fai clic sulla scheda "Chiavi"
  4. Fai clic sul menu a discesa "Preimpostazioni" e seleziona "Modifica del testo naturale"

inserisci qui la descrizione dell'immagine


2. Mappatura manuale delle chiavi (Avanzate)

Se non si desidera utilizzare la preimpostazione "Modifica del testo naturale" di cui sopra, è possibile mappare manualmente i tasti necessari:

  1. Apri Preferenze
  2. Fai clic sulla scheda "Chiavi"
  3. Fai clic [+]sull'icona

Ora puoi aggiungere le seguenti scorciatoie da tastiera:

Sposta il cursore di una parola a sinistra

  • Scorciatoia da tastiera: +
  • Azione: Invia codice esadecimale
  • Codice: 0x1b 0x62

inserisci qui la descrizione dell'immagine

Sposta il cursore di una parola a destra

  • Combinazione tastiera: +
  • Azione: Invia codice esadecimale
  • Codice: 0x1b 0x66

Sposta il cursore all'inizio della riga

  • Combinazione tastiera: +
  • Azione: Invia codice esadecimale
  • Codice: 0x01

Sposta il cursore alla fine della riga

  • Combinazione tastiera: +
  • Azione: Invia codice esadecimale
  • Codice: 0x05

Elimina parola

  • Combinazione tastiera: +←Delete
  • Azione: Invia codice esadecimale
  • Codice: 0x1b 0x08

Elimina riga

  • Combinazione tastiera: +←Delete
  • Azione: Invia codice esadecimale
  • Codice: 0x15

Disfare

  • Combinazione tastiera: +z
  • Azione: Invia codice esadecimale
  • Codice: 0x1f

Non dimenticare di rimuovere i collegamenti precedenti :

  • Apri la scheda "Profili"
  • Fai clic sulla sottoscheda "Chiavi"
  • Rimuovi i mapping per le combinazioni di tasti + e +

2
Questo ha funzionato bene per me in iTerm2 ed è stato molto facile da seguire, grazie!
Natetronn,

3
Chiarendo solo cosa fanno gli attacchi originali per ⌥ ←? Lo vedo Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Sarebbe bello sapere nel caso in cui le persone non volessero rimuovere questo.
Agosto

5
Vai all'inizio e alla fine della riga non ha funzionato per me usando zsh. Utilizzo di "Codice esadecimale" "0x01" / "0x05", come suggerito dalla risposta migliore ha funzionato per me.
Flip

2
Vai all'inizio e alla fine della linea non ha funzionato anche per me. La risposta migliore ha funzionato.
hisabimbola,

3
ITerm ha un modo per raggrupparli in un preset che possiamo semplicemente caricare? Sembra fastidioso digitare manualmente ma questo ha funzionato per me ed è stato fantastico. Grazie mille!
Agosto

259

Vedo che ci sono già molte buone risposte, ma questo dovrebbe fornire la funzionalità OSX nativa più vicina possibile in più della semplice shell. Ho verificato che questo funziona in sessioni ZSH, Bash, node, python -i, iex e irb / pry (usando gemma rb-readline per readline, ma dovrebbe funzionare per tutti).

Apri le preferenze iTerm + ,e vai alla Profilesscheda (la Keysscheda può essere utilizzata, ma l'aggiunta di una 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:

Elimina tutti i caratteri a sinistra del cursore

+ ←DeleteInvia codici esadecimali:

0x15Più compatibile, ma a volte la funzionalità consiste nell'eliminare l'intera riga anziché solo i caratteri a sinistra del cursore. Personalmente lo uso e quindi sovrascrivo il mio bindkey zsh per ^Ueliminare solo le cose a sinistra del cursore (vedi sotto).

o

0x18 0x7fMeno compatibile, non funziona nel nodo e non funzionerà in zsh per impostazione predefinita, vedi sotto per correggere zsh (bash / irb / pry dovrebbe andare bene), esegue la funzionalità desiderata quando funziona.

Elimina tutti i caratteri a destra del cursore

+ fn+ ←Deleteo + Delete→Invia codici esadecimali:0x0b

Elimina una parola a sinistra del cursore

+ ←DeleteInvia codici esadecimali:

0x1b 0x08 Le interruzioni di IEX di Elixir sembrano funzionare bene ovunque

o

0x17 Funziona ovunque, ma non si ferma alle normali interruzioni di parole in IRB e verrà invece eliminato fino a quando non vede uno spazio letterale.

Elimina una parola a destra del cursore

+ fn←Deleteo + Delete→Invia codici esadecimali:0x1b 0x64

Sposta il cursore all'inizio della riga

+ Invia codici esadecimali:0x01

Sposta il cursore alla fine della riga

+ Invia codici esadecimali:0x05

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

Disfare

+ zInvia codici esadecimali:0x1f

Ripeti in genere non associato in bash, zsh o readline, quindi possiamo impostarlo su un codice esadecimale inutilizzato che possiamo quindi correggere in zsh

+ + Zo + yInvia codici esadecimali:0x18 0x1f

Ora come risolvere quelli che non funzionano

Per zsh, puoi impostare l'associazione per i + ←Deletee + + Z/ + non ancora funzionanti yeseguendo:

# changes hex 0x15 to delete everything to the left of the cursor,
# rather than the whole line
$ echo 'bindkey "^U" backward-kill-line' >> ~/.zshrc

# binds hex 0x18 0x7f with deleting everything to the left of the cursor
$ echo 'bindkey "^X\\x7f" backward-kill-line' >> ~/.zshrc

# adds redo
$ echo 'bindkey "^X^_" redo' >> ~/.zshrc

# reload your .zshrc for changes to take effect
$ source ~/.zshrc

Non riesco a trovare una soluzione per aggiungere redo in bash o readline, quindi se qualcuno conosce una soluzione per uno di questi, commenta di seguito e proverò ad aggiungerli.

Per chiunque cerchi la tabella di ricerca su come convertire le sequenze di tasti in esadecimale, trovo questa tabella molto utile.


2
Questo è davvero utile, fa molta differenza! Vorrei sottolineare che alcune persone possono confondersi con il $davanti echo(basta rimuoverlo?). A parte questo, è perfetto. Grazie.
edmundo,

1
@Christophe Quindi sembra che l'associazione dei tasti sia lì come dovrebbe essere. O hai fatto un errore nell'aggiungere i valori esadecimali o nel keybinding per la parola indietro viene sovrascritto. Esegui bindkey | grep "\^\[b"e ti dirà se qualcos'altro lo sta sovrascrivendo dopo che è stato impostato. Si deve restituire solo #=> "^[b" backward-word. Se viene sovrascritto, dovrai scoprire dove viene sovrascritto e rimuoverlo. Se ciò non è possibile, puoi eseguirlo echo 'bindkey "^[b" backward-word' >> ~/.zshrce aggiungerlo all'ultima riga del tuo .zshrc, quindi riavviare iTerm e dovrebbe funzionare
Travis

2
@Christophe controlla la keysscheda nelle preferenze iTerm per vedere se sta anche mappando + su qualcosa. In tal caso rimuoverlo. Puoi verificare se stai bfunzionando correttamente premendo rapidamente escrilasciando, quindi premendo b. Questo dovrebbe saltare una parola a sinistra. In alternativa, puoi mappare + su hex 0x1b 0x42 o 0x1b 0x5b 0x31 0x3b 0x35 0x44 . Ho verificato che entrambi funzionano per me. Penso davvero che tu abbia + sovrascritto in iTerm, sia nella tua profile keysscheda che nella tua keysscheda.
Travis,

3
Sorprendente! Ho appena saputo di Undo più i collegamenti Redo da qui.
ecbrodie

3
L'ho fatto manualmente e ho pensato perché non posso importare un profilo per farlo? Quindi ho creato GabLeRoux / iterm2-macos-dynamic-profile sulla base di queste istruzioni. Funziona perfettamente, grazie Gab
GabLeRoux

48

Segui il tutorial che hai elencato sopra per impostare le tue preferenze chiave in iterm2 .

  1. Crea una nuova chiave di shorcut
  2. Scegli "Invia sequenza di escape" come azione
  3. Quindi, per impostare cmd-left , nel testo in basso che:
    • Immettere [Hper l' inizio riga
      OPPURE
    • Immettere [Fper fine riga

1
F salta solo una parola nel mio iterm2
Matthias

1
ITerm => Preferenze => Chiavi
pfrank

Ama questo! le altre soluzioni non hanno funzionato per me. Trascorro ore frustrate dal fatto che non potrei usare ctrl + ae ctrl + e in iterm2. Ma non volevo rinunciare al pesce per questo. Questo funziona totalmente grazie!
VOLA il

Anche altre soluzioni non hanno funzionato per me, ma questa ha funzionato.
Braham Snyder,

42

In iTerm 3.0.12 è possibile passare alla Natural Text Editingpreimpostazione:

inserisci qui la descrizione dell'immagine

iTerm → Preferenze → Profili → Chiavi

Avviso Poiché è un preset, può ignorare i tasti associati in precedenza. Quindi è meglio salvare le associazioni dei tasti correnti prima di applicare un predefinito.


2
Potresti elaborare di più la tua risposta? Come in, cosa include e può sovrascrivere quel preset?
Carles Alcolea,

Grazie per la risposta. Anche rintocchi è probabilmente le migliori pratiche per applicare questo per il proprio profilo personalizzato in questo modo non si sta avvitando con le impostazioni predefinite e possibile alternare il profilo come un testo naturale editing "modo"
aug

29

Per un rapido riferimento a chiunque voglia andare alla fine della riga o all'inizio della riga in iTerm2, il link sopra http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html osserva che in iTerm2:

  • Ctrl+ A, salta all'inizio della riga, mentre
  • Ctrl+ E, salta alla fine della linea.

Perché questa risposta non è in alto?
Gangadhar JANNU,

1
@GangadharJannu: totalmente d'accordo. Va dritto al ans. Dovrebbe essere in cima.
Catbuilts

10

Ho usato la risposta di Travis e ho creato un profilo dinamico che puoi importare in base alle sue istruzioni.

GabLeRoux / iterm2-MacOS-dynamic-profilo

Le istruzioni sono nel file Leggimi ed è molto più veloce importarlo che aggiungerle tutte manualmente. Ho reso questa una risposta secondo la richiesta di @ gooli perché era nascosta in un commento. Spero ti piaccia questo 🍻


2
Sono tornato qui un anno dopo e sono così felice di trovarlo!
elifiner

9

Solo per aiutare chiunque abbia lo stesso problema, ma in particolare utilizzando la shell Zsh con iTerm 2. Si scopre che Zsh non legge /etc/inputrccorrettamente , quindi non riesce a comprendere i collegamenti chiave impostati attraverso le preferenze!

Per risolvere questo problema, devi aggiungere alcune associazioni di tasti al tuo .zshrcfile, come:

# key bindings
bindkey "\e[1~" beginning-of-line
bindkey "\e[4~" end-of-line

Nota le barre rovesciate nell'esempio sopra prima della "e", l'articolo collegato non le mostra, quindi aggiungile al tuo .zshrcfile quando aggiungi le associazioni.


4

I vecchi attacchi emacs di moda possono ancora funzionare nei terminali iterm2 e os x:

Preferenze -> Profili -> Chiavi (sottoscheda nei profili)

  • Set Left/Right option <kbd>⌥</kbd> key acts as +Esc(simile nel terminale os x)

Ciò dovrebbe consentire alt- fe alt- bper spostare parole per parole. (Ancora ctrl- ae ctrl- efunzionano sempre come al solito)

Se impostato come metaquei vecchi binding funzionerà mentre alcuni binding iterm2 non sono disponibili.


2

Come spiega qui , puoi farlo con una semplice procedura:

Per impostazione predefinita, i salti di parole (opzione + → o ←) e le eliminazioni di parole (opzione + backspace) non funzionano. Per abilitarli, vai su "iTerm → Preferenze → Profili → Tasti → Carica preimpostazione ... → Modifica testo naturale → Boom! Head esplode"


2

Le uniche cose che funzionano per spostarsi all'inizio e alla fine della linea sono

⌘← "SEND ESC SEQ" OH- per spostarsi all'inizio della riga
⌘→ "SEND ESC SEQ" OF- per spostarsi alla fine della riga


1

bind -p mostrerà un elenco di chiavi con escape associate nella shell, che potrebbero aiutarti a fornire più idee / termini di ricerca.


5
bind -pfunziona solo nelle shell Bourne (bash, sh) per zsh, csh tcsh, use bindkey.
Travis,


0

Per me, la seguente combinazione ha funzionato:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

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.