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
?
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.
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
Après
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
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 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
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
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..
/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
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).
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