Wortnavigation und -löschung in iTerm2, vim & Shell
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>bund<ESC>fsind 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.