Wortnavigation und -löschung in iTerm2, vim & Shell

So richtest Du Option+Pfeiltasten und Option+Backspace für wortweises Navigieren und Löschen in iTerm2, vim und der Shell – lokal & via SSH – ein.
     

Viele von uns arbeiten täglich mit iTerm2 im Terminal – und stoßen dabei immer wieder auf das gleiche, nervige Problem: Die gewohnten Tastenkombinationen zum wortweisen Navigieren und Löschen funktionieren nicht überall gleich. Besonders knifflig wird es, wenn man via SSH auf Servern arbeitet und vim nutzt.

In diesem Beitrag zeige ich Dir, wie Du Option + Pfeiltaste und Option + Backspace so einrichtest, dass sie überall funktionieren: lokal, via SSH, in der Shell und in vim!

Problem & Zielstellung

Wir möchten:

  • mit Option + ← wortweise nach links springen

  • mit Option + → wortweise nach rechts springen

  • mit Option + Backspace das vorherige Wort löschen

Und zwar in der Shell und in vim, egal ob lokal oder per SSH.

Standardmäßig senden Terminal-Emulatoren wie iTerm2 und verschiedene Shells und Editoren unterschiedliche Codes für diese Tastenkombinationen.

Das führt dazu, dass z.B. ⁠Option + → in der Shell funktioniert, aber in vim plötzlich nicht mehr – oder umgekehrt.

Die Lösung: Konsistente Codes und Mappings

iTerm2 konfigurieren

Öffne die Einstellungen (⁠Cmd + ,) und gehe zu Profiles → Keys.

Füge folgende Tastenkombinationen hinzu bzw. ändere die bereits bestehenden ab:

Tastenkombination Action Hex Code
Option + ← Send Hex Code 0x1b 0x62
Option + → Send Hex Code ⁠0x1b 0x66
Option + Backspace Send Hex Code 0x17

Damit sendet iTerm2 für die Wortnavigation und -löschung konsistente Codes, die sowohl Shell als auch vim verstehen (bzw. die wir gleich so konfigurieren, damit sie es tun).

Shell-Konfiguration (bash und zsh)

Bash (~/.bashrc):

bind '"\eb": backward-word'
bind '"\ef": forward-word'

Zsh (~/.zshrc):

bindkey '^[b' backward-word
bindkey '^[f' forward-word

vim-Konfiguration

Zu guter Letzt konfigurieren wir noch vim (~/.vimrc):

" Wort-Navigation und -Löschung im Insert-Modus
inoremap <ESC>b <C-o>b
inoremap <ESC>f <C-o>w
inoremap <C-w> <C-w>

" Optional: Auch im Normal-Modus
nnoremap <ESC>b b
nnoremap <ESC>f w
  • <ESC>b und ⁠<ESC>f sind die Codes, die iTerm2 für Option+Pfeil sendet.

  • Das Mapping sorgt dafür, dass Du im Insert-Modus mit Option+←/→ wortweise springen kannst, ohne den Modus zu verlassen.

  • <C-w> (Ctrl+W) ist der Standard zum Wortlöschen im Insert-Modus.

Fazit

Jetzt solltest Du überall (lokal, SSH, Shell, vim) mit Option + ←/→ wortweise springen und mit Option + Backspace das vorherige Wort löschen können.

Mit ein wenig Konfigurationsaufwand kannst Du Dir eine konsistente, effiziente Umgebung schaffen - auch wenn man die Konfigurationen leider händisch auf jedes System übertragen muss; ich nutze hierfür gerne Ansible, falls ihr das nicht kennt, solltet ihr euch das unbedingt anschauen.