:s/sublime/vim/ – Mäuse, Speichern, Zeilenschieben und mehr

Nach den kosmetischen Details des ersten Artikels geht es heute um einige Standardaktionen, die mich als Entwickler begleiten.

vim-wombat-airline

Maussteuerung

Ja, einer der Vorteile von Vim ist, dass man nicht ständig zur Maus greifen muss. Die Umkehrung kann man aber nicht von der Hand weisen: Ist man gerade mit der Maus unterwegs, ist sie ein recht geeignetes Werkzeug um Cursor zu positionieren oder Textstellen zu markieren. Dies muss lediglich in der .vimrc aktiviert werden:

set mouse=a

Vim verhält sich hier wie die meisten grafischen Editoren: Ein Klick setzt den Cursor, ein Doppelklick markiert ein Wort, ein Dreifachklick markiert eine Zeile. Markierungen kann man dann mit y kopieren oder mit s oder c überschreiben.

ESC und der Normal-Mode

Vor allem in Anbetracht der Finger-Wegeoptimierung von Vim hat mich von Anfang an die allgegenwärtige Taste ESC genervt. Die Taste erfordert (jedenfalls bei mir) nicht nur Finger-, sondern eine ganze Handbewegung. Das kann doch nicht im Sinne des Erfinders sein. Vim bietet daher auch von Haus aus eine sinnvolle Alternative:

Strg+c
In den Normal-Mode wechseln

Speichern in der Kommandozeile

Als Sublime-Nutzer fällt vor allem auf, wie beschwerlich das Speichern ist. In aller Regel will man dies aus dem Insert-Mode, so dass der Vorgang sehr umständlich ist: In den Normal-Mode wechseln, :w und Enter – das ist für einen Vorgang den ich täglich hundert mal mache sicher keine Lösung. Lediglich zum Speichern und Schließen des aktuellen Buffers konnte ich mit ZZ einen Shortcut für den Normal-Mode finden. Schließen will ich in aller Regel aber nicht und auch hier müsste man erst den Modus wechseln. Strg+s hat sich bewährt, warum nicht erstmal übernehmen?

:nmap <c-s> :w<CR>
:imap <c-s> <Esc>:w<CR>a
:imap <c-s> <Esc><c-s>

Die letzte Zeile sorgt dafür, dass man aus dem Insert-Mode auch gleich wieder in den Normal-Mode wechselt. Diese kann wenn gewünscht weggelassen werden.

Im Terminal kann der Shortcut für Probleme sorgen, da er auch zur Flusskontrolle verwendet wird. In KDEs Konsole lässt sich diese in den Profileinstellungen unter Erweitert deaktivieren.

Zeilen und Blöcke verschieben

Oft verschiebe ich einzelne Code-Zeilen oder ganze Blöcke. In Sublime markiere ich diese und schiebe sie mit Strg+Shift+/ hoch bzw. runter. Vim kann das im Endeffekt genauso, hierfür ist aber etwas Konfiguration und ein Plugin erforderlich:

nmap <C-Up> [e
nmap <C-Down> ]e
vmap <C-Up> [egv
vmap <C-Down> ]egv
git clone git://github.com/tpope/vim-unimpaired.git ~/.vim/bundle/vim-unimpaired

Nun kann man mit V in den zeilenbasierten Visual-Mode wechseln, den Bereich markieren und ihn mit Strg+/ nach oben bzw. unter verschieben.

Klammer- und Anführungszeicheninhalte ändern

Zum Abschluss noch ein nettes, von Haus aus eingebautes Feature: Vim erlaubt es, den kompletten Inhalt zwischen zwei logischen Gruppierungszeichen zu editieren. Ein Beispiel:

def distance(a, b)

Um a und b in x und y umzubenennen, muss man lediglich den Cursor auf oder innerhalb der Klammern positionieren. Nun kann man mit ci) den Inhalt der Klammern löschen, in den Insert-Mode wechseln und den neuen Inhalt eingeben. Statt der schließenden kann man auch die öffnende Klammer nutzen. Statt normalen lassen sich auch eckige und geschweifte Klammern oder auch Anführungszeichen adressieren:

  • ci)
  • ci}
  • ci]
  • ci"
  • ci'