web-dev-qa-db-fra.com

Charger différentes couleurs lors de l'utilisation de vimdiff

Comment charger un schéma de couleurs différent en faisant vimdiff.

Je le souhaite car le schéma de couleurs actuel n’affiche pas correctement les différences dans vimdiff, pour. par exemple, certaines diff sont affichées avec la même couleur fg/bg. Cela rend très difficile à comprendre le diff. Donc, chaque fois que je fais un vimdiff je dois le faire :colorscheme some_other_scheme

Cela peut-il être fait en .vimrc fichier?

122
CodeRain

Si vous appelez vimdiff à partir de la ligne de commande, indiquez ce qui suit dans votre .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Si vous utilisez vimdiff depuis vim, vous devez soit remplacer les commandes que vous utilisez pour le démarrer/l’arrêter (par exemple, diffthis, diffoff) en utilisant :cnoreabbr ( il y a aussi un plugin ) ou utilisez une autocommande:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre est appelé avant le filtrage via un programme externe (l'utilitaire diff) et l'option &diff - est définie par vim lorsqu'il passe en mode Diff (entre autres, voir :help diff).

Cependant, je ne suis pas sûr de la commande à utiliser pour revenir à la palette de couleurs d'origine.

103
DataWraith

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

J'ai modifié mon schéma de couleurs pour n'utiliser que une couleur à 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

enter image description here

Après

colorscheme_screenshot

Je l’ai fait en ajoutant ce qui suit à la fin de mon fichier couleurscheme (~/.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éfinit la couleur du texte
  • ctermbg - met la surbrillance
  • DiffAdd - la ligne a été ajoutée
  • DiffDelete - la 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 référence pour les numéros de couleur.

Remarque: je n'ai pas défini les options de l'interface graphique, car j'utilise un schéma de couleurs différent pour macvim/gvim.

143
Dean

Pour répondre à ma propre question:

if &diff
    colorscheme evening
endif
46
CodeRain

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
Alan Thompson

Si vous rencontrez des combinaisons de couleurs illisibles (pas simplement laides, mais illisibles comme du texte blanc sur fond rose), une solution simple consiste peut-être à utiliser 16 couleurs au lieu de 256 couleurs. Ensuite, vous n'avez pas à vous soucier des schémas de couleurs.

La raison en est que le jeu de couleurs par défaut de vimdiff attribue DiffChange bg comme "LightMagenta", qui est mappé sur un rose très clair en 256 couleurs. C'est illisible avec du texte blanc. Avec 16 couleurs, le "LightMagenta" est associé à un magenta audacieux, sur lequel le texte blanc apparaît beaucoup mieux.

Vous pouvez faire 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 enter image description here

Capture d'écran 16 couleurs enter image description here

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

Pour rendre ce permanent, vous pouvez ajouter set t_Co=16 à ton .vimrc

15
wisbucky

Pour les personnes utilisant le très excellent thème Solarized , une option active la haute visibilité pour le mode Diff:

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

"Ordinaire" enter image description here

"haute" enter image description here

"faible" enter image description here

9
mandrake

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

6
Dmitry Ershov

molokai: molokai color scheme github: github color scheme Les deux thèmes github et molokai sont également beaux.

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

Mettez le code suivant dans votre ~/.vimrc, vous pouvez choisir github ou molokai (une ligne commençant par un "est un commentaire):

if &diff
"   colorscheme github
    colorscheme molokai
endif
5
iceblue

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

Pour autant que je sache, il existe généralement quatre groupes de surbrillance relatifs à diff:: DiffAdd, DiffChange, DiffDelete et DiffText. Si vous ne souhaitez pas vous soucier de la syntaxe ou modifier les couleurs à votre guise, vous pouvez probablement copier votre jeu de couleurs par défaut sous un autre nom dans ~/.vim/colors (créer le répertoire s'il n'existe pas) et copier coller les commandes correspondantes: hi de votre jeu de couleurs alternatif à la fin de votre nouveau jeu de couleurs personnalisé, en commentant de manière optionnelle toutes les autres instructions relatives aux diff qui y sont contenues.

Et si le résultat est une amélioration évidente, envoyez un e-mail au responsable de votre jeu 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 répare son schéma de couleurs afin que les autres utilisateurs en bénéficient également.

5
guv'

J'utilise les éléments suivants lors de l'utilisation de vimdiff à partir de vim:

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

La partie avec une autre déclaration est importante parce que c'est ainsi que vous revenez à votre configuration précédente après avoir terminé la diff. Vous pouvez donc remplacer syntax off et syntax on avec les commandes respectives colorscheme. Cet autocmd gère la modification d'un paramètre et l'inverse lorsque vous quittez vimdiff (j'utilise Gdiff pour être précis).

3
mostruash

mon schéma de couleurs actuel ne montre pas correctement les diffs dans vimdiff, pour. par exemple, certains diff sont affichés avec la même couleur fg/bg

En fait, j'ai constaté que le principal responsable de la même couleur fg/bg était dû à un conflit entre la coloration syntaxique du code et le code de couleurs diff. Vous pouvez essayer de changer le schéma de couleurs diff, mais ce peut être un jeu de whack-a-mole lorsque vous ouvrez différents types de fichiers (avec une coloration différente pour la syntaxe de code).

Une solution sûre consiste à désactiver la coloration syntaxique dans vimdiff. Vous pouvez soit taper:

:syntax off

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

if &diff
    syntax off
endif
2
wisbucky

Pour développer @ dean et quelques autres réponses ici, ajoutez ceci à votre .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
0
thouliha