Alinear comentarios a la derecha en vim

Alinear comentarios a la derecha en vim

Estoy escribiendo código C usando vim y estoy buscando una posibilidad de alinear a la derecha mis comentarios para que todos terminen en la columna 80. Para dar un breve ejemplo:

int a = 80; /* initialize a */
int b = 7; /* initialize b */
printf("%d + %d = %d", a, b, a+b); /*calculate the result */

debería convertirse en

int a = 80;                               /* initialize a */
int b = 7;                                /* initialize b */
printf("%d + %d = %d", a, b, a+b); /*calculate the result */
                                                           ^col 80

Lo instalé vim-easy-alignpara realizar otros formateos pero aún no descubrí cómo realizar esta alineación. ¿Quizás alguien sepa cómo?

No insisto vim-easy-align. Si tienes otro complemento que haga el trabajo... Solo dímelo;).

Respuesta1

A continuación se explica cómo hacerlo con comandos vim simples, sin utilizar complementos:

En modo normal, coloque el cursor en el primer carácter de la cadena que desea alinear a la derecha, como el delimitador de comentarios, y luego presione leaderluego tabpara alinear el texto a la derecha.

nnoremap <leader><tab> mc80A <esc>080lDgelD`cP

Con explicaciones:

mc80A <esc>080lDgelD`cP
| |        |   ||  ||
mc|        |   ||  ||    Mark the position of the cursor
  |        |   ||  ||
  80A <esc>|   ||  ||    Append 80 spaces at the end
           |   ||  ||
           080l||  ||    Go the the 80th column from the beginning of the line
               ||  ||
               D|  ||    Delete what is next
                |  ||
                gel||    goes after the last string char
                   ||
                   D|    Delete the characters remaining (complement to go 80)
                    |
                    `cP  and paste these to shift the string up to 80 column.

Para marcar varios comentarios, puede buscar la siguiente aparición de un delimitador de comentarios y presionar leadertabnleadertabnleadertabn...

Respuesta2

MiComplemento AlignFromCursorproporciona un <Leader>rimapeo y :RightAlignFromCursorun comando que hacen eso. Simplemente coloque el cursor en el espacio en blanco antes del comentario (ya sea manualmente o mediante un :[range]normalcomando) e invoque la asignación o el comando. Utiliza 'textwidth'o un prefijo [count].

información relacionada