Frage

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, werden die Zahlen unterschiedlich und falsch ausgerichtet formatiert. Gibt es eine Möglichkeit in vim, um schnell die Spalten richtig auszurichten, so dass das Ergebnis das 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 zum Kopieren und Einfügen Abschnitte mit Strg-V. Irgendwelche Hinweise?

War es hilfreich?

Lösung

Wenn Sie auf irgendeine Art von UNIX (Linux, etc.) sind, können Sie betrügen und filtern sie durch die Säule (1) Befehl.

:%!column -t

Das oben wird auf Trennzeichen innerhalb Stringliterale analysieren, die falsch ist, so dass Sie wahrscheinlich Vorverarbeitungsschritte benötigen und das Trennzeichen für diese Datei beispielsweise die Angabe:

%!sed 's/","/\&/' | column -t -s '&'

Andere Tipps

Manchmal wollen wir nur zwei Spalten auszurichten. In diesem Fall brauchen wir keine Plugins und reine Vim Funktionalität wie folgt verwendet werden:

  1. Wählen Sie ein Trennzeichen. In OPs Post ist dies ein Komma, in meinem Beispiel ist dies =.
  2. Fügen Sie Leerzeichen vor / nach. Ich benutze s/=/= ...spaces... / in der visuellen Auswahl für diese.
  3. Suchen Sie nach dem längsten Wort und Platz Cursor nach.
  4. Entfernen Sie alle zusätzlichen Leerzeichen dw und vertikale Bewegung mit.

Beispiel dieser Technik demonstriert unter:

Beispiel

Ich finde nicht, mich um Dinge oft genug ausrichten ein anderes Plugin zu installieren, so war dies mein bevorzugter Weg, es zu erreichen -. Vor allem, dass es nicht viel zu denken erfordert

Wie sunny256 vorgeschlagen, der column Befehl ist eine gute Möglichkeit, dies zu tun, auf Unix / Linux-Rechnern, aber wenn man es in reiner Vim tun will (so dass es auch in Windows verwendet werden kann), ist der einfachste Weg die Align Plugin zu installieren und dann tun:

:%Align ,
:%s/\(\s\+\),\s/,\1/g

Die erste Zeile richtet die Einträge auf dem Komma und die zweite bewegt das Komma, so dass es mit dem vorhergehenden Wert bündig ist. Sie können in der Lage sein AlignCtrl zu verwenden, um eine benutzerdefinierte Zuordnung zu definieren, die die gesamte Menge auf einmal tut, aber ich kann nie daran erinnern, wie es zu benutzen ...

Bearbeiten

Wenn Sie nicht zwei Räume zwischen den Einträgen Geist und Sie wollen, dass diese in einem Befehl zu tun, können Sie auch tun:

:%Align ,\zs

Dies ist eine großartige Antwort mit vim Makros: https://stackoverflow.com/a/8363786/59384 - im Grunde genommen, starten Sie eine Makroaufnahme, die erste Spalte zu formatieren, die Aufnahme stoppen und wiederholen Sie den Makro für alle restlichen Zeilen.

Kopieren / aus dieser Antwort eingefügt:

qa0f:w100i <Esc>19|dwjq4@a

Beachten Sie die Leerzeichen nach dem 100i und der bedeutet "drücken escape" - nicht geben "" wörtlich

.

Übersetzung:

qa         -- record macro in hotkey a
0          -- go to beginning of line
f:         -- go to first : symbol
w          -- go to next non-space character after the symbol
100i <Esc> -- insert 100 spaces
19|        -- go to 19th column (value 19 figured out manually)
dw         -- delete spaces until : symbol
j          -- go to next line
q          -- stop recording macro
4@a        -- run the macro 4 times (for the remaining 4 lines)

könnten Sie verwenden die csv.vim Plugin.

:%ArrangeColumn

Dies ist jedoch genau das nicht tun, was Sie gefragt haben. Es wird direkt den Inhalt der Zellen einzustellen, während Sie Ihre Werte haben von dem Komma oder durch die erste Ziffer ausgerichtet

Das Plugin hat viele andere nützliche Befehle für mit CSV-Dateien arbeiten.

Wir haben jetzt auch die fabelhafte EasyAlign Plugin von junegunn geschrieben.

Demonstration GIF aus seiner Readme:

Auch wenn Sie sehr lange Spalten kann es nützlich sein, Standard-Verpackung deaktivieren

:set nowrap
:%!column -t

(Anmerkung in debian Sie auch eine weitere Option für die Spalte -n haben, die, wenn Sie mehrere benachbarte Trennzeichen teilen möchten)

Pretty alte Frage, aber ich habe in Anspruch genommen, mich vor kurzem von einem ausgezeichneten vim Plugin, das Tabellenformatierung entweder im Fluge oder After-the-fact (wie Ihr Anwendungsfall erfordert) ermöglicht:

https://github.com/dhruvasagar/vim-table-mode

Ich schrieb tablign für diesen Zweck. Installieren Sie mit

[sudo -H] pip3 install tablign

Dann markieren Sie einfach die Tabelle in vim und tun

:'<,'>:!tablign

Ich schrieb Python-Skript, mit dem Benutzer auch außerhalb von vim jede Art von Text columize zu Grunde. Nicht sicher, ob dies für Windows oder Mac-Anwender arbeiten.

columnice.py Kern

Verwendung, wenn in vim.

:'<,'>!columnice =

Dies wird das Gleichheitszeichen als Trennzeichen verwenden. Das Trennzeichen ist aber nicht weggeworfen.

Hier ist eine reine Vim-Skript Antwort, kein Plugins, keine Makros:

Es könnte die meist klar sein, mit der Lösung meines Problems ist als Beispiel zu beginnen. Wie wähle ich die Codezeilen I beeinflussen wollte, benutzte dann den folgenden Befehl ein (Rückruf, dass die Eingabe-Befehlsmodus von visuellen Modus prepends automatisch die „<">“, so wirkt es auf den visuellen Bereich):

:'<,'>g``normal / "value<0d>D70|P`

Außer, dass ich eigentlich nicht geben „<0d>“. Sie können durch Drücken von Strg-V, dann ist der Schlüssel, den Sie möchten, geben Sie nicht druckbare Zeichen in der Befehlszeile eingeben. „<0d>“ ist das, was auf der Kommandozeile wiedergegeben wird, nachdem ich ‚ctrl-v geben Sie‘ eingegeben haben. Hier ist es von dem „normalen“ Befehl als Ausgang „/“ Suchmodus analysiert. Der Cursor springt dann auf „Wert“ in der aktuellen Zeile.

Dann haben wir einfach [D] ÉLETE den Rest der Zeile, springe zur Spalte 70 (oder was auch immer Sie in Ihrem Fall müssen) und [P] ut, was wir gerade gelöscht. Das bedeutet wir haben die Breite der breitesten Linie zu bestimmen, bis zu unserer Suche. Wenn Sie diese Informationen nicht in Ihrem Statuszeile gesetzt haben, können Sie die Spalte des Cursors sehen durch den normalen Modus Befehl eingeben ‚g ctrl-g‘. Beachten Sie auch, dass auf eine Säule springen, die nicht existiert die Einstellung ‚virtualedit‘ erfordert!

Ich verließ den Suchbegriff für den: g (lobaler) Befehl leer, da wir einen visuellen Block verwendet und wollten jede Zeile beeinflussen, aber man kann mit einer visuellen Auswahl weglassen (und die „<", ">“ statt) und dort einen Suchbegriff setzen. Oder kombinieren, um eine visuelle Auswahl und einen Suchbegriff, um Dinge zu verengen feiner / leicht.

Hier ist etwas, das ich vor kurzem gelernt: Wenn Sie Chaos auf einem komplexen Befehlsmodus Befehl auf, mit rückgängig machen ‚u‘ (wenn er den Puffer betroffen), und drücken Sie „q“ einen speziellen Befehl Geschichte Puffer einzugeben, die viel wirkt wie ein herkömmlicher Puffer. Bearbeiten Sie jede Zeile und drücken Sie Enter, und der geänderte Befehl wird als ein neuer Befehl eingegeben. Unverzichtbar, wenn Sie Stress haben wollen nicht über alles perfekt zum ersten Mal zu formulieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top