Haga que Vim muestre una línea en el borde del ancho de texto establecido


26

La mayoría de los editores de texto e IDE que uso en estos días tienen una función en la que pueden mostrar una línea con una cierta longitud de caracteres en el búfer de texto. Es útil cuando desea mantener líneas en un archivo con una longitud determinada.

¿Hay alguna forma de hacer que Vim haga esto, preferiblemente usando el textwidthvalor ya definido ? Las líneas se ajustarán automáticamente en ese punto, pero realmente me gustaría poder ver dónde está también.

En caso de que sea importante, estoy usando principalmente gVim en Windows, pero me encantaría si la solución funciona en las versiones de Vim.

Respuestas:


41

para (g) vim, use lo siguiente:

set colorcolumn=80

o cualquier ancho que desees. Funciona tanto en vim como en gvim. Tengo el mío dentro de un IF, por lo que es condicional según el tipo de archivos que edito.

También puede usar un + x / -x para basar la posición de la columna +/- desde & textwidth.

set textwidth=80
set colorcolumn=-2

sería eficaz dibujar la barra de color en la posición 78 de caracteres. Por supuesto, puede establecer o no el ancho de texto, por lo que puede ser 0 (predeterminado). Yo uso la forma de posición absoluta.

También puede cambiar el color utilizado si lo desea:

highlight ColorColumn ctermbg=green guibg=orange

(Aunque no recomiendo ESOS colores)

Esta opción se agregó en (g) vim 7.3.


¿En qué versión de Vim es compatible? No me funciona en gvim 7.2.
Herms

Estoy corriendo 7.3. Acabo de extraer el código fuente y miré, este comando se introdujo en 7.3.
lornix

Funciona para mí en Ubuntu 12.04 con vim 7.3. gvim 7.3 para Windows ha estado disponible desde al menos octubre de 2010. @Herms, ¿puede hacer que esta sea la respuesta?
poindexter

Sería bueno si esto funcionara al usar varias ventanas una al lado de la otra. Mi monitor es lo suficientemente ancho como para mostrar varias ventanas en una fila, cada una de ellas> 80 caracteres, pero colorColumn solo funciona en la primera ventana (más a la izquierda).
Eno

3

Hay un fragmento en Google Code que puedes probar:

augroup vimrc_autocmds
au!
    autocmd BufRead * highlight OverLength ctermbg=red ctermfg=white guibg=#592929 
    autocmd BufRead * match OverLength /\%81v.*/
augroup END

Hmm, ese hilo sugiere que gvim de Windows ya lo admite, pero no puedo entender cómo encenderlo.
Herms

Hay algún código para agregar a su archivo gvimrc más adelante en el hilo.
EBGreen

Parece que eso solo cambia el fondo de los personajes que van más allá de esa línea. Prefiero tener una guía siempre visible como tienen otros editores.
Herms

Debido a la naturaleza de la interfaz gráfica de usuario, no estoy seguro de que actualmente sea posible.
EBGreen

Esto no se adapta al ancho de texto como se solicitó en la pregunta.
Steven Roose

2

Por una respuesta de StackOverflow :

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

Ajústelo a su gusto.


Hm, no es exactamente lo que estoy buscando (solo se muestra cuando los personajes pasan la línea), pero es mejor que nada.
Herms

Esto no se adapta al ancho de texto como se solicitó en la pregunta.
Steven Roose

1

Me gusta mucho la respuesta de lornix, pero no quiero resaltar la columna todo el tiempo , solo cuando al menos una línea excede el límite de longitud:

mostrando la columna cuando las líneas son demasiado largas

Así es como lo hago para mis archivos Haskell:

augroup HaskellCommands
autocmd!
  " When a Haskell file is read or the text changes in normal or insert mode,
  " draw a column marking the maximum line length if a line exceeds this length
  autocmd BufRead,TextChanged,TextChangedI *.hs call ShowColumnIfLineTooLong(80)
augroup END

" Color the column marking the lengthLimit when the longest line in the file
" exceeds the lengthLimit
function! ShowColumnIfLineTooLong(lengthLimit)
  " See /programming/2075276/longest-line-in-vim#2982789
  let maxLineLength = max(map(getline(1,'$'), 'len(v:val)'))

  if maxLineLength > a:lengthLimit
    highlight ColorColumn ctermbg=red guibg=red
    " Draw the vertical line at the first letter that exceeds the limit
    execute "set colorcolumn=" . (a:lengthLimit + 1)
  else
    set colorcolumn=""
  endif
endfunction

0

Esto se discutió a menudo en #vim y en algunos foros. En lo que respecta a las cosas ahora, no es posible. Entonces, la solución mencionada es su única opción, afaik.

La cuestión es que vim puede hacer cualquier cosa con lugares donde hay caracteres (como letras, números o simplemente espacios en blanco). Pero no puede pintar un fondo en un color diferente (como le gustaría), si no hay nada allí. Y antes de escribir algo, no hay nada allí, por lo que no puede dibujar una línea / margen.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.