
Tenho alguns dados delimitados por espaço que estã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
Gostaria de separar a terceira coluna do restante dos dados. Eu sei que é possível usar uma macro para fazer isso. Um exemplo prático é:
mbWWDGo<Esc>p'bj
No entanto, eu queria saber se existe uma maneira integrada de recortar e colar isso como uma única unidade lógica. A seleção em bloco não funciona porque as linhas não são regulares. Transformar espaços em abas parece uma boa ideia, mas também tenho algumas linhas extremamente curtas como:
0 1 0.012098302364638
Portanto, isso não funcionará necessariamente (a menos que eu defina meu tabstop para algo maluco).
Alguma ideia ou uma macro é o melhor que posso fazer?
Responder1
Existem muitas maneiras alternativas, mas em termos de esforço de digitação, nada 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 compreensão.
- Remova temporariamente as outras colunas, puxe:
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, oPlug-in csv.vimtem um :CSVColumn
comando.