it-swarm-es.com

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

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

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

En caso de que importe, estoy usando principalmente gVim en Windows, pero me encantaría que la solución funcionara en todas las versiones de Vim.

26
Herms

para (g) vim, use lo siguiente:

set colorcolumn=80

o el ancho que desee. 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 + x/-x en la posición base de la columna +/- de & textwidth.

set textwidth=80
set colorcolumn=-2

dibujaría eficazmente la barra de color en la posición de caracteres 78. Por supuesto, puede o no establecer el ancho de texto usted mismo, por lo que podría 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.

43
lornix

Hay un fragmento en Google Code puedes probar:

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

Por respuesta de StackOverflow :

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

Ajústelo a su gusto.

2
jtimberman

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

showing column when lines too long

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 https://stackoverflow.com/questions/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
1
Matthias Braun

Esto se discutió a menudo en #vim y en algunos foros. Hasta donde están las cosas ahora, no es posible. Entonces, la solución mencionada es su única opción, afaik.

El caso es que vim puede hacer cualquier cosa con lugares donde hay caracteres (ya sean 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 trazar una línea/margen.

0
Rook