Preocupaciones de diseño de columna Vim 80

Siento que la indicación de 80 columnas en Vim es incorrecta: set columns=80 . A veces también set textwidth pero me gusta poder ver y anticipar el desbordamiento de línea con las set columns del set columns alternativo.

Esto tiene algunos efectos secundarios desafortunados: no puedo set number por temor a dividir entre archivos que tienen diferentes órdenes de números de línea; es decir, = 100 archivos de línea requerirán dos valores diferentes de set columns debido a la columna adicional utilizada para la visualización de dígitos adicionales. También comienzo nuevas (g) sesiones de Vim en lugar de dividir ventanas verticalmente, lo que me obliga a utilizar el portapapeles del administrador de ventanas – me obligan a set columns cada vez que abro o cierro un panel, por lo que iniciar una sesión nueva es menor molestia.

¿Cómo maneja la indicación de 80 caracteres cuando quiere set numbers , dividir verticalmente, etc.?

Tengo esto configurado en mi .vimrc:

 highlight OverLength ctermbg=red ctermfg=white guibg=#592929 match OverLength /\%81v.\+/ 

Esto resalta el fondo en un rojo sutil para el texto que sobrepasa el límite de 80 columnas (sutil en modo GUI, de todos modos, en modo terminal es menor).

A partir de vim 7.3, puede usar set colorcolumn=80 ( set cc=80 para abreviar).

Como las versiones anteriores no son compatibles, mi .vimrc usa en su lugar:

 if exists('+colorcolumn') set colorcolumn=80 else au BufWinEnter * let w:m2=matchadd('ErrorMsg', '\%>80v.\+', -1) endif 

Consulte también la documentación en línea en la opción colorcolumn .

Forma más corta:

 match ErrorMsg '\%>80v.\+' 

Yo prefiero:

 highlight ColorColumn ctermbg=gray set colorcolumn=80 

La respuesta de Simon Howard es genial. Pero /\%81v.\+/ no resalta las tabs que exceden la columna 81. Así que hice un pequeño ajuste, basado en las cosas que encontré en el wiki de VIM y en la elección de colores de HS anterior:

 highlight OverLength ctermbg=darkred ctermfg=white guibg=#FFD9D9 match OverLength /\%>80v.\+/ 

Y ahora VIM resaltará cualquier cosa que exceda la columna 80. ¡Salud!

enter image description here

Enfoque minimalista y no excesivo. Solo se resalta el carácter 79 de líneas demasiado largas. Resuelve algunos problemas comunes: los trabajos en ventanas nuevas, las palabras desbordadas se resaltan correctamente.

 augroup collumnLimit autocmd! autocmd BufEnter,WinEnter,FileType scala,java \ highlight CollumnLimit ctermbg=DarkGrey guibg=DarkGrey let collumnLimit = 79 " feel free to customize let pattern = \ '\%< ' . (collumnLimit+1) . 'v.\%>' . collumnLimit . 'v' autocmd BufEnter,WinEnter,FileType scala,java \ let w:m1=matchadd('CollumnLimit', pattern, -1) augroup END 

Nota: FileType scala,java cuenta que FileType scala,java esto lo limita a los archivos fuente de Scala y Java. Probablemente quieras personalizar esto. Si lo omitiera, funcionaría en todos los tipos de archivos.

Una buena forma de marcar solo el primer personaje que sale de los límites especificados:

 highlight ColorColumn ctermbg=magenta "set to whatever you like call matchadd('ColorColumn', '\%81v', 100) "set column nr 

De la charla de Damian Conway.

También puedes dibujar una línea para ver el límite 80:

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

Resultado:

enter image description here

Las versiones más nuevas de vim permiten un :set numberwidth=x valor, que establece el ancho de la visualización del número de línea. Realmente no uso plegable, etc., así que no sabría nada de eso. Sin embargo, dibujar una delgada línea vertical está más allá de las capacidades de una aplicación de consola. GVim puede permitir esto (no lo uso, así que no puedo comentar allí).

Puedes intentar esto:

 au BufWinEnter * if &textwidth > 8 \ | let w:m1=matchadd('MatchParen', printf('\%%< %dv.\%%>%dv', &textwidth+1, &textwidth-8), -1) \ | let w:m2=matchadd('ErrorMsg', printf('\%%>%dv.\+', &textwidth), -1) \ | endif 

Esto configurará dos aspectos destacados en cada búfer, uno para los caracteres en las 8 columnas antes de lo que esté configurado para su &textwidth y otro para los caracteres que &textwidth más allá de esa columna. De esa forma tienes un poco de anticipación. Por supuesto, puede modificarlo para usar un ancho diferente si desea más o menos anticipación (que paga en forma de pérdida de resaltado de syntax en esas columnas).

Me temo que has puesto restricciones al conjunto de soluciones que, bueno, te dejan con el conjunto nulo.

Usar :set textwidth=80 solucionará todos los problemas que mencionas, excepto que no podrás ver fácilmente el límite de la línea. Si usted :set ruler , habilitará la visualización de la posición x, y en la barra de estado, que puede usar para ver en qué columna se encuentra.

Aparte de eso, no estoy seguro de qué decirte. Es una pena perder la columna numérica, doblar la columna y dividir solo porque tienes que :set columns=80 .

Bueno, mirando las columnas de ayuda, en realidad no se trata de complicarlo.

En la consola, generalmente se determina mediante la configuración de la consola (es decir, se detecta automáticamente); en GUI, determina (y está determinado por) el ancho de las ventanas de gvim.

Así que normalmente solo dejas que las consolas y los gerentes de ventanas hagan su trabajo comentando las set columns

No estoy seguro de lo que quiere decir con “ver y anticipar desbordamiento de línea”. Si desea que EOL se inserte aproximadamente en la columna 80, use set textwidth o set wrapmargin ; si solo quieres envoltura suave (es decir, la línea está envuelta, pero no hay EOL real), entonces juega con set linebreak y set showbreak .

este está fuera del campo izquierdo, pero es un pequeño y agradable mapa para cambiar el tamaño de su división actual a 80 caracteres si tiene los números de línea:

 " make window 80 + some for numbers wide noremap w :let @w=float2nr(log10(line("$")))+82\|:vertical resize w 

Puede intentar esto para establecer el tamaño de la ventana para permitir 80 caracteres de texto real. Esto todavía no funciona con divisiones verticales.

let &co=80 + &foldcolumn + (&number || &relativenumber ? &numberwidth : 0)

Esto requiere vim 7+, 7.3 para el número relativo.