tutorial tool files vim vimdiff

tool - Cargue diferentes esquemas de colores cuando use vimdiff



vimdiff tutorial (10)

mi esquema de colores actual no muestra algunos diffs correctamente en vimdiff, For. por ejemplo, algunos diff se muestran con el mismo color fg / bg

En realidad, he descubierto que el principal culpable del mismo color fg / bg es debido al conflicto entre el resaltado de sintaxis de código y el esquema de color diff. Puede intentar cambiar el esquema de colores diff, pero puede ser un juego de whack-a-mole cuando abre diferentes tipos de archivos (con resaltado de sintaxis de código diferente).

Una solución segura es desactivar el resaltado de sintaxis en vimdiff. Puede escribir:

:syntax off

O si desea hacer esto automáticamente cada vez, agregue esto al final de su ~/.vimrc :

if &diff syntax off endif

Cómo cargar un esquema de color diferente al hacer vimdiff .

Quiero esto porque mi esquema de colores actual no muestra algunos diffs correctamente en vimdiff , For. por ejemplo, algunos diff se muestran con el mismo color fg / bg. Esto hace que sea muy difícil entender el diff. Así que cada vez que hago un vimdiff tengo que hacer :colorscheme some_other_scheme

¿Se puede hacer esto en el archivo .vimrc ?


Encontré que la manera más fácil era pegar este delineador en mi archivo ~ / .vimrc:

" Fix the difficult-to-read default setting for diff text highlighting. The " bang (!) is required since we are overwriting the DiffText setting. The highlighting " for "Todo" also looks nice (yellow) if you don''t like the "MatchParen" colors. highlight! link DiffText MatchParen


No sé por qué vim usa tantos colores para resaltar, realmente no te ayuda a descubrir qué está pasando.

Modifiqué mi esquema de colores para usar solo un color para resaltar (con otro para mostrar dónde hay diferencia dentro de una línea) y marcó la diferencia.

antes de

Después

Hice esto agregando lo siguiente al final de mi archivo de colorcheme ( ~/.vim/colors/mycolorsheme ).

highlight DiffAdd cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red highlight DiffText cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red

  • cterm - establece el estilo
  • ctermfg - establece el color del texto
  • ctermbg - establece el resaltado
  • DiffAdd : se agregó la línea
  • DiffDelete : se eliminó la línea
  • DiffChange : se DiffChange parte de la línea (resalta toda la línea)
  • DiffText : la parte exacta de la línea que cambió

Utilicé este enlace como referencia para los números de color.

Nota: No configuré las opciones de GUI porque utilizo un esquema de colores diferente para macvim / gvim


Otro enfoque es arreglar ese esquema de color.

Por lo que yo sé, usualmente hay cuatro grupos resaltados relativos a la diferenciación: DiffAdd, DiffChange, DiffDelete y DiffText. Si no quieres que te moleste la sintaxis o ajustar los colores a tu gusto, probablemente puedas copiar tu esquema de color predeterminado con otro nombre a ~ / .vim / colors (crea el directorio si no existe) y copie y pegue los comandos correspondientes: hi desde su esquema de color alternativo hasta el final de su nuevo esquema de color personalizado, comentando opcionalmente cualquier otra declaración relacionada con diferencias en el mismo.

Y si el resultado es una mejora obvia, envíe un correo electrónico al responsable de su combinación de colores con sus cambios y pídale que investigue el problema. Es muy probable que agradezca su interés y que arregle su esquema de colores para que otros usuarios también se beneficien.


Para las personas que usan el excelente tema Solarized hay una opción que activa la alta visibilidad para el modo diff:

" ~/vim.rc " Set high visibility for diff mode let g:solarized_diffmode="high"

"normal"

"alto"

"bajo"


Para responder mi propia pregunta:

if &diff colorscheme evening endif


Si llama a vimdiff desde la línea de comandos, coloque lo siguiente en su .vimrc :

if &diff colorscheme some_other_scheme endif

Si está usando vimdiff desde dentro de vim, tendrá que anular los comandos que usa para iniciar / detenerlo (por ejemplo, diffoff , diffoff ) usando :cnoreabbr (también hay un plugin ) o use un comando automático:

au FilterWritePre * if &diff | colorscheme xyz | endif

Se llama a FilterWritePre antes de filtrar a través de un programa externo (la utilidad diff) y la opción &diff se establece por vim cuando va al modo diff (entre otros, ver :help diff )

Sin embargo, no estoy seguro de qué comando automático usar para volver al esquema de colores original.


Si se encuentra con esquemas de color ilegibles (no solo feo, pero ilegible como texto blanco sobre fondo rosa), una solución fácil puede ser usar 16 colores en lugar de 256 colores. Entonces no tiene que meterse con los esquemas de color.

La razón es que el esquema de color vimdiff predeterminado asigna DiffChange bg como "LightMagenta", que se asigna a un color rosa muy claro en 256 colores. Eso es ilegible con texto blanco. Con 16 colores, el "LightMagenta" está mapeado en negrita, y el texto blanco aparece mucho mejor.

Puede hacer una prueba rápida haciendo algo como esto:

vimdiff <file1> <file2> :set t_Co? " print current setting (256 by default) :highlight " print highlighting scheme :set t_Co=16 " set to 16 colors :highlight " print highlighting scheme

Captura de pantalla de 256 colores

Captura de pantalla de 16 colores

Como puede ver, los 16 colores son mucho más legibles, sin cambiar el esquema de color.

Para que esto sea permanente, puede agregar el set t_Co=16 a su .vimrc


Uso lo siguiente cuando uso vimdiff desde dentro de vim:

au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif

La parte con declaración else es importante porque así es como regresas a tu configuración previa después de haber terminado con diff''ing. De modo que puede reemplazar la syntax off y la syntax on con los respectivos comandos de colorscheme . Este autocmd maneja el cambio de una configuración y la revierte al salir de vimdiff (yo uso Gdiff para ser preciso).


/etc/vim/vimrc o ~/.vimrc : si usa un fondo oscuro dentro del área de edición y resalta la sintaxis, active esta opción y set background=dark