tutorial significado que metrologia mac comandos vim coding-style

significado - Vim 80 columnas de diseño de columna



vim tutorial (14)

Siento que la forma en que hago 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íneas con la alternativa de set columns .

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

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


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

Como las versiones anteriores no admiten esto, 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 sobre la opción de colorcolumn .


Bueno, mirando las: columnas de ayuda, realmente no está hecho para desordenar.

En la consola, generalmente está determinado por 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 administradores de ventanas hagan su trabajo comentando las set columns

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


Camino más corto:

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


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

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

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


Las versiones más nuevas de vim permiten un :set numberwidth=x value, que establece el ancho de la visualización del número de línea. Realmente no uso el plegado, etc., así que no lo sabría. 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, por lo que no puedo comentar allí).


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

El uso de :set textwidth=80 solucionará todos los problemas que mencionó, excepto que no puede ver fácilmente el límite de línea que se aproxima. Si :set ruler , habilitará la visualización de las posiciones 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 de número, la columna de plegado y las divisiones solo porque tiene que :set columns=80 .


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 sin embargo.

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

Esto requiere vim 7+, 7.3 para relativenumber.


Puedes probar 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

Eso configurará dos aspectos destacados en cada búfer, uno para los caracteres en las 8 columnas anteriores a lo que se haya establecido en &textwidth , y otro para los caracteres más allá de esa columna. De esa manera tienes un cierto grado de anticipación. Por supuesto, puede modificarlo para que use un ancho diferente si desea más o menos anticipación (que paga en forma de pérdida de resaltado de sintaxis en esas columnas).


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

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

Resultado:


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 supera el límite de 80 columnas (sutil en el modo GUI, de todos modos, en el modo terminal no lo es tanto).


Una buena forma de marcar solo el primer carácter 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 talk Damian Conway.


Yo prefiero:

highlight ColorColumn ctermbg=gray set colorcolumn=80


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

" make window 80 + some for numbers wide noremap <Leader>w :let @w=float2nr(log10(line("$")))+82/|:vertical resize <c-r>w<cr>


Minimalista, enfoque no superior. Sólo se resalta el carácter 79 de las líneas que son demasiado largas. Supera algunos problemas comunes: funciona 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: observe que FileType scala,java limita esto a los archivos de origen de Scala y Java. Probablemente quieras personalizar esto. Si tuviera que omitirlo, funcionaría en todos los tipos de archivos.