Carica diversi colori quando usi vimdiff


137

Come caricare un diverso schema di colori quando lo fai vimdiff.

Lo voglio perché il mio schema di colori attuale non mostra correttamente alcune differenze in vimdiff, Per. ad es. alcune differenze sono visualizzate con lo stesso colore fg / bg. Questo rende molto difficile capire il diff. Quindi ogni volta che lo faccio vimdiffdevo farlo:colorscheme some_other_scheme

Questo può essere fatto in .vimrcarchivio?

Risposte:


118

Se stai chiamando vimdiffdalla riga di comando, inserisci quanto segue nel tuo .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Se stai usando vimdiff da vim, dovresti o sovrascrivere i comandi che usi per avviarlo / interromperlo (es diffthis. diffoff) Usando :cnoreabbr(c'è anche un plugin ) o usare un comando automatico:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre viene chiamato prima di filtrare attraverso un programma esterno (l'utilità diff) e l' &diffopzione -op è impostata da vim quando entra in modalità diff (tra gli altri, vedi :help diff)

Non sono sicuro del comando automatico da utilizzare per tornare allo schema dei colori originale.


È possibile chiamare più di un comando tra le due pipe "|"? Sarei interessato a tornare allo schema dei colori originale dopo aver usato vimdiff anche da vim ...
Qualcuno usa ancora MS-DOS

1
Le pipe sono sostituzioni di newline, simili agli ;script di shell, quindi puoi semplicemente aggiungere nuove 'righe':if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemeesaminerà i percorsi di runtime per color/some_other_scheme.vim. Puoi vedere i tuoi runtimepaths da :set runtimepath?dentro Vim.
pabo

1
Per gli utenti della console (come me), ho scoperto che "vividchalk" è il miglior schema di colori (al di fuori del set di installazione predefinito) per mantenere il contrasto tra differenze evidenziate e sintassi evidenziata, almeno per gli script di shell. Un secondo vicino era "sera". Spero che aiuti.
Conrad Meyer,

Il mio problema è sempre la mancanza di contrasto con l'evidenziazione della sintassi, che perde interi pezzi di testo nella colorazione diff. Ho usato ': sintassi disattivata' come necessario in passato, ma l'ho appena aggiunto al mio .vimrc nel predicato 'if & diff' e ora
ho

166

Non so perché Vim usi così tanti colori per evidenziare, non ti aiuta davvero a capire cosa sta succedendo.

Ho modificato il mio schema di colori per usare solo un colore per evidenziare (con un altro per mostrare dove c'è una differenza all'interno di una linea) e ha fatto la differenza.

Prima

inserisci qui la descrizione dell'immagine

Dopo

colorscheme_screenshot

L'ho fatto aggiungendo quanto segue alla fine del mio file colorscheme ( ~/.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 - imposta lo stile
  • ctermfg - imposta il colore del testo
  • ctermbg - imposta l'evidenziazione
  • DiffAdd - è stata aggiunta una riga
  • DiffDelete - la linea è stata rimossa
  • DiffChange - parte della linea è stata modificata (evidenzia l'intera linea)
  • DiffText - la parte esatta della linea che è cambiata

Ho usato questo link come riferimento per i numeri di colore.

Nota: non ho impostato le opzioni della GUI perché uso un diverso schema di colori per macvim / gvim


1
Grazie! Sembra molto meglio!
vitaluha,

4
Come ha detto pabo in un altro commento, potrebbe essere necessario assegnare un nome al file della combinazione di colori come mycolorscheme.vim, con l'estensione .vim alla fine.
David Winiecki,

Grazie! Minor nit: Penso che tu abbia accidentalmente reso tutto "guibg" rosso. Hai intenzione di avere due colori: uno per DiffText e uno per il resto?
Kapil Arya,

6
Perché quando si usano i numeri (ctermbg = 17) i colori non funzionano, ma quando si usano le parole (ctermbg = blu) - funziona? .. soluzione: il terminale ha solo 8 colori 1-7
Ricky Levi,

3
MacOS utilizzando iTerm2. Non importa quello che ho fatto, ho trovato: Impossibile trovare la combinazione di colori '~ / .vim / colors / mycolorscheme' La copia dei codici colore direttamente tra l'istruzione "if & diff" in ~ / .vimrc ha funzionato.
Tony Barganski,

59

Per rispondere alla mia domanda:

if &diff
    colorscheme evening
endif

Ottimo colore per me!
skytree

22

Ho trovato il modo più semplice per incollare questo one-liner nel mio file ~ / .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

3
Ottima soluzione! Ho scelto Todoinvece MatchParenperché si distingue di più.
Mihai Capotă,

18

Se stai riscontrando combinazioni di colori illeggibili (non solo brutte, ma illeggibili come il testo bianco su sfondo rosa), una soluzione semplice potrebbe essere quella di utilizzare 16 colori anziché 256 colori. Quindi non devi fare confusione con le combinazioni di colori.

Il motivo è che la combinazione di colori predefinita di Vimdiff assegna DiffChange bgcome "LightMagenta", che viene mappata su un rosa molto chiaro in 256 colori. È illeggibile con il testo bianco. Con 16 colori, "LightMagenta" è mappato su un magenta grassetto, su cui il testo bianco appare molto meglio.

Puoi fare un rapido test facendo qualcosa del genere:

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

Schermata a 256 colori inserisci qui la descrizione dell'immagine

Screenshot a 16 colori inserisci qui la descrizione dell'immagine

Come puoi vedere, i 16 colori sono molto più leggibili, senza cambiare la combinazione di colori.

Per renderlo permanente, puoi aggiungerlo set t_Co=16al tuo.vimrc


2
Grazie mille per questo suggerimento, anche se nel mio caso è stato il contrario. t_Coè stato impostato su 8, aumentandolo set t_Co=256enormemente per migliorarne la leggibilità.
Olaf Dietsche,

11

molokai: combinazione di colori molokai github: combinazione di colori github I due temi github e molokai sono ugualmente belli.

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

Inserisci il seguente codice nel tuo ~ / .vimrc, puoi scegliere github o molokai (una riga che inizia con un "è un commento):

if &diff
"   colorscheme github
    colorscheme molokai
endif

La mia nuova soluzione preferita a questo vecchio problema!
Stabledog

10

Per le persone che usano l'ottimo tema Solarized c'è un'opzione che attiva l'alta visibilità per la modalità diff:

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

"normale" inserisci qui la descrizione dell'immagine

"Alto" inserisci qui la descrizione dell'immagine

"Basso" inserisci qui la descrizione dell'immagine


1
Non ti capita di avere uno screenshot della differenza che fa questo?
Victor Zamanian,

7

il mio attuale schema di colori non mostra correttamente alcune differenze in vimdiff, For. ad es. alcune differenze sono visualizzate con lo stesso colore fg / bg

In realtà, ho scoperto che il principale colpevole dello stesso colore fg / bg è a causa del conflitto tra l'evidenziazione della sintassi del codice e il diff colorscheme. Puoi provare a cambiare il diff colorscheme, ma potrebbe essere un gioco di schifo quando apri diversi tipi di file (con l'evidenziazione della sintassi del codice differente).

Una soluzione sicura è disabilitare l'evidenziazione della sintassi in vimdiff. Puoi digitare:

:syntax off

O se vuoi farlo automaticamente ogni volta, aggiungi questo alla fine del tuo ~/.vimrc:

if &diff
    syntax off
endif

6

Un altro approccio è quello di correggere quella combinazione di colori.

Per quanto ne so, di solito ci sono quattro gruppi di evidenziazione relativi al diff: DiffAdd, DiffChange, DiffDelete e DiffText. Se non vuoi essere disturbato dalla sintassi o modificare i colori a tuo piacimento, potresti probabilmente copiare la combinazione di colori predefinita con un altro nome in ~ / .vim / colors (crea la directory se non esiste) e copia incolla i comandi corrispondenti: hi dalla tua combinazione di colori alternativa alla fine della tua nuova combinazione di colori personalizzata, eventualmente commentando qualsiasi altra dichiarazione relativa alla diff.

E se il risultato è un evidente miglioramento, invia un'e-mail al manutentore della tua combinazione di colori con le tue modifiche e chiedigli di esaminare il problema. C'è una buona probabilità che ti ringrazierà per il tuo interesse e che risolverà la sua combinazione di colori in modo che anche altri utenti ne trarranno beneficio.


Gli sviluppatori di Vim hanno ricevuto numerosi reclami e suggerimenti su come appare lo schema dei colori predefinito su uno sfondo scuro, ma purtroppo questo è stato ancora risolto.
Stefan Lasiewski l'

6

/etc/vim/vimrcoppure ~/.vimrc: se si utilizza uno sfondo scuro nell'area di modifica e l'evidenziazione della sintassi attivare anche questa opzioneset background=dark


3

Uso quanto segue quando utilizzo vimdiff da vim:

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

L'istruzione part with else è importante perché è così che torni alla configurazione precedente dopo aver finito con il diff. Quindi puoi sostituire syntax offe syntax oncon i rispettivi colorschemecomandi. Questo autocmd gestisce la modifica di un'impostazione e il ripristino quando si esce da vimdiff (io uso Gdiffper essere precisi).


3

Per espandere su @dean e alcune altre risposte qui, aggiungi questo al tuo .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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.