vim wyciął kolumnę logiczną z danych strukturalnych

0

Mam dane rozdzielane spacjami, które są uporządkowane w logiczne kolumny.

Na przykład:

-71.12 0.150667281077312 0.002211111620961
-71.12 0.118496551977185 0.001861996157838
-71.12 0.060235544965347 0.002297217048708
-71.12 0.153327288481261 0.006010183052808
-71.12 0.124123948663225 0.002061072004207
-71.12 0.207259139445973 0.006717235817697
-60.96 0.157543582366536 0.002296431543423
-60.96 0.235150926363369 0.003101414303501
-60.96 0.259568965388604 0.00509310173342
-60.96 0.249144803559256 0.005918713226128
-60.96 0.293059928383778 0.004162901523096
-60.96 0.450566914005046 0.007136854816405
-50.8 0.750617196149124 0.009051035617119
-50.8 0.353984107758976 0.004572175646195
-50.8 0.528151230868303 0.007799510359974
-50.8 0.183651354357074 0.005641329790889
-50.8 0.41466714360944 0.005488604915895
-50.8 0.59927731014109 0.008919537503349
-40.64 0.535018719259586 0.006512021643672
-40.64 0.796646452506777 0.011224718752927
-40.64 0.484977557781429 0.006918056698062
-40.64 0.823404773156849 0.011420881130741
-40.64 0.723696626287657 0.008809901349382

Chciałbym oddzielić trzecią kolumnę od reszty danych. Wiem, że można to zrobić za pomocą makra. Działającym przykładem jest:

mbWWDGo<Esc>p'bj

Chciałem jednak wiedzieć, czy istnieje wbudowany sposób wycinania i wklejania tego jako pojedynczej jednostki logicznej. Wybór blokowy nie będzie możliwy, ponieważ linie nie są regularne. Zmiana spacji na tabulacje wydaje się dobrym pomysłem, ale mam też kilka bardzo krótkich linii, takich jak:

0 1 0.012098302364638

Więc to niekoniecznie zadziała (chyba że ustawię tabstop na coś szalonego).

Masz jakieś pomysły, czy to makro jest najlepsze, co mogę zrobić?

OmnipotentEntity
źródło

Odpowiedzi:

1

Istnieje wiele alternatywnych sposobów, ale jeśli chodzi o pisanie, nic nie przebije Twojego makra. Jeśli jednak potrzebujesz tego często, możesz utworzyć niestandardowe mapowanie lub polecenie (które można bardzo szybko przywołać), a skorzystasz z innej implementacji pod względem niezawodności i zrozumiałości.

  • Tymczasowo usuń pozostałe kolumny, szarpnij: mb:%substitute/.*\s// | %yank | undo | 'bput
  • Filtruj bufor jako ciąg: :put =map(getline(1, '$'), 'substitute(v:val, ".*\\s", "", "")')

Jeśli chcesz rozważyć wtyczki, wtyczka csv.vim ma :CSVColumnpolecenie.

Ingo Karkat
źródło