¿Cómo puedo configurar una regla en una columna específica?

50

Al codificar en diferentes idiomas, tiendo a necesitar restringir mis líneas a una longitud específica (generalmente 79 u 80 caracteres).

He visto esto hecho en otros editores mediante el uso de una regla (línea continua que se muestra en la columna) o cambiando el color del texto para indicar que se ha terminado.

¿Cómo puedo hacer que Vim me indique cuando me acerco o voy sobre 79 caracteres en una sola línea?

Kevin Brown
fuente

Respuestas:

64

Puede mostrar una regla en una línea específica utilizando la opción :set colorcolumn( :set ccpara abreviar) que solo está disponible en Vim 7.3 o posterior.

set colorcolumn=80

Esto establecerá el color de fondo de esa columna en rojo, dándole una regla visual para trabajar.

Imagen de la columna de color predeterminada establecida en 80

Si desea utilizar un color diferente al rojo (que realmente se destaca), puede cambiar el color configurando highlightpara ColorColumn.

highlight ColorColumn ctermbg=0 guibg=lightgrey

Color personalizado para la columna.

Puede establecer el color para las versiones de terminal de Vim usando el ctermargumento y las versiones GUI de Vim usando el guibgargumento. El 0es el valor del código de escape ASCII para negro, que es gris cuando está iluminado (que es, por defecto). El valor lightgreyse usa para las versiones GUI de Vim, como gVim, para cambiar el color de fondo a gris claro.

Kevin Brown
fuente
10
¡Incluso puede tener múltiples columnas de colores separadas por comas!
200_success
44
Combine eso con join & range, y puede tener un montón de columnas coloreadas con muy poco código. Mi .vimrc tiene:execute "set colorcolumn=" . join(range(81,335), ',')
Cody Poll
19

Como anexo a la respuesta de Kevin, puede tener varias columnas de color. Cuando codifico, a veces tengo un límite "suave" en 80 columnas y un límite "duro" en 120 columnas. Entonces quiero una línea a 80, y luego cada columna después de 120 para colorear.

Hago esto con

let &colorcolumn="80,".join(range(120,999),",")

Por supuesto, esto se puede modificar fácilmente a otras preferencias.

davidlowryduda
fuente
14

Vim 7.3 trae la colorcolumnopción, como se detalla muy bien en otras respuestas.

Sin embargo, si no tiene la versión 7.3 por alguna razón, aún puede obtener una indicación visual de que está excediendo un recuento de columnas en particular utilizando la matchfuncionalidad de vim (consulte los :help matchdetalles).

Esencialmente, los comandos de coincidencia le permiten crear resaltados persistentes para texto que coincida con una expresión regular dada. :match ColorColumn "\%80v."resaltará el texto en la columna 80 con el grupo "ColorColumn". Por supuesto, puede sustituir cualquier grupo resaltado y cualquier valor de columna. Si desea una fuerte indicación visual, la expresión "\%>79v.\+"resaltará la columna 80 y más allá.

( \%80vsignifica "coincidencia en la columna virtual 80" y \%>79vsignifica "coincidencia después de la columna virtual 79; ver :help /\%cmás).

Sin embargo, este enfoque solo se resaltará cuando haya caracteres reales presentes en las columnas especificadas, lo que lo hace visualmente menos consistente que colorcolumn.


fuente
44
Personalmente, creo que el enfoque menos consistente de matches mejor, ya que resalta solo aquellas líneas en las que estoy excediendo el límite de 80 columnas, en lugar de mostrar una (intrigante) gran línea roja a la derecha de la pantalla. Por lo tanto, en mi vimrc para Python utilizo call matchadd('ColorColumn', '\(\%80v\|\%100v\)')(80 y 100 son las longitudes sugeridas en PEP 8)
jalanb