Mostrando un color de fondo diferente en Vim más de 80 caracteres

134

He visto preocupaciones sobre el diseño de la columna Vim 80 , pero la respuesta allí solo resalta el contenido real que supera la marca de 80 caracteres. Quiero tener una ventana de Vim de más de 100 columnas abierta con las 80 columnas más a la izquierda usando el fondo normal y cualquier cosa anterior que use un fondo ligeramente diferente. El fondo de la ventana de Vim debe ser de un color diferente, no solo texto que supera el punto de 80 caracteres. Esto indicaría qué tan cerca me estoy acercando al punto de 80 char sin tener que repasarlo primero.

No creo que esto sea posible actualmente, pero pensé en preguntar por si acaso.

¿Tal vez podría hacerse con un complemento?

Ejemplo de TextMate del resaltado deseado del margen derecho de Vim

Al seleccionar "Resaltar el margen derecho" en las preferencias generales de TextMate, puede ver un ejemplo del comportamiento de Vim deseado.

Ejemplo resaltado del margen derecho de TextMate

Doug
fuente

Respuestas:

223

Si tiene Vim> = v7.3, simplemente puede agregar esto a su .vimrcpara resaltar 81 y más (entonces 80 es su última columna válida):

let &colorcolumn=join(range(81,999),",")

Si no ve un resaltado, es posible que no tenga un ColorColumnconjunto de colores de resaltado. Agregue esto (ajústelo según sus preferencias):

highlight ColorColumn ctermbg=235 guibg=#2c2d27

Ahora me gusta resaltar la columna 80, así como la 120 en adelante, por lo que tengo marcadores de "advertencia" y "peligro" separados. Puedes hacerlo así:

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

Ejemplo

Aquí hay una captura de pantalla de GVim editando mi .vimrc.

GVim editando mi .vimrc

Yo uso la fuente Ubuntu Mono 11 y el esquema de color molokai . Puede encontrar mi configuración de vim y todos mis archivos de puntos en GitHub.

Justin Force
fuente
3
colorcolumn está limitado a 256 definiciones, por :help colorcolumn... además, mi configuración parece estar truncada en cierta medida cuando uso su técnica de combinación, aunque no se me puede dar la razón para buscar a través de la fuente de vim para averiguar cuál es esa longitud. Además, vim analiza el valor de esta configuración como una cadena cada vez que entra en una ventana, inicializa un búfer, etc., por lo que esta es una forma costosa de lograr el resultado deseado.
cptstubing06
15
Tus dotfiles están CALIENTES.
obfk
1
Gracias por publicar esto, ¡era exactamente lo que estaba buscando! Solo una pregunta más, ¿hay alguna manera de no establecer estas reglas en un tipo específico de archivo (.md)?
David Dias
1
@DavidDias ¡Seguro! Puedes hacer algo como autocmd FileType markdown let &colorcolumn=""desarmarlo por completo.
Justin Force
1
enlace actualizado a la configuración de vim
reergymerej
78

Destacar 81 columnas

:set textwidth=80
:set colorcolumn=+1

También puedes hacer algunos estilos:

:hi ColorColumn guibg=#2d2d2d ctermbg=246
Andrés
fuente
2
Esto, y también es posible que resalte hasta 256 columnas, pero desafortunadamente se necesita una lista de columnas para resaltar y no hay taquigrafía para ello, por lo que tendría que hacer algo así como :set colorcolumn=+1,+2,+3,+4,+5,+6etcétera, posiblemente hasta el final por tan +256amplio crees que te gustaría tu margen derecho. Sin embargo, esto solo resaltará las líneas que existen en el búfer, no todas las líneas de la ventana.
mkomitee
1
@ Tangente disléxica: ¿por qué no resaltar las primeras 80 columnas?
Brice
1
No había pensado en eso. Establezca su fondo en el color que desea usar para resaltar> 80 columnas, y configure la columna de color para todas las columnas de 1-80, y configure el grupo de resaltado para la columna de color para que sea el color que desea que sea su fondo normal.
mkomitee
2
Una pregunta, aunque puedo configurar el color correctamente escribiendo :hi colorcolumn ..., no parece funcionar cuando lo pongo en mi .vimrc. ¿Sabes cómo hacer eso?
robbrit
Veo el mismo problema que robbrit: si ejecuto el comando resaltado en modo ex, se ve bien, pero si lo tengo en mi archivo vimrc, destruye mi esquema de colores ...
Bennidhamma
16

Solución propuesta en el comentario anterior. Primero resalte su fondo y luego resalte el ColorColumn negro como una superposición. Establezca su columna de color en las líneas 1-80.

hi Normal guibg=#32322f ctermbg=236
hi NonText guibg=#32322f ctermbg=236
hi ColorColumn guibg=#000000 ctermbg=0
let &colorcolumn=join(range(1,80),",")
Conner
fuente
1
Esto es simple pero brillante. ¡Gracias!
ataque aéreo
8

tratar:

:/\%>80v./+

marcará +80 caracteres como error

GoTTimw
fuente
Tan inteligente en caso de apuro. Me gusta porque se adapta a los cambios de tema. Gracias.
Benjamin
0

No creo que sea posible tener lo que quieres, pero sigo esta pregunta ya que estoy interesado en eso.

Tal vez, estoy afirmando lo obvio, pero podría configurar el punto más alto en las columnas 70 o más para obtener una indicación de qué tan cerca se encuentra de la columna 80.

René Nyffenegger
fuente
0

Para aquellos que usan onedark.vim como yo que quieren una solución publicada por Conner, agregué estas líneas a mi archivo vimrc

let &colorcolumn=join(range(1,80),",")
let g:onedark_color_overrides = {
  \ "black": {"gui": "#2C323C", "cterm": "236", "cterm16": "8"},
  \ "cursor_grey": {"gui": "#282C34", "cterm": "235", "cterm16": "0"}
  \ }

Simplemente cambié los dos valores, lo tomé del código fuente de onedark

Yujinyuz
fuente