Vim ohne Esc

Mai 21, 2012·
Julio Batista Silva
Julio Batista Silva
· 2 Min Lesezeit

Die Esc‑Taste ist klein und ungünstig positioniert – für Vi/Vim‑Nutzer ein Problem, denn Esc wechselt in den Normal‑Modus.

Schon bei klassischen Tastaturen ist der Weg zu Esc lang – und historisch nicht vorgesehen: Als Bill Joy den vi schrieb, nutzte er ein ADM‑3A. Die Pfeile waren auf HJKL aufgedruckt und Esc saß dort, wo heute Tab ist.

Es gibt mehrere Alternativen zur Esc‑Taste. Fünf davon:

Ctrl-[

Im Vim entspricht Ctrl-[ exakt Esc. Es sind zwar zwei Tasten, aber ergonomischer und ohne Konfiguration nutzbar. Siehe :help i_CTRL-[.

Ctrl-c

Ctrl-c beendet den Insert‑Modus und geht in den Normal‑Modus. Nicht identisch zu Esc, praktisch aber ähnlich. Siehe :help i_CTRL-C.

Alt/Meta

In vielen Terminals entspricht Alt+Taste „Esc gefolgt von Taste“. Praktische Beispiele:

  • Alt+hjkl: Bewegung
  • Alt+o: Neue Zeile unterhalb
  • Alt+A: Append ans Zeilenende
  • Alt+p: Einfügen an aktueller Position

Mappings in der .vimrc

Beliebte Mappings für Esc sind z. B.:

imap ;; <Esc>
imap jk <Esc>
imap ii <Esc>

Nachteil: Wenn du ;;, jk oder ii wirklich tippen musst.

Esc mit Caps Lock tauschen

Meine Lieblingsvariante, benötigt aber System‑Konfiguration, da Caps Lock eine Mod‑Taste ist.

setxkbmap

Einfachste Lösung – tauscht Caps Lock und Esc:

setxkbmap -option caps:swapescape

In .xinitrc eintragen. Ich setze außerdem das gesamte Tastaturlayout damit:

setxkbmap -model pc105 -layout gb -variant intl -option caps:swapescape

Xmodmap

Wenn du Caps Lock behalten, aber zusätzlich Esc haben willst:

  1. In ~/.Xmodmap:

    remove Lock = Caps_Lock
    keysym Caps_Lock = Escape
    
  2. In .xinitrc laden:

    xmodmap ~/.Xmodmap
    
  3. Kleines Umschalt‑Skript:

    #!/bin/sh
    case $1 in
        off)
            xmodmap -e "clear lock"
            xmodmap -e "keycode 0x42 = Escape"
            ;;
        on)
            xmodmap -e "keycode 0x42 = Caps_Lock"
            xmodmap -e "add lock = Caps_Lock"
            ;;
        *)
            echo "Uso: caps {on|off}, liga e desliga o Caps Lock"
            echo "Quando desligado, ele funciona como a tecla Esc"
            ;;
    esac
    

Terminal

Alle obigen Lösungen gelten nur unter X. Für die TTYs:

julio@julio-acer ~> (echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -

Alias in ~/.zshrc:

alias nocaps='(echo `dumpkeys | grep -i keymaps`; echo keycode 58 = Escape; echo keycode 1 = Caps_Lock) | sudo loadkeys -'

Aktualisierung

Heute (2022) nutze ich die ideale Lösung: ein frei belegbares Keyboard. Ich habe ein Moonlander Mark I und mappe Caps Lock auf die Taste links vom A.

Keine Software‑Änderungen nötig.


Julio Batista Silva
Autoren
Senior Cloud-Entwickler
comments powered by Disqus