.

VIM als Texte-Umkodierer

Wer zwischendurch mal vor dem Problem steht, eine Textdatei wg. falsch kodierter Umlaute nicht richtig lesen oder weiterbearbeiten zu können, dem sei vim empfohlen.

Möchte man seinen Text beispielsweise UTF-8-kodiert abspeichern, reicht da ein:
:w ++enc=utf-8


App-Empfehlung: Vimperator

Eigentlich ist Vimperator keine eigene Applikation, sondern “nur” ein Firefox-Plugin.

Aber das Addon verändert (resp. ergänzt) die Bedienung des Browsers so grundlegend, dass ich Vimperator schon gerne als “App-Empfehlung” vorstellen möchte.

Das Plugin erweitert Firefox um das typische vi-Gefühl. Es gibt den Command- und Normal-Modus, Kurzbefehle um neue Seiten zu öffnen, auf Seiten zu suchen und zu navigieren und alles das, was man sich als vi-User nur wünscht.

Auffälligste Veränderung nach der Installation der Erweiterung ist, dass die Kopfzeile und das Menü verschwunden sind.

vimperator

Stattdessen gibt’s die vim-typische Statuszeile, und die Kommando-Zeile, über die im Command-Mode Befehle abgesetzt werden können.

“t www.google.de” (oder als Kommando “:tabopen www.google.de” beispielsweise öffnet die Suchmaschine in einem neuen Tab.

Nach ausgelöster Suche kann man mit “f” eine Kürzelliste auf die Links anzeigen lassen (siehe Screenshot). Möchte man dann im Beispiel zum zweiten Suchergebnis springen, muss man einfach “39″ eintippen.

“gt” springt zum nächsten Tabulator, “gT” zum Tabulator davor, ein “G” bringt einen auf der aktuellen Seite an das Seitenende, “gg” wieder nach oben.

In der Historie geht es mit “CTRL-o” zurück und mit “CTRL-i” vorwärts, ss gibt eine “Bookmark-Liste” (”:bmarks”), die aktuelle Seite fügt man mit “:bmark” den Favoriten hinzu, und, und, und …

Ach, ich könnte jetzt stundenlang schwärmen. Aber besser, Du installierst die das Plugin und liest Dich durch die per “F1″ verfügbare Hilfe durch das Quickstart-Tutorial.


Tasklist-Plugin für vim

Mein Liferea machte mich vor ein paar Tagen auf ein sehr interessantes VIM-Plugin aufmerksam:

Tasklist öffnet über “\t” über dem aktuell geöffneten Text einen Splitscreen und zeigt dort kumuliert alle Zeilen an, die die Schlüsselwörter “TODO”, “FIXME” oder “XXX” enthalten. In dieser Liste kann man mit den Cursortasten (resp. “j” und “k”) navigieren.

Drückt man vor einem Eintrag die Enter-Taste, schließt sich der Splitscreen, und der Cursor wird an die gewählte Textstelle gesetzt.

Das kommt meiner Arbeitsweise sehr entgegen, schreibe ich beim Coden eigentlich an jede Stelle, die noch einer Überarbeitung bedarf, einen Kommentar, der mit “debug stpe” beginnt. Um diesen String in das Plugin mit aufzunehmen, kann einfach die Tokenliste “g:tlTokenList” in tasklist.vim entsprechend erweitert werden.

Um das Plugin zu installieren, reicht es, die Datei tasklist.vim nach ~/.vim/plugin/ zu kopieren.


sudo-write mit vim

Mir passiert es immer mal wieder, dass ich auf meinen Systemen als nicht privilegierter User mit dem vi Dateien zum Bearbeiten aufrufe, für die ich keine Schreibrechte besitze.

Das hieß bislang: geänderte Datei unter einem anderen Namen speichern und dann wieder mit root-Rechten an die richtige Stelle kopieren.

Das hat aber dank Christian nun ein Ende. Sein vim-Plugin sudoedit.vim erweitert den Editor um den Befehl “:SudoWrite”. Und nach Eingabe des root-Passwortes wird die Datei dann erfolgreich an ihren eigentlichen Heimatort zurückgeschrieben.

Das Plugin gibt es: hier zum Download.

Bei manchen Sachen weiß man erst, dass man sie braucht, wenn man sie dann hat…


vim – Kommentare in Konfigurationsdateien ausblenden

Oftmals nervt es, wenn Konfigurationsdateien von Serverdiensten überaus penibel kommentiert sind, man aber nur einen schnellen Überblick über bestimmte Werte in einer Datei haben möchte und eigentlich weiß, wie welche Option funktioniert.

Paradebeispiele sind squid.conf oder awstats.conf.

Wer keine Kommentierungen benötigt, kann diese in vim bei Bedarf ganz einfach per Code-Folding ausblenden.

Wenn man folgende Zeilen in die /etc/vim/vimrc.local einträgt:
set fdm=expr
set fde=getline(v:lnum)=~'^\\s*#'?1:getline(prevnonblank(v:lnum))=~'^\\s*#'?1:getline(nextnonblank(v:lnum))=~'^\\s*#'?1:0

kann man anschließend die Kommentarzeilen in einer Datei gesammelt mit “zi” aus- und wieder einblenden, “zo” blendet den Kommentarblock ein, über dem sich gerade der Cursor befindet, “zc” faltet diesen wieder zusammen.

Ein herrliches kleines Helferlein, gefunden habe ich es auf debian-administration.org

Vielen Dank an diese Adresse.


Einrückungen bei Paste nach vi verhindern

Welcher vi-User kennt das nicht: Beim Einkopieren von Textteilen aus dem Zwischenspeicher in das Editorfenster werden jeder Zeile Tabulator-Zeichen vorangestellt, der eingefügte Text sieht aus, als hätte jemand kräftig den Monitor geschüttelt. Eine Menge Nacharbeit ist dann i.d.R. angesagt.

Doch es geht auch einfacher.

Bevor der im Zwischenspeicher gehaltene Text in die aktuell bearbeitete Datei eingefügt werden soll:

  • wechselt man mit ESC in den Kommando-Modus und
  • setzt “:set paste” als Kommando ab.
  • Drückt man nun wieder auf “i” um in den Einfügen-Modus zu wechseln, sollte in der Statuszeile die Angabe “– INSERT (paste) –” erscheinen, der dann aus dem Speicher eingefügte Text sollte ohne Tabs im Editorfenster auftauchen.

    Das Kommando “set nopaste” setzt das Verhalten wieder zurück.

    Das Ganze lässt sich auch noch einmal vereinfachen:

    Man öffne die Datei /etc/vim/vimrc.local und füge hier die Zeile:
    set pastetoggle=<F8>
    ein.

    Beim nächsten Aufruf von vi(m) reicht ein Betätigen der Taste F8 im Insertion-Modus, um zwischen den Paste-Modi zu wechseln.


    Tabpages in vim benutzen

    Man lernt ja nie aus: Seit Version 7 kann man in vim auch mit einer Art “Aktenreitersystem” arbeiten, das immer die gerade geöffneten Dateinamen am oberen Fensterrand anzeigt.

    So kann man vim schon direkt beim Aufruf mit mehreren Dateien in eigenen Tabs füttern:

    vim -p datei1 datei2 …

    Editiert man eine Datei, und möchte zwischendurch eine neue anlegen, ohne vim zu verlassen, lässt sich einfach über

    :tabnew

    ein neues “Fenster” öffnen.

    Mit

    :tabnew [Dateiname]

    öffnet sich der neue Tab direkt mit der übergebenen Datei.

    Mit

    :tabn

    und

    :tabp

    wechselt man zum nächsten bzw. vorhergehenden Tab, das Kommando “gt” im Normalmode bringt einen zum nächsten Tab, “2gt” sorgt dafür, dass man im zweiten Tab landet.

    Aber auch die gewohnten “Dateiwechselkommandos” arbeiten im “Tabsystem” wie gewohnt, “:n” bringt einen zur nächsten geöffneten Datei, “:previous” wieder zurück. Auch “:args” zeigt, wie bisher, die gerade geöffneten Dateien an.

    Möchte man einen Befehl auf alle Aktenreiter gleichzeitig absetzen, erreicht man das mit dem Kommando “:tabdo”. Um beispielsweise alle Aktenreiter gleichzeitig zu schließen, ohne die Änderungen zu speichern, benutzt man:

    :tabdo q!

    Eine kleine Einführung in die Benutzung von Tabs erhält man mit:

    :help tab-page-intro

    Kann man also eine Zeile von seinem Eingabefenster abzwacken (und liebgewonnene Kommando-Tippautomatismen kurzzeitig zuverlässig verdrängen ;) ), dann ist das Tabsystem recht komfortabel, fehlt der Platz in der Textkonsole, arbeitet man aber auch auf althergebrachte Weise ganz ordentlich.


    Minitip – Dos-Zeilenumbrüche mit VI ersetzen

    Wer unter Linux des Öfteren einmal mit unter Windows erstellten Textdateien arbeiten muss, kennt Dinge wie:
    zeile1^Mzeile2^Mzeile3
    Statt der gewünschten Zeilenumbrüche (LF) erscheint wiederholt der Platzhalter für den Windo(w)s-Zeilenumbruch (CR + LF).

    In vi lässt sich dies aber leicht beheben:
    %s/^M/\r/g

    Wichtig: Das Sonderzeichen “^M” muss eingegeben werden als: [strg]+V [strg]+M

    (Wer mehrere Dateien konvertieren muss, der kann sich die Sache auch mit dem Tool dos2unix vereinfachen – in Debian zu finden im Paket tofrodos)


    Kalender
    März 2010
    M D M D F S S
    1234567
    891011121314
    15161718192021
    22232425262728
    293031EC
    Ereignisse
      • Keine Termine.
    Du befindest Dich in der Kategorie: 'vi(m)'.
    Kategorien
    Archiv
    Wichtiges!?

    .