Flattr this

Das CSV Filetype Plugin für Vim

CSV Dateien werden per Default nicht besonders gut von Vim unterstützt. Aus diesem Grund habe ich ein spezielles Filetype Plugin für CSV-Dateien entwickelt.

Ursprünglich war das Plugin grob an einen Tipp aus dem Vim-Wiki angelehnt, mittlerweile aber ist es ein komplett eigenes Projekt.

Download


Das offizielle stabile Plugin gibt sich auf der vim.org Seite:
    http://www.vim.org/scripts/script.php?script_id=2830

Das  Entwicklungs-Repo befindet  sich bei Github:
      https://github.com/chrisbra/csv.vim

Dort kann man auch Bugs melden:
     https://github.com/chrisbra/csv.vim/issues

Das CSV Plugin kann dabei sowohl die gängigen Spaltentrenner automatisch erkennen (Komma, Semikolon, Tabulator) als auch mit Festbreiten Spalten umgehen. Für Festbreiten Spalten existiert ein simpler Wizard zum Definieren der Spalten

Features


Mit dem Plugin hat man die folgenden Möglichkeiten:

  • Anzeige, in welcher Spalte man sich befindet
  • Text innerhalb einer Spalte suchen  mittels des
  •    Kommandos :SearchInColumn
    • Vertikales Ausrichten der Spalten mittels
    •     :ArrangeColumn
      • visuelles  Hervorheben einer Spalte (:HiColumn)
      • Spalte mittels :DeleteColumn löschen
      • horizontale Zeile bzw. vertikale Spalte  einfrieren
      •     (ähnlich wie in Excel) mittels :Header und
          :VHeader
      • Eine Spalte sortieren mittels :Sort
      • Eine Spalte kopieren mittels :Column
      • Eine Spalte mittels :MoveCol verschieben
      • Summen einer Spalte berechnen :SumCol
      • Syntax Highlighting der Spalten
      • Dynamisches Filtern mittels Folding
      • Verteilung der Werte mittels :Analyze
      • Neue Records einfügen mit  :NewRecords
      • Automatisches Erkennen der Spaltentrenners
      • Neu initialisieren mittels :CSVInit
        • Verticales Folding zum Ausblenden von Spalten        
        •     (ähnlich wie in Excel)
        • Transpose (Vertauschen von Spalten und Zeilen)  

          Für die ausführliche Beschreibung der Kommandos, sei auf die beiliegende Hilfedatei verwiesen, die mittels  :h ft-csv erreichbar ist (auch unten verlinkt).

Mappings


Das Plugin definiert die folgenden Mappings zum Navigieren in CSV Dateien:

L/W/Ctrl-Rechts
N Felder vorwärts bewegen (N=1, wenn kein Count angegeben wurde).

E/H/Ctrl-Links
N Felder rückwärts bewegen (N=1, wenn kein Count angegeben wurde).

Hoch/K
N Zeilen nach oben, innerhalb der gleichen Spalte (N=1, wenn kein Count angegeben wurde).

Runter/J
N Zeilen nach unten, innerhalb der gleichen Spalte (N=1, wenn kein Count angegeben wurde).

Enter
Dynamisches Filtern. Zeigt nur Records, die den gleichen Wert in der aktuellen Spalte haben (der Rest wird ausgeblendet). Wenn schon ein Filter aktiv ist, wird beide Filter logisch verknüpft (nur wo beide Bedingungen erfüllt sind.)

Space/Leertaste
Dynamisches Filtern. Die Records verbergen, die den gleichen Wert in der aktuellen Spalte haben.

Rücklauftaste/Backspace
Die letzte Bedingung des dynamischen Filters löschen.

Konfiguration


Es existieren verschiedene Variablen, mit denen man das Plugin konfigurieren kann.

Delimiter
Den Standard Spaltentrenner kann man über die Veriable b:delimiter abfragen

Spaltendefinition
Mittels des Delimiters wird über einen regulären Ausdruck eine Spalte definiert. Diese Definition befindet sich in der Variablen b:col

Highlighting der Spalte
Die Hervorhebung beim Kommando :HiColumn kann man mit der Variable g:csv_hiGroup bestimmen. Wenn es nicht anders definiert ist, wird das Highlighting der Gruppe 'WildMenu' benutzt.

Strikte Spaltendefinition
Mittels der Variable g:csv_strict_columns kann definiert werden, dass in Spalten keine Spaltendelimiter vorkommen dürfen. Das vereinfacht die verwendeten regulären Ausdrücke deutlich und sollte das Plugin sowohl performanter als auch weniger speicherhungrig machen.

Multibyte Chars
Wenn in den Spalten keine Multibyte Zeichen vorkommen können (also z.B. Umlaute oder Unicode Zeichen), dann kann man das mit der Variable  g:csv_no_multibyte definieren. Das beschleunigt die Berechnung der optimalen Spaltenbreite beim :ArrangeColumn deutlich.

Concealing des Spaltendelimiters
Ab Vim Version 7.3 können bestimmte Inhalte versteckt werden, bzw durch ein anderes Zeichen angezeigt werden. Per default wird das Plugin das nutzen, um die Spaltendelimiter zu verstecken. Möchte man das nicht, setzt man die Variable g:csv_no_conceal auf 1

Zeilenumbrüche in Zellen
Eigentlich können CSV-Dateien per Definition keine Zeilenumbrüche enthalten. RFC4180 erlaubt es aber trotzdem ;)
Standardmäßig wird das Plugin aber keine Zeilenumbrüche erwarten und damit auch nicht funktionieren. Wenn man die Variable g:csv_nl = 1 setzt, dann sollte es aber funktionieren. Das ist aber ungetestet und mach wahrscheinlich sowohl Syntax-Highlighting kaputt, als auch andere Funktionalitäten des Plugins.

Automatisches Hervorheben der aktuellen Spalte
Möchte man immer die Spalte hervorheben, in der sich der Cursor gerade befindet, setzt man die Variable g:csv_highlight_column auf 1

Fest Spaltenbreiten
Neben Komma/Tabulator oder Semikolon getrennten Datensätzen, kommt es gelegentlich auch vor, dass auch feste Spaltenbreiten unterstützt werden. Die Spaltenbreite kann man mittels der Variable b:csv_fixed_width definieren, oder man benutzt dazu einfach den Wizard, der per :CSVFixed erreichbar ist.

Kopfspalte
Oftmals hat die erste Zeile bei CSV Dateien eine besondere Bedeutung, dort werden nämlich die Spaltennamen definiert. Man kann daher mittels der Variable b:csv_headerline definieren, wieviele Zeilen von der Betrachtung ausgeschlossen werden (wichtig z.B. bei Summenberechnung oder dynamisches Filtern).

Zahlenformat
Die Variablen b:csv_thousands_sep und b:csv_decimal_sep definieren, welche Zeichen als Tausendtrenner bzw. Dezimaltrenner erwartet werden. Per default erwartet Vim Zahlen immer englischen Format also z.B. 1,000.99 für die Zahl 1000,99.
Das wird benötigt, um bei der Summenbildung richtig zu rechnen.

Versteckte Zeilen verschieben
Beim dynamischen Filtern werden nicht passende Werte einfach ausgeblendet. Das funktioniert so ähnlich wie in Excel, nur dass eventuell die Records von Folds unterbrochen werden, was eventuell nicht gewünscht ist. Mittels der Variable g:csv_move_folds kann man das Plugin anweisen, alle nicht passenden Records zusammen zu gruppieren, so dass alle auf einmal ausgeblendet werden können.

Kommentare
Kommentare sind eigentlich nicht erlaubt in CSV Dateien. Dennoch erlaubt es das Plugin bestimmte Zeilen als Kommentare zu betrachten, die bei der Summenbildung oder beim Filtern ignoriert werden. Die Definition, womit eine Kommentarzeile beginnt, kann mit der Variable g:csv_comment geändert werden. Wenn nicht definiert, benutzt das Plugin die Voreinstellung der Option 'commentstring' (normalerweise /* .... */)

Hilfe


Die Hilfeseite findet man hier.


TL;DR


Das Plugin ermöglicht ein gutes Navigieren und Manipulieren von CSV-Dateien. Mit ein bißchen Übung wird man damit bald sehr gut zurecht kommen. Durch die umfangreichen Konfigurationsmöglichkeiten ist es gut an die individuellen Gegebenheiten anpass- und erweiterbar.

Hier ist ein Screencast zur Verwendung des Plugins
: