Mam ten zestaw danych w pliku csv
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
Jak widać, liczby są inaczej sformatowane i źle wyrównane. Czy w vimie jest sposób, aby szybko i poprawnie wyrównać kolumny, tak aby wynik był taki?
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
Byłoby wspaniale skopiować i wkleić sekcje za pomocą ctrl-v. Jakieś wskazówki?
:%!column -t -s ','
. Usuwa przecinki, więc nie są już technicznymi plikami CSV. Ale pięknie je układa, czego potrzebowałem.:'<,'>!column -t
column
zgodnie z opisem w poście, 3) następnie zamień ograniczniki z powrotem na spacje. Przykładowa komenda w trybie wizualnym dla kroku 1 to:'<,'>s/"\(\w\+\) \(\w\+\)"/"\1_\2"/g
Czasami chcemy wyrównać tylko dwie kolumny. W takim przypadku nie potrzebujemy żadnych wtyczek i możemy używać czystej funkcjonalności Vima w następujący sposób:
=
.s/=/= ...spaces... /
do tego wizualnej selekcji.dw
i ruchu pionowego.Przykład tej techniki przedstawiony poniżej:
Nie wydaje mi się, że muszę wyrównywać rzeczy wystarczająco często, aby zainstalować kolejną wtyczkę, więc był to mój ulubiony sposób na osiągnięcie tego - zwłaszcza, że nie wymaga to zbytniego myślenia.
źródło
:s/=/ =/
tym lepiej jest użyć,Ctrl + V
aby wybrać odpowiednią kolumnę, a następnie wyrównać ją za pomocą<<
i.
powtórzyć. Znalazłem to tutaj: stackoverflow.com/a/24704379/2152384Jak zasugerował sunny256,
column
polecenie to świetny sposób na zrobienie tego na maszynach Unix / Linux, ale jeśli chcesz to zrobić w czystym Vimie (aby można go było używać również w systemie Windows), najłatwiej jest zainstalować narzędzie Align plugin, a następnie wykonaj:Pierwsza linia wyrównuje wpisy w przecinkach, a druga przenosi przecinek tak, aby był wyrównany z poprzednią wartością. Możesz użyć
AlignCtrl
do zdefiniowania niestandardowego mapowania, które robi wszystko za jednym razem, ale nigdy nie pamiętam, jak go używać ...Edytować
Jeśli nie przeszkadzają Ci dwie spacje między wpisami i chcesz to zrobić jednym poleceniem, możesz również:
źródło
:'<,'>Align &
:%Align! lP0 \s
(l
= wyrównanie do lewej,P0
wypełnienie = 0 po separatorze).To świetna odpowiedź przy użyciu makr vima: https://stackoverflow.com/a/8363786/59384 - w zasadzie zaczynasz nagrywać makro, formatujesz pierwszą kolumnę, zatrzymujesz nagrywanie, a następnie powtarzasz makro dla wszystkich pozostałych wierszy.
Skopiuj / wklej z tej odpowiedzi:
Zwróć uwagę na pojedynczą spację po 100i, a <Esc> oznacza „naciśnij klawisz Escape” - nie wpisuj „<Esc>” dosłownie.
Tłumaczenie:
źródło
Poza tym Tabularize jest całkiem niezłe http://vimcasts.org/episodes/aligning-text-with-tabular-vim/
źródło
Mamy teraz również wspaniałą wtyczkę EasyAlign , napisaną przez junegunn.
Demonstracyjny plik GIF z pliku README:
źródło
Możesz użyć wtyczki csv.vim .
Jednak nie przyniesie to dokładnie tego, o co prosiłeś: odpowiednio dostosuje zawartość komórek, podczas gdy twoje wartości są wyrównane do przecinka dziesiętnego lub do pierwszej cyfry.
Wtyczka zawiera wiele innych przydatnych poleceń do pracy z plikami CSV.
źródło
również jeśli masz bardzo długie kolumny, przydatne może być wyłączenie domyślnego zawijania
(uwaga w debianie masz również dodatkową opcję dla kolumny -n, która, jeśli chcesz podzielić wiele sąsiednich ograniczników)
źródło
Właśnie napisałem tablign w tym celu. Zainstaluj za pomocą
Następnie po prostu zaznacz tabelę w vimie i zrób
źródło
Dość stare pytanie, ale ostatnio skorzystałem z doskonałej wtyczki vim, która umożliwia formatowanie tabel w locie lub po fakcie (zgodnie z Twoim przypadkiem użycia):
https://github.com/dhruvasagar/vim-table-mode
źródło
Oto czysta odpowiedź skryptu Vima, bez wtyczek, bez makr:
Najlepiej byłoby zacząć od rozwiązania mojego problemu jako przykładu. Wybrałem linie kodu, na które chciałem wpłynąć, a następnie użyłem następującego polecenia (przypomnij sobie, że wejście w tryb poleceń z trybu wizualnego automatycznie poprzedza „'<,'>”, więc działa na zakres wizualny):
Z wyjątkiem tego, że faktycznie NIE wpisałem „<0d>”. Znaki niedrukowalne można wprowadzić w wierszu poleceń, naciskając ctrl-v, a następnie klawisz, który chcesz wpisać. „<0d>” jest tym, co jest renderowane w wierszu poleceń po wpisaniu „ctrl-v enter”. Tutaj jest analizowany przez „normalne” polecenie jako wyjście z trybu wyszukiwania „/”. Następnie kursor przeskakuje do „wartości” w bieżącym wierszu.
Następnie po prostu [D] usuwamy resztę wiersza, przeskakujemy do kolumny 70 (lub czegokolwiek potrzebujesz w twoim przypadku) i [P] utnij to, co właśnie usunęliśmy. Oznacza to, że musimy określić szerokość najszerszej linii, aż do naszego wyszukiwania. Jeśli nie umieściłeś tych informacji w linii statusu, możesz zobaczyć kolumnę kursora, wprowadzając polecenie trybu normalnego „g ctrl-g”. Zwróć także uwagę, że przejście do kolumny, która nie istnieje, wymaga ustawienia „virtualedit”!
Zostawiłem wyszukiwany termin dla polecenia: g (lobal) pusty, ponieważ użyliśmy bloku wizualnego i chcieliśmy wpłynąć na każdą linię, ale możesz zakończyć, używając zaznaczenia wizualnego (i „'<,'>”) i wstawić zamiast tego wyszukiwane hasło. Lub połącz selekcję wizualną i wyszukiwane hasło, aby precyzyjniej / łatwiej zawęzić zakres.
Oto coś, czego ostatnio się nauczyłem: jeśli pomylisz się przy złożonym poleceniu trybu poleceń, cofnij za pomocą „u” (jeśli wpłynęło to na bufor), a następnie naciśnij „q:”, aby wprowadzić specjalny bufor historii poleceń, który działa podobnie jak konwencjonalny bufor . Edytuj dowolny wiersz i naciśnij klawisz Enter, a zmienione polecenie zostanie wprowadzone jako nowe polecenie. Niezastąpiony, jeśli nie chcesz się stresować, że za pierwszym razem wszystko idealnie ułożysz.
źródło
Napisałem skrypt w Pythonie, który pozwala użytkownikom na kolumizację dowolnego typu tekstu również poza vimem. Nie jestem pewien, czy to zadziała dla użytkowników systemu Windows lub Mac.
columnice.py sedno
Użycie w vimie.
Spowoduje to użycie znaku równości jako separatora. Ogranicznik nie jest jednak odrzucany.
źródło
Mam to w moim .vimrc.
Spowoduje to wyrównanie kolumn, zachowując przecinek, który może być później potrzebny do poprawnego czytania. Na przykład, dzięki Python Pandas
read_csv(..., skipinitialspace=True)
, dziękuję chłopakom z Pandy za tę inteligentną opcję, w przeciwnym razie w vimie%s/,\s\+/,/g
. Może być łatwiej, jeśli maszcolumn
opcję --output-separator. Myślę, że moja nie działa i nie jestem pewien dlaczego (moja strona podręcznika dla kolumny mówi 2004, na ubuntu 18.04, nie jestem pewien, czy ubuntu otrzyma nową wersję) . W każdym razie to działa dla mnie i skomentuj, jeśli masz jakieś sugestie.źródło