Ich habe diesen Datensatz in einer CSV-Datei
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504, 0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644, 0.00078635, 0.000730052, 0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669, 0.00230171, 0.00217917
Wie Sie sehen können, sind die Zahlen unterschiedlich formatiert und falsch ausgerichtet. Gibt es in vim eine Möglichkeit, die Spalten schnell richtig auszurichten, so dass das Ergebnis dies ist?
1.33570301776, 3.61194e-06, 7.24503e-06, -9.91572e-06, 1.25098e-05, 0.0102828, 0.010352, 0.0102677, 0.0103789, 0.00161604, 0.00167978, 0.00159998, 0.00182596, 0.0019804, 0.0133687, 0.010329, 0.00163437, 0.00191202, 0.0134425
1.34538754675, 3.3689e-06, 9.86066e-06, -9.12075e-06, 1.18058e-05, 0.00334344, 0.00342207, 0.00332897, 0.00345504,0.00165532, 0.00170412, 0.00164234, 0.00441903, 0.00459294, 0.00449357, 0.00339737, 0.00166596, 0.00451926, 0.00455153
1.34808186291, -1.99011e-06, 6.53026e-06, -1.18909e-05, 9.52337e-06, 0.00158065, 0.00166529, 0.0015657, 0.0017022, 0.000740644,0.00078635, 0.000730052,0.00219736, 0.00238191, 0.00212762, 0.00163783, 0.000750669,0.00230171, 0.00217917
Das wäre großartig, um Abschnitte mit Strg-V zu kopieren und einzufügen. Irgendwelche Hinweise?
:%!column -t -s ','
. Es werden die Kommas entfernt, sodass es sich nicht mehr um technische CSV-Dateien handelt. Aber arrangiert sie wunderschön, was ich brauchte.:'<,'>!column -t
column
wie im Beitrag beschrieben aus, 3) ersetzen Sie Ihre Trennzeichen wieder in Leerzeichen. Ein Beispielbefehl im visuellen Modus für Schritt 1 ist:'<,'>s/"\(\w\+\) \(\w\+\)"/"\1_\2"/g
Manchmal möchten wir nur zwei Spalten ausrichten. In diesem Fall benötigen wir keine Plugins und können die reine Vim-Funktionalität wie folgt verwenden:
=
.s/=/= ...spaces... /
visuelle Auswahl.dw
und vertikaler Bewegung.Beispiel dieser Technik unten gezeigt:
Ich muss die Dinge nicht oft genug ausrichten, um ein anderes Plugin zu installieren, daher war dies meine bevorzugte Methode, um dies zu erreichen - insbesondere, dass es nicht viel Nachdenken erfordert.
quelle
:s/=/ =/
es viel besser istCtrl + V
, die rechte Spalte auszuwählen, richten Sie sie mit<<
und.
wiederholen. Fand es hier: stackoverflow.com/a/24704379/2152384Wie sunny256 vorgeschlagen hat, ist der
column
Befehl eine großartige Möglichkeit, dies auf Unix / Linux-Computern zu tun. Wenn Sie ihn jedoch in reinem Vim ausführen möchten (damit er auch in Windows verwendet werden kann), ist es am einfachsten, Align zu installieren Plugin und dann machen:In der ersten Zeile werden die Einträge in den Kommas ausgerichtet, und in der zweiten Zeile wird das Komma so verschoben, dass es mit dem vorhergehenden Wert übereinstimmt. Sie können möglicherweise
AlignCtrl
ein benutzerdefiniertes Mapping definieren, das die gesamte Menge auf einmal erledigt, aber ich kann mich nie erinnern, wie ich es verwenden soll ...Bearbeiten
Wenn Ihnen zwei Leerzeichen zwischen den Einträgen nichts ausmachen und Sie dies in einem Befehl tun möchten, können Sie auch Folgendes tun:
quelle
:'<,'>Align &
:%Align! lP0 \s
(l
= linksbündig,P0
= 0 Polsterung nach dem Trennzeichen) erreicht werden.Dies ist eine großartige Antwort mit vim-Makros: https://stackoverflow.com/a/8363786/59384 - im Grunde beginnen Sie mit der Aufzeichnung eines Makros, formatieren die erste Spalte, beenden die Aufzeichnung und wiederholen das Makro für alle verbleibenden Zeilen.
Von dieser Antwort kopieren / einfügen:
Beachten Sie das einzelne Leerzeichen nach dem 100i, und <Esc> bedeutet "Escape drücken" - geben Sie "<Esc>" nicht wörtlich ein.
Übersetzung:
quelle
Tabularize ist auch ziemlich gut http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
quelle
Wir haben jetzt auch das fabelhafte EasyAlign- Plugin von junegunn.
Demonstrations-GIF aus der README-Datei:
quelle
Sie können das Plugin csv.vim verwenden .
Dies wird jedoch nicht genau das tun, was Sie gefragt haben: Es wird den Inhalt von Zellen richtig anpassen, während Sie Ihre Werte durch den Dezimalpunkt oder durch die erste Ziffer ausgerichtet haben.
Das Plugin enthält viele weitere nützliche Befehle zum Arbeiten mit CSV-Dateien.
quelle
Auch wenn Sie sehr lange Spalten haben, kann es nützlich sein, die Standardumhüllung zu deaktivieren
(Beachten Sie, dass Sie im Debian auch eine weitere Option für die Spalte -n haben, die Sie verwenden können, wenn Sie mehrere benachbarte Trennzeichen aufteilen möchten.)
quelle
Ich habe gerade Tablign für diesen Zweck geschrieben. Installieren mit
Dann markieren Sie einfach die Tabelle in vim und tun
quelle
Ziemlich alte Frage, aber ich habe kürzlich ein hervorragendes Vim-Plugin verwendet, das die Tabellenformatierung entweder im laufenden Betrieb oder nachträglich ermöglicht (je nach Anwendungsfall):
https://github.com/dhruvasagar/vim-table-mode
quelle
Hier ist eine reine Vim-Skriptantwort, keine Plugins, keine Makros:
Es ist vielleicht am klarsten, mit der Lösung meines Problems als Beispiel zu beginnen. Ich habe die Codezeilen ausgewählt, die ich beeinflussen möchte, und dann den folgenden Befehl verwendet (denken Sie daran, dass beim Aufrufen des Befehlsmodus aus dem visuellen Modus automatisch das "<, '>" vorangestellt wird, damit es auf den visuellen Bereich wirkt):
Außer ich habe NICHT "<0d>" eingegeben. Sie können nicht druckbare Zeichen in die Befehlszeile eingeben, indem Sie Strg-V und dann die Taste drücken, die Sie eingeben möchten. "<0d>" wird in der Befehlszeile gerendert, nachdem ich "Strg-V-Eingabe" eingegeben habe. Hier wird es durch den Befehl "normal" als Verlassen des Suchmodus "/" analysiert. Der Cursor springt dann in der aktuellen Zeile auf „Wert“.
Dann löschen wir einfach [D] den Rest der Zeile, springen zu Spalte 70 (oder was auch immer Sie in Ihrem Fall benötigen) und [P] ut, was wir gerade gelöscht haben. Dies bedeutet, dass wir bis zu unserer Suche die Breite der breitesten Linie bestimmen müssen. Wenn Sie diese Informationen nicht in Ihre Statuszeile eingefügt haben, können Sie die Spalte des Cursors anzeigen, indem Sie den Normalmodusbefehl 'g ctrl-g' eingeben. Beachten Sie auch, dass für das Springen zu einer nicht vorhandenen Spalte die Einstellung 'virtualedit' erforderlich ist!
Ich habe den Suchbegriff für den Befehl: g (lobal) leer gelassen, da wir einen visuellen Block verwendet haben und jede Zeile beeinflussen wollten, aber Sie können mit einer visuellen Auswahl (und dem "<, '>") aufhören und setzen dort stattdessen ein Suchbegriff. Oder kombinieren Sie eine visuelle Auswahl und einen Suchbegriff, um die Dinge feiner / einfacher einzugrenzen.
Folgendes habe ich kürzlich gelernt: Wenn Sie einen komplexen Befehlsmodus-Befehl durcheinander bringen, machen Sie ihn mit 'u' rückgängig (wenn er den Puffer beeinflusst), und drücken Sie dann "q:", um einen speziellen Befehlsverlaufspuffer einzugeben, der sich ähnlich wie ein herkömmlicher Puffer verhält . Bearbeiten Sie eine beliebige Zeile und drücken Sie die Eingabetaste. Der geänderte Befehl wird als neuer Befehl eingegeben. Unverzichtbar, wenn Sie sich beim ersten Mal nicht darum kümmern müssen, alles perfekt zu formulieren.
quelle
Ich habe ein Python-Skript geschrieben, mit dem Benutzer jede Art von Text auch außerhalb von vim grundsätzlich kolumieren können. Ich bin mir nicht sicher, ob dies für Windows- oder Mac-Benutzer funktioniert.
columnice.py Kern
Verwendung in vim.
Dadurch wird das Gleichheitszeichen als Begrenzer verwendet. Der Delimeter wird jedoch nicht weggeworfen.
quelle
Ich habe das in meiner .vimrc.
Dadurch werden die Spalten ausgerichtet, wobei das Komma beibehalten wird. Dies kann später für das korrekte Lesen erforderlich sein. Zum Beispiel mit Python Pandas
read_csv(..., skipinitialspace=True)
, danke Pandas Jungs für diese clevere Option, sonst in vim%s/,\s\+/,/g
. Es kann einfacher sein, wenn Siecolumn
die Option haben - Output-Separator Ich denke, meine nicht und ich bin nicht sicher warum (meine Manpage für Spalte sagt 2004, auf Ubuntu 18.04, nicht sicher, ob Ubuntu eine neue Version bekommen wird). . Wie auch immer, das funktioniert bei mir und kommentiere, wenn du irgendwelche Vorschläge hast.quelle