Vim ohne Esc

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

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 Developer

Ich bin ein brasilianischer Computeringenieur mit Wohnsitz in Deutschland und begeistere mich für Technik, Wissenschaft, Fotografie und Sprachen.

Ich programmiere seit etwa zwei Jahrzehnten und habe dabei alles von mobilen Apps und Webentwicklung bis hin zu Machine Learning erkundet. Derzeit fokussiere ich mich auf Cloud‑SRE und Data Engineering.

Ich engagiere mich ehrenamtlich in den Open‑Source- und Python‑Communities, helfe bei der Organisation der PyCon DE und PyData Berlin, betreue als Mentor und trage mit Code und Übersetzungen bei.

In meinem Blog teile ich Linux‑Tipps, Einrichtungsanleitungen und persönliche Notizen, die ich als spätere Referenz geschrieben habe. Ich hoffe, dass sie auch anderen nützlich sind. Die Inhalte sind in mehreren Sprachen verfügbar.

Schau dir meine Galerie an, um einige meiner Fotografien zu sehen.

Abseits der Tastatur findest du mich auf Konzerten, beim Klarinettenspiel, Radfahren, Tauchen oder beim Erkunden neuer Orte, Kulturen und Küchen.

Ich freue mich immer über den Austausch! 🙂

comments powered by Disqus