iTerm 2: Comment définir les raccourcis clavier pour passer au début / fin de ligne?

395

Je peux voir que Ctrl+ left/ rightsaute au début / fin de la ligne. Comment changer cela en Cmd+ left/ right arrow?

Pour que Alt+ left/ right arrowfonctionne correctement pour le saut de mots, suivez cet article .

chris
la source
1
Si vous souhaitez que ces raccourcis fonctionnent également dans VIM, consultez cette réponse: stackoverflow.com/a/9611698/991068
Razvan Grigore

Réponses:

736

Ajoutez dans iTerm2 les touches de raccourci de profil suivantes

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

Voici un visuel pour ceux qui en ont besoin

iTerm ajouter une clé visuelle

Matthias
la source
3
Savez-vous quel est le code / la séquence pour Command + Delete? (effacer l'invite)
Steven Lu
10
J'ai répondu à mon premier commentaire ailleurs, essentiellement le code hexadécimal 0x15 donne Ctrl + U qui efface la ligne. Cependant, je trouve 0x01 Ctrl + A pour interférer avec l'utilisation de Tmux. Par conséquent, j'ai l'intention de le mapper à la place sur la touche Accueil (même fonctionnalité que Fn + Left sur un clavier Mac).
Steven Lu
7
La séquence d'échappement pour Home est [1 ~ et la séquence d'échappement pour End est [4 ~
Steven Lu
3
Fonctionne comme un charme, génial!
Juto
25
La liaison correcte est ⌘← "SEND ESC SEQ" OHpour Home et ⌘→ "SEND ESC SEQ" OFpour End (ce sont des o non majuscules et non des zéros). Cela simule en fait d'appuyer sur les touches Début et Fin, et en tant que tel, cela fonctionnera dans bash, vim, etc.
Timothy Zorn
433

Pour sauter entre les mots et le début / fin des lignes dans iTerm2, choisissez l' une des deux solutions ci-dessous.

1. Solution simple (recommandée)

  1. Ouvrir les préférences
  2. Cliquez sur l'onglet "Profil"
  3. Sélectionnez un profil dans la liste de gauche (par exemple "Par défaut") et cliquez sur l'onglet "Clés"
  4. Cliquez sur le menu déroulant "Presets" et sélectionnez "Natural Text Editing"

entrez la description de l'image ici


2. Mappage des clés manuellement (avancé)

Si vous ne souhaitez pas utiliser le préréglage "Modification de texte naturel" mentionné ci-dessus, vous pouvez mapper manuellement les touches dont vous avez besoin:

  1. Ouvrir les préférences
  2. Cliquez sur l'onglet «Clés»
  3. Cliquez sur l' [+]icone

Vous pouvez maintenant ajouter les raccourcis clavier suivants:

Déplacer le curseur d'un mot vers la gauche

  • Raccourci clavier: +
  • Action: envoyer le code hexadécimal
  • Code: 0x1b 0x62

entrez la description de l'image ici

Déplacer le curseur d'un mot vers la droite

  • Combinaison de clavier: +
  • Action: envoyer le code hexadécimal
  • Code: 0x1b 0x66

Déplacer le curseur au début de la ligne

  • Combinaison de clavier: +
  • Action: envoyer le code hexadécimal
  • Code: 0x01

Déplacer le curseur à la fin de la ligne

  • Combinaison de clavier: +
  • Action: envoyer le code hexadécimal
  • Code: 0x05

Supprimer le mot

  • Combinaison de clavier: +←Delete
  • Action: envoyer le code hexadécimal
  • Code: 0x1b 0x08

Supprimer la ligne

  • Combinaison de clavier: +←Delete
  • Action: envoyer le code hexadécimal
  • Code: 0x15

annuler

  • Combinaison de clavier: +z
  • Action: envoyer le code hexadécimal
  • Code: 0x1f

N'oubliez pas de supprimer les liaisons précédentes :

  • Ouvrez l'onglet «Profils»
  • Cliquez sur le sous-onglet "Clés"
  • Supprimez les mappages des combinaisons de touches + et +
sqren
la source
2
Cela a bien fonctionné pour moi dans iTerm2 et était très facile à suivre, merci!
Natetronn
3
Simplement clarifier à quoi servent les fixations originales pour ⌥ ←? Je le vois Says send Hex Codes: 0x1b 0x1b 0x5b 0x44. Ce serait bien de savoir si les gens ne voulaient pas supprimer cela.
août
5
Passer au début et à la fin de la ligne n'a pas fonctionné pour moi en utilisant zsh. L'utilisation de "Hex Code" "0x01" / "0x05", comme suggéré par la réponse du haut, a fonctionné pour moi.
Retournez
2
Passer au début et à la fin de la ligne n'a pas fonctionné pour moi aussi. La meilleure réponse a fonctionné.
hisabimbola
3
ITerm a-t-il un moyen de les regrouper dans un préréglage que nous pouvons simplement charger? Semble ennuyeux de taper manuellement mais cela a fonctionné pour moi et était génial. Merci un lto!
août
259

Je vois qu'il y a déjà beaucoup de bonnes réponses, mais cela devrait fournir la fonctionnalité OSX native la plus proche possible dans plus que votre shell. J'ai vérifié que cela fonctionne dans les sessions ZSH, Bash, node, python -i, iex et irb / pry (en utilisant rb-readline gem pour readline, mais devrait fonctionner pour tous).

Ouvrez les préférences iTerm + ,et accédez à l' Profilesonglet (l' Keysonglet peut être utilisé, mais l'ajout de raccourcis clavier à votre profil vous permet d' enregistrer votre profil et de le synchroniser sur plusieurs ordinateurs) et keyssous-onglet et entrez les éléments suivants:

Supprimer tous les caractères à gauche du curseur

+ ←DeleteEnvoyer des codes hexadécimaux:

0x15Plus compatible, mais la fonctionnalité consiste parfois à supprimer la ligne entière plutôt que seulement les caractères à gauche du curseur. Personnellement, j'utilise ceci et écrase ensuite ma bindkey zsh pour ^Usupprimer uniquement les éléments à gauche du curseur (voir ci-dessous).

ou

0x18 0x7fMoins compatible, ne fonctionne pas dans le nœud et ne fonctionnera pas dans zsh par défaut, voir ci-dessous pour corriger zsh (bash / irb / pry devrait être bien), exécute les fonctionnalités souhaitées lorsqu'il fonctionne.

Supprimer tous les caractères à droite du curseur

+ fn+ ←Deleteou + Delete→Envoyer des codes hexadécimaux:0x0b

Supprimer un mot à gauche du curseur

+ ←DeleteEnvoyer des codes hexadécimaux:

0x1b 0x08 Les ruptures dans IEX d'Elixir semblent bien fonctionner partout ailleurs

ou

0x17 Fonctionne partout, mais ne s'arrête pas aux sauts de mots normaux dans IRB et supprimera à la place jusqu'à ce qu'il voit un espace littéral.

Supprimer un mot à droite du curseur

+ fn←Deleteou + Delete→Envoyer des codes hexadécimaux:0x1b 0x64

Déplacer le curseur au début de la ligne

+ Envoyer des codes hexadécimaux:0x01

Déplacer le curseur à la fin de la ligne

+ Envoyer des codes hexadécimaux:0x05

Déplacer le curseur d'un mot vers la gauche

+ Envoyer des codes hexadécimaux:0x1b 0x62

Déplacer le curseur d'un mot vers la droite

+ Envoyer des codes hexadécimaux:0x1b 0x66

annuler

+ zEnvoyer des codes hexadécimaux:0x1f

Rétablir généralement pas lié en bash, zsh ou readline, nous pouvons donc le définir sur un hexcode inutilisé que nous pouvons ensuite corriger dans zsh

+ + Zou + yEnvoyer des codes hexadécimaux:0x18 0x1f

Maintenant, comment réparer ceux qui ne fonctionnent pas

Pour zsh, vous pouvez configurer la liaison pour les + ←Deleteet + + Z/ + pas encore fonctionnels yen exécutant:

# 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

Je ne peux pas trouver de solution pour ajouter redo dans bash ou readline, donc si quelqu'un connaît une solution pour l'un ou l'autre, veuillez commenter ci-dessous et j'essaierai de les ajouter.

Pour tous ceux qui recherchent la table de recherche sur la façon de convertir des séquences de touches en hexadécimal, je trouve cette table très utile.

Travis
la source
2
C'est vraiment utile, ça fait beaucoup de différence! Je voudrais souligner que certaines personnes peuvent se confondre avec le $devant echo(simplement le retirer?). A part ça, c'est parfait. Je vous remercie.
edmundo
1
@Christophe Il semble donc que le raccourci clavier soit là comme il se doit. Soit vous avez fait une erreur en ajoutant les valeurs hexadécimales, soit la liaison de touches pour le mot en arrière est écrasée. Exécutez bindkey | grep "\^\[b"et cela vous dira si quelque chose d'autre le remplace après qu'il ait été défini. Il devrait seulement revenir #=> "^[b" backward-word. S'il est écrasé, vous devrez trouver où il est écrasé et le supprimer. Si ce n'est pas possible, vous pouvez l'exécuter echo 'bindkey "^[b" backward-word' >> ~/.zshrcl'ajoutera à la dernière ligne de votre .zshrc, puis redémarrez iTerm et cela devrait fonctionner
Travis
2
@Christophe vérifie l' keysonglet dans les préférences iTerm pour voir si c'est aussi un mapping + vers quelque chose. Si c'est le cas, retirez-le. Vous pouvez tester si votre bfonctionne correctement en appuyant rapidement sur escrelâchement, puis sur b. Cela devrait sauter un mot vers la gauche. Alternativement, vous pouvez mapper + à hex 0x1b 0x42 ou 0x1b 0x5b 0x31 0x3b 0x35 0x44 . J'ai vérifié que ces deux éléments fonctionnent pour moi. Je pense vraiment que vous avez + été écrasé dans iTerm, que ce soit dans votre profile keysonglet ou votre keysonglet.
Travis
3
Incroyable! Je viens d'apprendre les liaisons Annuler et Rétablir d'ici.
ecbrodie
3
Je l'ai fait manuellement dans et j'ai pensé pourquoi ne puis-je pas importer un profil pour ce faire? J'ai ensuite créé GabLeRoux / iterm2-macos-dynamic-profile sur la base de ces instructions. Cela fonctionne parfaitement, merci 🍻
GabLeRoux
48

Suivez le didacticiel que vous avez indiqué ci-dessus pour configurer vos préférences clés dans iterm2 .

  1. Créer une nouvelle clé de raccourci
  2. Choisissez "Envoyer la séquence d'échappement" comme action
  3. Ensuite, pour définir cmd-left , dans le texte ci-dessous:
    • Entrez [Hpour le début de la ligne
      OU
    • Entrez [Fpour la fin de la ligne
Jaime Bellmyer
la source
1
F saute un seul mot dans mon iterm2
Matthias
1
ITerm => Préférences => Clés
pfrank
Aime ça! les autres solutions n'ont pas fonctionné pour moi. Je passe des heures frustré de ne pas pouvoir utiliser ctrl + a et ctrl + e dans iterm2. Mais je ne voulais pas abandonner le poisson pour ça. Cela fonctionne totalement merci!
FLY
D'autres solutions n'ont pas fonctionné pour moi non plus, mais celle-ci a fonctionné.
Braham Snyder du
42

Dans iTerm 3.0.12, vous pouvez passer au Natural Text Editingpréréglage:

entrez la description de l'image ici

iTerm → Préférences → Profils → Clés

Avertissement Comme il s'agit d'un préréglage, il peut remplacer les clés que vous avez liées auparavant. Il est donc préférable de sauvegarder vos raccourcis clavier actuels avant d'appliquer un préréglage.

Nik Kov
la source
2
Pourriez-vous élaborer davantage votre réponse? Comme dans, ce que ce préréglage inclut et pourrait remplacer?
Carles Alcolea,
Merci d'avoir répondu. Il est également préférable de l'appliquer à votre propre profil personnalisé de façon à ne pas visser avec les valeurs par défaut et à basculer le profil en tant que "mode" d'édition de texte naturel
août
29

Pour une référence rapide de toute personne qui souhaite aller en fin de ligne ou en début de ligne dans iTerm2, le lien ci-dessus http://hackaddict.blogspot.com/2007/07/skip-to-next-or-previous-word- in-iterm.html note que dans iTerm2:

  • Ctrl+A , saute au début de la ligne, tandis que
  • Ctrl+ E, saute à la fin de la ligne.
Ioannis Filippidis
la source
Pourquoi cette réponse n'est-elle pas au sommet?
Gangadhar JANNU
1
@GangadharJannu: Tout à fait d'accord. Cela va directement aux ans. Devrait être au sommet.
Catbuilts
10

J'ai utilisé Travis answer et j'ai créé un profil dynamique que vous pouvez importer en fonction de ses instructions.

GabLeRoux / iterm2-macos-dynamic-profile

Les instructions sont dans le fichier lisez-moi et il est beaucoup plus rapide d'importer cela que de les ajouter toutes manuellement. J'en ai fait une réponse conformément à la demande de @ gooli car cela était caché dans un commentaire. J'espère que vous apprécierez cela 🍻

GabLeRoux
la source
2
Je suis revenu ici un an plus tard et si heureux de le trouver!
elifiner
9

Juste pour aider toute personne ayant le même problème mais utilisant spécifiquement le shell Zsh avec iTerm 2. Il s'avère que Zsh ne lit pas /etc/inputrccorrectement et ne parvient donc pas à comprendre les liaisons de touches que vous avez définies via les préférences!

Pour résoudre ce problème, vous devez ajouter des raccourcis clavier à votre .zshrcfichier, tels que:

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

Notez les barres obliques inverses dans l'exemple ci-dessus avant le «e», l'article lié ne les affiche pas, alors ajoutez-les dans votre .zshrcfichier lors de l'ajout de liaisons.

Nerdwood
la source
4

Les liaisons emacs à l'ancienne peuvent toujours fonctionner dans les terminaux iterm2 et os x:

Préférences -> Profils -> Clés (sous-onglet dans les profils)

  • Set Left/Right option <kbd>⌥</kbd> key acts as +Esc(similaire dans le terminal os x)

Cela devrait permettre alt- fet alt- bde déplacer les mots par mots. (Toujours ctrl- aet ctrl- etoujours travailler comme d'habitude)

Si elles sont définies, metaces anciennes liaisons fonctionneront alors que certaines liaisons iterm2 ne seront pas disponibles.

moitié
la source
2

Comme l'explique ici , vous pouvez le faire en quelques étapes simples:

Par défaut, les sauts de mots (option + → ou ←) et les suppressions de mots (option + retour arrière) ne fonctionnent pas. Pour les activer, allez dans "iTerm → Préférences → Profils → Clés → Charger le préréglage ... → Édition de texte naturel → Boom! La tête explose"

Islam.Ibrahim
la source
2

Les seules choses qui fonctionnent pour passer au début et à la fin de la ligne sont

⌘← "SEND ESC SEQ" OH- pour passer au début de la ligne
⌘→ "SEND ESC SEQ" OF- pour passer à la fin de la ligne

add787
la source
1

bind -p affichera une liste de clés d'échappement liées dans votre shell, ce qui pourrait vous donner plus d'idées / termes de recherche.

Jose Alban
la source
5
bind -pne fonctionne que dans les shells Bourne (bash, sh) pour zsh, csh tcsh, use bindkey.
Travis
0

Pour moi, la combinaison suivante a fonctionné:
| Key Action Esc+ End result | |-----------------------------------------------------| | Send Escape Sequence a Send ^[ a | | Send Escape Sequence e Send ^[ e |

Halil Özgür
la source