Vim ist ein weit verbreiteter und mächtiger Texteditor für Linux (und andere) Betriebsysteme. Ich arbeite sehr gerne mit vim, da dieser einige sehr nützliche Fähigkeiten besitzt.

Eine dieser Fähigkeiten werde ich hier kurz vorstellen.

In meiner Arbeit muss ich Dateien oft "auf" einer bestimmten Zeilennummer öffnen. Vim kann dies elegant lösen:

vim +85 /path/somefile.log

… öffnet die Datei somefile.log auf der Zeile 85.

"Automatisches" Löschen einer Zeile aus einer Datei

Ein weiteres nützliches Beispiel ist das direkte Löschen einer Zeile auf einer Datei. Hier im Beispiel die known_hosts Datei von SSH, falls dieselbe IP für einen neuen Server genutzt wird. Folgende Meldung erscheint dann beim Verbindungsversuch:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
XX:YY:00:11:22:33:44:55:66:AA:BB:CC:DD:EE:99:00.
Please contact your system administrator.
Add correct host key in /Users/<username>/.ssh/known_hosts to get rid of this message.
Offending RSA key in /Users/<username>/.ssh/known_hosts:127
RSA host key for 192.168.XXX.XXX has changed and you have requested strict checking.
Host key verification failed.

Natürlich muss man sich zuerst vergewissern, dass hier nicht wirklich ein Sicherheitsrisiko besteht. Aber da ich genau weiss, dass die IP angepasst wurde, ist das hier kein Problem.

Die SSH Warnung enthält folgende Zeile, welche uns nützlicherweise auch gerade die Zeilennummer verrät:

…
Offending RSA key in /Users/<username>/.ssh/known_hosts:127
…

Die Zeile mit Zeilennummer 127 enthält den Eintrag der gelöscht werden muss um wieder mit SSH auf diese IP verbinden zu können.

Jetzt löschen wir diese Zeile mit vim "direkt" aus der Kommandozeile...

Direktes löschen einer bestimmten Zeile via Zeilennummer mit vim:

vim +"127d|w|q" /Users/<username>/.ssh/known_hosts

… ausgeführte Schritte des Kommandos 127d|w|q:

  • öffnet die Datei known_hosts auf der Zeile 127
  • löscht die ganze Zeile (d)
  • speichert (w) die Datei
  • schliesst (q) die Datei am Ende wieder

Mehr zu vim und der "Option" +{command} bzw. -c {command}: http://vimdoc.sourceforge.net/htmldoc/starting.html#-c