
Tengo algunos datos delimitados por espacios que están estructurados en columnas lógicas.
Por ejemplo:
-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
Me gustaría separar la tercera columna del resto de los datos. Sé que es posible utilizar una macro para hacer esto. Un ejemplo práctico es:
mbWWDGo<Esc>p'bj
Sin embargo, quería saber si existe una forma integrada de cortar y pegar esto como una única unidad lógica. La selección en bloques no funcionará porque las líneas no son regulares. Cambiar espacios en pestañas parece una buena idea, pero también tengo algunas líneas extremadamente cortas como:
0 1 0.012098302364638
Así que eso no necesariamente funcionará (a menos que establezca mi tabulación en algo loco).
¿Alguna idea o es una macro lo mejor que puedo hacer?
Respuesta1
Hay muchas formas alternativas, pero en términos de esfuerzo de escritura, nada superará a su macro. Sin embargo, si necesita esto con frecuencia, puede crear un mapeo o comando personalizado (que se puede recuperar muy rápidamente) y se beneficiará de una implementación diferente en términos de solidez y comprensibilidad.
- Elimine temporalmente las otras columnas, tire:
mb:%substitute/.*\s// | %yank | undo | 'bput
- Filtrar el búfer como una cadena:
:put =map(getline(1, '$'), 'substitute(v:val, ".*\\s", "", "")')
Si está dispuesto a considerar complementos, elcomplemento csv.vimtiene un :CSVColumn
mando.