vim corta coluna lógica de dados estruturados

0

Eu tenho alguns dados delimitados por espaço que são estruturados em colunas lógicas.

Por exemplo:

-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

Eu gostaria de separar a terceira coluna do restante dos dados. Eu sei que é possível usar uma macro para fazer isso. Um exemplo de trabalho é:

mbWWDGo<Esc>p'bj

No entanto, eu queria saber se há uma maneira integrada de recortar e colar isso como uma única unidade lógica. Seleção de blockwise não fará porque as linhas não são regulares. Alterar espaços para guias parece ser uma boa ideia, mas também tenho algumas linhas extremamente curtas como:

0 1 0.012098302364638

Para que isso não funcione necessariamente (a menos que eu configure o meu tabstop para algo maluco).

Alguma idéia, ou é uma macro, o melhor que posso fazer?

    
por OmnipotentEntity 10.03.2018 / 19:34

1 resposta

1

Existem muitas maneiras alternativas, mas em termos de esforço de digitação, nada vai superar sua macro. No entanto, se você precisar disso com frequência, poderá criar um mapeamento ou comando personalizado (que pode ser recuperado muito rapidamente) e se beneficiará de uma implementação diferente em termos de robustez e inteligibilidade.

  • Remova temporariamente as outras colunas, yank: mb:%substitute/.*\s// | %yank | undo | 'bput
  • Filtre o buffer como uma string: :put =map(getline(1, '$'), 'substitute(v:val, ".*\s", "", "")')

Se você estiver disposto a considerar plug-ins, o plug-in csv.vim tem :CSVColumn command.

    
por 12.03.2018 / 10:51

Tags