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?
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.
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.
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 stylectermfg
- définit la couleur du textectermbg
- met la surbrillanceDiffAdd
- la ligne a été ajoutéeDiffDelete
- la ligne a été suppriméeDiffChange
- 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.
Pour répondre à ma propre question:
if &diff
colorscheme evening
endif
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
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
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
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"
/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
molokai: github: 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
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.
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).
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
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