Seite wählen

NETWAYS Blog

Daily business: der Editor vim

Es ist unerfreulich lange her, dass ich das erste Mal mit vim in Berührung kam — anno 1997, um genau zu sein, während meiner ersten verzweifelten Gehversuche in Sachen S.u.S.E. Linux. Oder war das noch vi? So irgendwie habe ich das Tool über die Jahre dann hinter mir her geschleift wie eine altmodische Handtasche, mich aber viel zu spät erst ernsthafter damit befasst — ein blöder Fehler, vor dem ich einige von euch ja vielleicht bewahren kann. Denn was viele (und gerade auch Neueinsteiger) gar nicht zu ahnen scheinen: vim ist üblicherweise auf Systemen vorhanden, kann viel, ist ziemlich cool und in der Handhabung auch gar nicht so widerlich, wenn man sich erst leidlich eingearbeitet hat.

Die Konfiguration des Editors erfolgt in einer Textdatei namens .vimrc, welche im $HOME-Verzeichnis des jeweiligen Nutzers liegen muss. Beginnen wir diese Datei mit nocompatible: denn ein compatible vim ist lediglich noch ein vi, sprich alle nützlichen Erweiterungen und Errungenschaften der letzten 20 Jahre würden abgeschaltet — und wer will das schon?

set nocompatible " Using vim settings and not vi

Widmen wir uns also einigen kleinen Kniffen, die mir für die tägliche Arbeit inzwischen unverzichtbar geworden sind: naturgemäß (und da ich gerade einen Haufen müffelnden Puppet-Codes in Richtung Ansible transportieren darf) editiere ich aktuell häufig an YAML-Dateien herum, und da ist das Thema „Einrückungen“ beispielsweise sehr relevant: YAML kennt, plump gesagt, keine Tabs, und so bewährt es sich sehr in der persönlichen .vimrc bereits festzuhalten, dass ein Tab beispielsweise durch zwei Leerzeichen ersetzt wird und Einrückungen ebenfalls zwei Leerzeichen betragen sollen. Protipp: Lasst außerdem über existierende Dateien ein :retab laufen, so dass alle eventuell vorhandenen Tabs gemäß eurer Konfiguration in Leerzeichen umgesetzt werden — die Einstellungen greifen nicht automatisch bei bereits bestehendem Text. Und: möchtet ihr YAML anders einrücken als beispielsweise C oder PHP, so beschäftigt euch mit den Möglichkeiten, die autocmd bietet!

set autoindent " Guess what?
filetype plugin indent on " Enable indenting for files
set backspace=indent,eol,start " Allow backspacing over indention/ line breaks/ insertion start
set softtabstop=2 " Indent 2 spaces when hitting TAB
set shiftwidth=2 " Indend 2 spaces when autoindent
set tabstop=2 " Show existing tab with 2 spaces width
set expandtab " Convert tabs into spaces

Gerade bei YAML hilft es mir häufig sehr wenn ich sehe, an welcher Stelle im Dokument ich mich gerade befinde; deshalb lasse ich mir die Zeilen durchnummerieren und mittels Unterstreichung die aktuelle Position anzeigen. Syntax Highlighting ist natürlich großartig, das will ich unbedingt, und durch eine einfache Anweisung sorgt zukünftig für die visuelle Hervorhebung zusammengehörender Klammern. Protipp: während number die Zeilen aufsteigend durchnummeriert, stellt relativenumber die Zeilennummern relativ zur aktuellen Position dar.

set number " Enable line numbers
syntax on " Set syntax highlighting
set showmatch " Show matching brackets
set cursorline " Highlight line under cursor
set cursorcolumn " Highlight column

Was bei der täglichen Arbeit hilft: eine Statuszeile, die mit genau jenen Informationen aufwartet, die persönlich hilfreich sind. In meinem Fall sind das Angaben wie Dateiname, beispielsweise, Dateityp oder an welcher Stelle — prozentual gesehen — ich mich innerhalb meiner Datei gerade befinde. Für euch sind hier vielleicht ganz andere Informationen wichtig, weshalb ich euch die Lektüre der entsprechenden Dokumentation ans Herz legen möchte.

set laststatus=2 " Show status line
set statusline=%t " tail of filename
set statusline+=\ %{&ff} " File format
set statusline+=\ %y " Filetype
set statusline+=\ %c, " Cursor column
set statusline+=%l/%L " Cursor line/ total lines
set statusline+=\ %P " Percent through file

Was ich wirklich zu lieben lernte: undo und redo. Die Basics kennen noch die meisten: u macht die letzte Änderung rückgängig, uuu die letzten drei und 5u die letzten fünf. Wirklich interessant wird das allerdings, wenn man es mit Zeiträumen verbindet: so macht earlier 2m (alternativ: ea 2m) die Änderungen der letzten zwei Minuten rückgängig, wohingegen later 5m (alternativ: lat 5m) alle Änderungen der letzten fünf Minuten wiederherstellt. Die Sache hat nur einen Haken: wie fast überall sind diese Statements nur innerhalb der laufenden Sitzung möglich; wird der Editor beendet und die gleiche Datei später erneut editiert, ist keine History der bisherigen Änderungen verfügbar.
Wenig überraschend lässt sich auch das anpassen: über set undofile weisen wir vim an, die Änderungen jeder Datei zu persistieren; vim tut das dann jeweils in Form eines hidden file an gleicher Stelle, was auf Dauer etwas unübersichtlich werden könnte. Erstellen wir mittels mkdir ~/.vim/undo ein eigenes Verzeichnis für Dateien dieser Art, können wir vim aber auch instruieren all diese Änderunsdateien dort vorzuhalten. Das erlaubt dann auch umfangreiche Zeitsprünge: ea 3d wird die Änderungen der letzten drei Tage rückgängig machen.

set undofile " Undo history even between sessions
set undodir=~/.vim/undo " All undo files in one directory

Zuguterletzt verpassen wir unserem vim ein hübsches colorscheme — eine Auswahl solch vordefinierter Farbschemata findet sich, in Abhängigkeit verwendeter Version und Distribution, üblicherweise in /usr/share/vim/vim$VERSION/colors/ in Form von .txt-Dateien. Ich entscheide mich für desert, ihr könnt euch aussuchen was euch am besten gefällt und versiertere Nutzer erstellen sich ihre colorschemes später dann ohnehin selber… Und wenn wir ohnehin gerade mit Farbgebungen spielen lassen wir uns die Zeilennummer spaßeshalber rot hinterlegen, während die Hervorhebung der Spalte in einem aufdringlichen hellen Magenta erfolgen soll. Einschub: eine Liste verfügbarer Farben lässt sich aus vim heraus unkompliziert mit dem Kommando :h cterm-color abrufen.

colorscheme desert " Setting nice colors
highlight CursorLineNR ctermbg=red
highlight CursorColumn ctermbg=LightMagenta

Es gäbe noch So! Viel! Mehr! Belassen wir es für heute mal dabei. Eine einsatzbereite exemplarische vimrc-demo findet ihr auf GitHub; sie ist nicht als „finale Fassung“ zu verstehen sondern vielmehr als Ausgangspunkt für die Erarbeitung einer persönlichen und über die Zeit immer perfekteren Version. Und vielleicht wollt ihr über die Kommentare verraten, ob Artikel dieser Art hilfreich für euch sind — und welche Einstellung, welches Plugin, welcher Kniff für euch unverzichtbar ist?

Klein und gut – Komodo Edit

Ungefähr alle zwei Monate begebe ich mich auf die Suche nach einem neuen Texteditor. Zu schwerfällig sind manche IDEs – starten dauert lange oder man kann einzelne Dateien gar nicht erst editieren wenn man sich nicht in einem Projektkontext befindet. Meistens ist die Suche dann aber schnell beendet. Entweder reicht mir das Featureset nicht aus oder er ist schon wieder mit zu viel Firlefanz überladen. Nicht so mit Komodo Edit, einem freien Editor der Firma ActiveState (Die mit dem Perl unter Windows), welcher frei erhältlich ist.
Komodo Edit ist eine abgespeckte Version der Komodo IDE, beinhaltet aber alles wichtige für den ambitionierten Schreiberling. Ein kleiner Abriss, was mitgefällt:

  • Guter Editor, Syntax Highlighting, Code Folding, Call Tips, Code Completion, Matching Braces
  • Projekt Support – oder eben auch nicht
  • Unterstützt automatisch die wichtigsten Script Sprachen auch ohne Datenerweiterung
  • FastOpen: Öffnen von Dateien anhand von Namensfragmenten
  • Gutes Design und ergonomische Darstellung von Text und Elementen

Das System basiert auf dem von Mozilla entwickelten XML Userinterface (XUL) und startet erträglich schnell. Dank dem mitgelieferten Installer integriert er sich nahtlos in die bekanntesten Linuxdistros und ersetzt für mich die systeminternen Texteditoren, z.B. gedit. Perfekt finde ich ihn für Perl. Die meisten IDEs kommen mit dem Code und der redundanten Schreibweise eh nicht sonderlich gut zurecht. Der kleine Drache ist nicht perfekt, erkennt aber zuverlässig die wichtigsten Dinge um nicht auf Nase zu fallen. Ansonsten funktioniert er auf jeder erdenklichen Plattform von Windows bis Linux und natürlich auch für alle anderen Randgruppen!
Genug der Ode. Mein Fazit: Einfach mal testen!

Marius Hein
Marius Hein
Head of IT Service Management

Marius Hein ist schon seit 2003 bei NETWAYS. Er hat hier seine Ausbildung zum Fachinformatiker absolviert und viele Jahre in der Softwareentwicklung gearbeitet. Mittlerweile ist er Herr über die interne IT und als Leiter von ITSM zuständig für die technische Schnittmenge der Abteilungen der NETWAYS Gruppe. Wenn er nicht gerade IPv6 IPSec Tunnel bohrt, sitzt er daheim am Schlagzeug und treibt seine Nachbarn in den Wahnsinn.

VIM ist einfach cool

Als Linux-Consultant arbeitet man viel auf der Shell, daher sollte der Editor der Wahl möglichst auch überall wo man SSH hat einsetzbar sein.
Meine Wahl ist seit einigen Jahren daher VIM, dabei gewöhnt man sich über die Jahre ein seine eigenen Einstellungen und möchte diese auch gar nicht mehr missen.
Ich persönlich werde jedenfalls halb wahnsinnig wenn ich mit so einem blanken VIM ohne meine eigene Konfiguration arbeiten muss 😉
Heute nutze ich die Gelegenheit um meine mühsam gepflegte .vimrc zu teilen, natürlich mit Kommentaren.

syntax on                 " Aktiviert das Syntax Hervorhebung immer
set background=dark       " Hilfreich bei Terminals mit dunklem Hintergrund
                          " dann sieht man auch die Kommentare endlich wieder
set title                 " Titel Text für moderne Terminals (Datei und Pfad)
set modeline modelines=5  " Schaltet die Modeline Erkennung an
set ts=4                  " Setzt den Tabstopp und die Shiftwidth (Sprungweite
set sw=4                  " beim Einrücken) auf 4 Leerzeichen
set expandtab             " Nie Tabstopps benutzen, sondern Leerzeichen
set autoindent            " Automatisches Einrücken bei New-Line
set smarttab              " Intelligenteres Löschen von Leerzeichen-Tabs
set mouse=a               " Schaltet die Maus Bedienung ein
                          " Ein geniales Feature - nach etwas Eingewöhnung...
                          " Tipp: mit Shift-Klick kann man ganz normal im
                          " Terminal markieren
                          " Achja: Mausrad funktioniert wunderbar!
set hlsearch              " Hebt die aktuellen Suchergebnisse hervor
" Tell vim to remember certain things when we exit
"  10  :  marks will be remembered for up to 10 previously edited files
"  100 :  will save up to 100 lines for each register
"  20  :  up to 20 lines of command-line history will be remembered
"  %    :  saves and restores the buffer list
"  n... :  where to save the viminfo files
set viminfo='10,\"100,:20,%,n~/.viminfo
" Und zu guter letzt: Mit dieser kleinen Hilfsfunktion wird die Position
" an der man zuletzt in einer Datei war mit in die .viminfo gespeichert
function! ResCur()
  if line("'\"") <= line("$")
    normal! g`"
    return 1
  endif
endfunction
augroup resCur
  autocmd!
  autocmd BufWinEnter * call ResCur()
augroup END

Ich benutze auch einige Addons:

Weiterführende Links: