2011-06-30 6 views
6

¿Cómo puedo alinear a la derecha (y alinear a la izquierda?) Un bloque de números o texto en vim como esto:¿Cómo puedo alinear columnas donde el número más grande o la cadena más grande es el indicador de alineación?

de:

45 209 25  1 
2  4  2  3 
34  5 300  5 
34 120 34 12 

a esto:

45 209 25 1 
2  4  2 3 
34  5 300 5 
34 120 34 12 

Eso significa que el el número más grande o la cadena más grande en cada columna no se mueve.
En la primera columna es 45 + 34, en la segunda columna 209 + 120, en la tercera columna 300 y en la última columna 12.

+0

¿Usó espacios para obtener la entrada? Cuando uso pestañas para ingresar columnas de números, se alinean naturalmente a la izquierda. – NorthGuard

+0

@inTide, yes espacios (no uso pestañas en mis buffers) – Reman

Respuesta

2

Con los complementos Align y AlignMaps: seleccione usando V, luego \ anum (AlignMaps viene con Alinear). Una de las ventajas de \ anum es que también maneja puntos decimales (comas) y notación científica.

+0

Su plugin es genial. Puede hacer muchas cosas pero es menos fácil de entender que Tabular. Otra desventaja que he encontrado es que no puedes poner los mapas en la línea de comando p.e. usándolos en menu.vim o vimrc. Y .... el complemento utiliza una gran cantidad de mapas que comienzan con diferentes letras. Desearía que fueran un poco más fáciles de recordar (o cambiar por el usuario). No me gusta el menú de DrChip tampoco. (Peor aún ... ya probé el \ anum antes, lo único que no sabía que tenía que seleccionar en línea). – Reman

3

Usted puede mirar en el Tabularize plugin. Así que si usted tiene algo así como

45 209 25 1 
2 4 2 3 
34 5 300 5 
34 120 34 12 

acaba de seleccionar aquellas líneas en el modo visual y escriba :Tab/ y va a dar formato como

45 209 25 1 
2 4  2  3 
34 5  300 5 
34 120 34 12 

Además, parece que usted no tiene un número igual de espacios que separan los números en este momento. Así que antes de utilizar el plugin, vuelva a colocar todos los espacios múltiples con un solo espacio con the following regex:

%s![^ ]\zs \+! !g 
+0

Consulte mi pregunta. (Por cierto ... Tengo tanto el complemento de alineación como el de tabularización, pero no puedo encontrar la manera de resolver mi pregunta). – Reman

5

Tener un vistazo a la align plugin, se puede hacer esto y mucho más. ¡Gran herramienta en su cinturón de herramientas!

encontrado here

Después de algún vimhelp/lectura seria encontré la correcta asignación AlignCtrl ... seleccionar visualmente la mesa, por ejemplo, mediante el uso de ggVG, y luego hacer un \Tsp es decir <leader>Tsp

Entonces me sale esto:

45 209 25 1 
    2  4  2 3 
34  5 300 5 
34 120 34 12 

De vimhelp:

\Tsp : use Align to make a table separated by blanks |alignmap-Tsp| 
     (right justified) 
+0

El complemento 'align' es bueno, pero el complemento 'Tabularize' (mencionado por yoda) es muy superior. – Jeet

3

Con la Align plugin puede seleccionar las filas que desea alinear y golpeado :

<Leader>Tsp

De Align.txt

\Tsp : use Align to make a table separated by blanks |alignmap-Tsp| 
      (right justified) 

(La ayuda mención \ porque es el líder defecto, pero en caso de que lo haya cambiado a otra cosa que debe adaptarse en consecuencia)

Sólo intentando instalar en mi, me obtuvo el siguiente resultado:

45 209 25 1 
2  4  2 3 
34  5 300 5 
34 120 34 12 

En mi opinión plugin de Align es genial, pero el "alinear mapas" y varios comandos no son realmente fáciles de recordar.

+0

Sí, estoy de acuerdo. DrChip (¿por qué se llama a sí mismo Dr.chip?;)) Crea cosas buenas, pero la mayoría de las cosas son difíciles de encontrar, de comprender y no siempre pueden usarse como puede ser. – Reman

2

Creo que lo mejor que puede hacer es comer primero todos los espacios múltiples con

:{range}s/ \+/ /g 

y luego llamar en forma de tabla

:Tab//r1 

O cambiar eso r a l.

Cuestiones relacionadas