Charger différents colorscheme lors de l'utilisation de vimdiff

Comment charger un autre colorscheme en faisant vimdiff.

Je le veux parce que mon colorscheme actuel ne montre pas certaines différences correctement dans vimdiff, pour. par exemple, certains diff est montré avec la même couleur fg/bg. Cela rend très difficile de comprendre le diff. Donc, chaque fois que je fais un vimdiff j'ai à faire :colorscheme some_other_scheme

Cela peut-il être fait dans le fichier .vimrc?

100
demandé sur CodeRain 2010-01-07 12:22:39

10 réponses

Si vous appelez vimdiff depuis la ligne de commande, mettez ce qui suit dans votre .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Si vous utilisez vimdiff depuis vim, vous devrez soit remplacer les commandes que vous utilisez pour le démarrer/l'arrêter (par exemple diffthis, diffoff) utiliser :cnoreabbr (Il y a aussi un plugin ) ou utiliser une commande automatique:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre est appelé avant de filtrer via un programme externe (l'utilitaire diff) et l'option &diff est définie par vim lorsqu'elle passe en mode diff (parmi d'autres, voir :help diff)

Je ne suis pas sûr de l'autocommande à utiliser pour revenir au colorscheme d'origine.

91
répondu DataWraith 2010-01-07 10:15:28

Je ne sais pas pourquoi vim utilise autant de couleurs pour mettre en évidence, cela ne vous aide pas vraiment à comprendre ce qui se passe.

J'ai modifié mon colorscheme pour n'utiliser que une couleur pour mettre en surbrillance (avec une autre pour montrer où il y a une différence dans une ligne) et cela a fait toute la différence.

Avant

entrez la description de l'image ici

Après

colorscheme_screenshot

Je l'ai fait en ajoutant ce qui suit à la fin de mon fichier colorscheme (~/.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 - définit le style
  • ctermfg - définir la couleur du texte
  • ctermbg - définir la mise en surbrillance
  • DiffAdd ligne a été ajoutée
  • DiffDelete ligne a été supprimée
  • DiffChange - une partie de la ligne a été modifiée (met en évidence toute la ligne)
  • DiffText - la partie exacte de la ligne qui a changé

, j'ai utilisé ce lien comme une référence pour les numéros de couleurs.

Note: je n'ai pas défini les options gui car je utilisez un schéma de couleurs différent pour macvim / gvim

112
répondu Dean 2013-06-19 05:34:57

Pour répondre à ma propre question:

if &diff
    colorscheme evening
endif
36
répondu CodeRain 2010-01-07 09:59:59

J'ai trouvé le moyen le plus simple était de coller ce one-liner dans mon ~/.fichier 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
17
répondu Alan Thompson 2012-11-14 00:19:02

Pour les personnes qui utilisent le Très excellent thème Solarized Il y a une option qui active la visibilité élevée pour le mode diff:

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

"normal" entrez la description de l'image ici

"haut" entrez la description de l'image ici

"faible" entrez la description de l'image ici

9
répondu mandrake 2017-06-26 11:35:32

Si vous rencontrez des schémas de couleurs illisibles (pas seulement laids, mais illisibles comme le texte blanc sur fond rose), une solution facile peut être d'utiliser 16 couleurs au lieu de 256 couleurs. Ensuite, vous n'avez pas à jouer avec les couleurs.

La raison en est que le schéma de couleurs vimdiff par défaut attribue DiffChange bg comme "LightMagenta", qui est mappé à un rose très clair en 256 couleurs. C'est illisible avec du texte blanc. Avec 16 couleurs, le "LightMagenta" est mappé à un Magenta gras, qui Blanc texte montre beaucoup mieux sur.

Vous pouvez donner un test rapide en faisant quelque chose comme ceci:

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

Capture d'écran 256 couleurs entrez la description de l'image ici

Capture d'écran 16 couleurs entrez la description de l'image ici

Comme vous pouvez le voir, les 16 couleurs sont beaucoup plus lisibles, sans changer le schéma de couleurs.

Pour faire de cette permanente, vous pouvez ajouter set t_Co=16 votre .vimrc

9
répondu wisbucky 2018-04-23 21:29:49

Une autre approche consiste à corriger ce schéma de couleurs.

Pour autant que je sache, il y a généralement quatre groupes de surbrillance par rapport à diff'ing: DiffAdd, DiffChange, DiffDelete et DiffText. Si vous ne voulez pas être dérangé par la syntaxe ou peaufiner les couleurs à votre goût, vous pouvez probablement copier votre schéma de couleurs par défaut sous un autre nom dans ~/.vim / colors (créez le répertoire s'il n'existe pas) et copiez-collez les commandes :hi correspondantes de votre schéma de couleurs alternatif au fin de votre nouveau schéma de couleurs personnalisé, commentant éventuellement toutes les autres déclarations liées au diff.

Et si le résultat est une amélioration évidente, envoyez un e-mail au responsable de votre schéma de couleurs avec vos modifications et demandez-lui d'examiner le problème. Il y a de fortes chances qu'il vous remercie de votre intérêt et qu'il corrige son schéma de couleurs afin que les autres utilisateurs en bénéficient également..

5
répondu guv' 2012-07-21 16:34:42

/etc/vim/vimrc ou ~/.vimrc: Si vous utilisez un fond sombre dans la zone d'édition et la coloration syntaxique activez également cette option set background=dark

5
répondu Dmitry Ershov 2014-06-07 15:54:31

J'utilise ce qui suit lors de l'utilisation de vimdiff à partir de vim:

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

L'instruction part with else est importante car c'est ainsi que vous revenez à votre configuration précédente après avoir terminé le diff. Vous pouvez donc remplacer syntax off et syntax on par les commandes colorscheme respectives. Cet autocmd gère la modification d'un paramètre et le rétablissement lors de la fermeture de vimdiff (j'utilise Gdiff pour être précis).

2
répondu mostruash 2016-08-16 09:39:46

Mon colorscheme actuel ne montre pas certaines différences correctement dans vimdiff, pour. par exemple, certains diff sont affichés avec la même couleur fg/bg

En fait, j'ai trouvé que le principal coupable pour la même couleur fg/bg est à cause du conflit entre la coloration syntaxique du code et diff colorscheme. Vous pouvez essayer de changer le diff colorscheme, mais il peut s'agir d'un jeu de whack-a-mole lorsque vous ouvrez différents types de fichiers (avec une coloration syntaxique de code différente).

Une solution sûre est de désactiver le coloration syntaxique dans vimdiff. Vous pouvez soit taper:

:syntax off

Ou si vous voulez le faire automatiquement à chaque fois, ajoutez ceci à la fin de votre ~/.vimrc:

if &diff
    syntax off
endif
2
répondu wisbucky 2018-03-02 01:19:52