seleccionar linea insertar inicio editar compilar busquedas vim reformat

inicio - vim insertar linea



reformatear en vim para un buen diseƱo de columnas (11)

A veces queremos alinear solo dos columnas. En ese caso, no necesitamos ningún complemento y podemos usar la funcionalidad Vim pura como esta:

  1. Elige un separador En la publicación de OP, esta es una coma, en mi ejemplo, esto es = .
  2. Agregue espacios antes / después de esto. Uso s/=/= ...spaces... / en la selección visual para esto.
  3. Ubique a la palabra más larga y coloque el cursor después de ella.
  4. Elimine todos los espacios en blanco adicionales usando dw y movimiento vertical.

Ejemplo de esta técnica demostrada a continuación:

No me parece necesario alinear las cosas con la frecuencia suficiente para instalar otro complemento, por lo que esta fue mi forma preferida de lograrlo, especialmente que no requiere mucha reflexión.

Tengo este conjunto de datos en un archivo 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

Como puede ver, los números están formateados de forma diferente y desalineados. ¿Hay alguna manera en vim de alinear rápidamente las columnas correctamente para que el resultado sea este?

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

Sería genial copiar y pegar secciones con ctrl-v. ¿Algún consejo?


Acabo de escribir tablify para este propósito. Instalar con

[sudo -H] pip3 install tablify

Entonces simplemente marque la tabla en vim y haga

:''<,''>:!tablify



Ahora también tenemos el fabuloso plugin EasyAlign , escrito por junegunn.

GIF de demostración de su archivo README:


Como lo sugirió sunny256, el comando de column es una excelente manera de hacerlo en máquinas Unix / Linux, pero si quiere hacerlo en Vim puro (para que también se pueda usar en Windows), la manera más fácil es instalar el Align complemento y luego hazlo:

:%Align , :%s//(/s/+/),/s/,/1/g

La primera línea alinea las entradas en las comas y la segunda mueve la coma para que esté a nivel con el valor anterior. Puede usar AlignCtrl para definir un mapeo personalizado que haga todo el lote de una vez, pero nunca recuerdo cómo usarlo ...

Editar

Si no te molestan dos espacios entre las entradas y quieres hacer esto en un comando, también puedes hacer:

:%Align ,/zs


Es una pregunta bastante antigua, pero recientemente me he valido de un excelente complemento vim que permite el formateo de tablas ya sea sobre la marcha o después de los hechos (como requiere su caso de uso):

https://github.com/dhruvasagar/vim-table-mode


Escribí una secuencia de comandos de python que permite a los usuarios copiar de forma básica cualquier tipo de texto que esté fuera de vim. No estoy seguro si esto funcionará para usuarios de Windows o Mac.

columnice.py gist

Uso cuando está en vim.

:''<,''>!columnice =

Esto usará el signo igual como el delímetro. Sin embargo, el delímetro no se descarta.


Esta es una excelente respuesta al usar macros vim: https://.com/a/8363786/59384 : básicamente, comienza a grabar una macro, formatea la primera columna, detiene la grabación y luego repite la macro para todas las líneas restantes.

Copiar / pegar desde esa respuesta:

qa0f:w100i <Esc>19|dwjq4@a

Tenga en cuenta el espacio individual después del 100i, y los medios "presionar escape" - no escriba "" literalmente.

Traducción:

qa -- record macro in hotkey a 0 -- go to beginning of line f: -- go to first : symbol w -- go to next non-space character after the symbol 100i <Esc> -- insert 100 spaces 19| -- go to 19th column (value 19 figured out manually) dw -- delete spaces until : symbol j -- go to next line q -- stop recording macro 4@a -- run the macro 4 times (for the remaining 4 lines)


Puede usar el complemento csv.vim .

:%ArrangeColumn

Sin embargo, esto no hará exactamente lo que usted solicitó: ajustará correctamente el contenido de las celdas, mientras que sus valores estarán alineados por el punto decimal o por el primer dígito.

El complemento tiene muchos otros comandos útiles para trabajar con archivos CSV.


Si está en algún tipo de UNIX (Linux, etc.), puede hacer trampa y filtrarlo a través del comando de columna (1):

:%!column -t


también si tiene columnas muy largas, puede ser útil para desactivar el ajuste predeterminado

:set nowrap :%!column -t

(tenga en cuenta que en Debian también tiene una opción adicional para la columna -n que si desea dividir múltiples delimitadores adyacentes)