Cargue un esquema de colores diferente cuando use vimdiff

137

Cómo cargar un esquema de colores diferente al hacerlo vimdiff.

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

¿Se puede hacer esto en el .vimrcarchivo?

CodeRain
fuente

Respuestas:

118

Si llama vimdiffdesde la línea de comandos, ingrese lo siguiente en su .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Si usa vimdiff desde vim, tendría que anular los comandos que usa para iniciarlo / detenerlo (p diffthis. Ej . diffoff) Usando :cnoreabbr(también hay un complemento ) o usar 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 &diffopción -v se establece cuando entra en 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.

DataWraith
fuente
¿Es posible llamar a más de un comando entre las dos tuberías "|"? Me interesaría volver al esquema de colores original después de usar vimdiff desde vim también ...
Alguien todavía te usa MS-DOS el
1
Las canalizaciones son sustitutos de las nuevas líneas, de forma similar a ;los scripts de shell, por lo que puede agregar nuevas 'líneas':if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith
1
colorscheme some_other_schemebuscará a través de sus rutas de tiempo de ejecución color/some_other_scheme.vim. Puede ver sus rutas de tiempo de ejecución :set runtimepath?desde vim.
pabo
1
Para los usuarios de la consola (como yo), descubrí que 'vividchalk' es el mejor esquema de colores (fuera del conjunto de instalación predeterminado) para mantener el contraste entre las diferencias resaltadas y la sintaxis resaltada, al menos para los scripts de shell. Un segundo cercano fue 'tarde'. Espero que ayude.
Conrad Meyer
Mi problema es siempre la falta de contraste con el resaltado de sintaxis, que pierde fragmentos enteros de texto en colores difusos. Utilicé ': sintaxis desactivada' como era necesario en el pasado, pero solo la agregué a mi .vimrc en el predicado 'if & diff' y ahora
guardé
166

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 una diferencia dentro de una línea) e hizo toda la diferencia.

antes de

ingrese la descripción de la imagen aquí

Después

colorscheme_screenshot

Lo hice agregando lo siguiente al final de mi archivo de esquema de colores ( ~/.vim/colors/mycolorscheme.vim).

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 - establecer el color del texto
  • ctermbg - establecer el resaltado
  • DiffAdd - se agregó la línea
  • DiffDelete - se eliminó la línea
  • DiffChange - se cambió parte de la línea (resalta toda la línea)
  • DiffText - la parte exacta de la línea que cambió

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

Nota: No configuré las opciones de interfaz gráfica de usuario porque uso un esquema de colores diferente para macvim / gvim

Decano
fuente
1
¡Gracias! ¡Esto se ve mucho mejor!
vitaluha
44
Como dijo pabo en otro comentario, es posible que deba nombrar su archivo de esquema de color como mycolorscheme.vim, con la extensión .vim al final.
David Winiecki
¡Gracias! Minor nit: Creo que accidentalmente pusiste todos los "guibg" rojos. ¿Pretendía tener dos colores, uno para DiffText y otro para el resto?
Kapil Arya
66
¿Por qué cuando se usan números (ctermbg = 17) los colores no funcionan, pero cuando se usan palabras (ctermbg = azul), ¿funciona? .. solución: el terminal solo tiene 8 colores 1-7
Ricky Levi
3
MacOS usando iTerm2. No importa lo que hice, obtuve: No se puede encontrar el esquema de color '~ / .vim / colors / mycolorscheme' Copiar los códigos de color directamente entre la declaración "if & diff" en ~ / .vimrc hizo el truco.
Tony Barganski
59

Para responder mi propia pregunta:

if &diff
    colorscheme evening
endif
CodeRain
fuente
¡Gran color para mí!
skytree
22

Encontré que la forma más fácil era pegar esta línea 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
Alan Thompson
fuente
3
Gran solución! Elegí en Todolugar de MatchParenporque se destaca más.
Mihai Capotă
18

Si se encuentra con esquemas de color ilegibles (no solo feos, sino ilegibles como el 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 se asigna DiffChange bgcomo "LightMagenta", que se asigna a un rosa muy claro en 256 colores. Eso es ilegible con texto blanco. Con 16 colores, el "LightMagenta" se asigna a un magenta en negrita, en el que el texto blanco se ve mucho mejor.

Puede realizar 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 ingrese la descripción de la imagen aquí

Captura de pantalla de 16 colores ingrese la descripción de la imagen aquí

Como puede ver, los 16 colores son mucho más legibles, sin cambiar la combinación de colores.

Para hacer esto permanente, puede agregar set t_Co=16a su.vimrc

Wisbucky
fuente
2
Muchas gracias por este consejo, aunque en mi caso fue al revés. t_Cose estableció en 8, incrementándolo set t_Co=256enormemente a una legibilidad mejorada.
Olaf Dietsche
11

molokai: esquema de color molokai github: esquema de color github los dos temas github y molokai son igualmente hermosos.

curl -fLo ~/.vim/colors/molokai.vim --create-dirs https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
curl -fLo ~/.vim/colors/github.vim --create-dirs https://raw.githubusercontent.com/endel/vim-github-colorscheme/master/colors/github.vim

Ponga el siguiente código en su ~ / .vimrc, puede elegir github o molokai (una línea que comienza con un "es un comentario):

if &diff
"   colorscheme github
    colorscheme molokai
endif
azul hielo
fuente
¡Mi nueva solución favorita para este viejo problema!
Stabledog
10

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" ingrese la descripción de la imagen aquí

"alto" ingrese la descripción de la imagen aquí

"bajo" ingrese la descripción de la imagen aquí

mandrágora
fuente
1
¿No tendría una captura de pantalla de la diferencia que esto hace?
Victor Zamanian
7

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

En realidad, descubrí que el principal culpable del mismo color fg / bg se debe al conflicto entre el resaltado de sintaxis de código y el esquema de colores diff. Puede intentar cambiar el esquema de colores de diferencias, 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 deshabilitar el resaltado de sintaxis en vimdiff. Puedes escribir:

:syntax off

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

if &diff
    syntax off
endif
Wisbucky
fuente
6

Otro enfoque es arreglar ese esquema de color.

Hasta donde yo sé, generalmente hay cuatro grupos destacados en relación con la diferenciación: DiffAdd, DiffChange, DiffDelete y DiffText. Si no desea que le moleste la sintaxis o ajustar los colores a su gusto, probablemente podría copiar su esquema de color predeterminado con otro nombre a ~ / .vim / colors (cree el directorio si no existe) y copie y pegue los comandos correspondientes: hola de su combinación de colores alternativa al final de su nueva combinación de colores personalizada, comentando opcionalmente cualquier otra declaración relacionada con diff en el mismo.

Y si el resultado es una mejora obvia, envíe un correo electrónico al responsable del esquema de color con sus cambios y pídale que analice el problema. Existe una buena posibilidad de que él le agradezca su interés y que arregle su esquema de color para que otros usuarios también se beneficien.

jefe'
fuente
Los desarrolladores de vim han recibido numerosas quejas y sugerencias sobre cómo aparece el esquema de colores predeterminado sobre un fondo oscuro, pero lamentablemente esto aún se ha solucionado.
Stefan Lasiewski
6

/etc/vim/vimrco ~/.vimrc: si usa un fondo oscuro dentro del área de edición y resaltado de sintaxis, active también esta opciónset background=dark

Dmitry Ershov
fuente
3

Yo uso lo siguiente cuando uso vimdiff desde vim:

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

La parte con la declaración else es importante porque así es como vuelves a tu configuración anterior después de terminar con diff'ing. Para que pueda reemplazar syntax offy syntax oncon los colorschemecomandos respectivos . Este autocmd maneja el cambio de una configuración y la revierte al salir de vimdiff (lo uso Gdiffpara ser precisos).

Mostruash
fuente
3

Para ampliar en @dean y algunas otras respuestas aquí, agregue esto a su .vimrc:

if &diff
  " colorscheme evening
  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
endif
thouliha
fuente