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
: seDiffChange
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"
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