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


137

Comment charger un autre choix de couleurs en le faisant vimdiff.

Je veux cela parce que mon choix de couleurs actuel n'affiche pas correctement certaines différences dans vimdiff, Pour. par exemple, certains diff sont affichés avec la même couleur fg / bg. Cela rend très difficile la compréhension du diff. Donc chaque fois que je fais un vimdiffje dois faire:colorscheme some_other_scheme

Cela peut-il être fait dans un .vimrcfichier?

Réponses:


118

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

if &diff
    colorscheme some_other_scheme
endif

Si vous utilisez vimdiff à partir de vim, vous auriez devez soit remplacer les commandes que vous utilisez pour démarrer / arrêter (par exemple diffthis, diffoff) à l' aide :cnoreabbr(il y a aussi un plug - in ) ou utiliser un autocommand:

au FilterWritePre * if &diff | colorscheme xyz | endif

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

Je ne sais pas quelle autocommande utiliser pour revenir au schéma de couleurs d'origine.


Est-il possible d'appeler plus d'une commande entre les deux tubes "|"? Je serais intéressé par le retour au schéma de couleurs original après avoir utilisé vimdiff de vim aussi ...
Quelqu'un vous utilise toujours MS-DOS

1
Les tuyaux sont des substituts aux nouvelles lignes, similaires aux ;scripts shell, vous pouvez donc simplement ajouter de nouvelles `` lignes '':if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemerecherchera dans vos chemins d’exécution color/some_other_scheme.vim. Vous pouvez voir vos chemins d'exécution à :set runtimepath?partir de vim.
pabo

1
Pour les utilisateurs de console (comme moi), j'ai trouvé que «vividchalk» était le meilleur choix de couleurs (en dehors de l'ensemble d'installation par défaut) pour maintenir le contraste entre les différences et la syntaxe en surbrillance, au moins pour les scripts shell. Une seconde proche était le «soir». J'espère que cela pourra aider.
Conrad Meyer

Mon problème est toujours le manque de contraste avec la coloration syntaxique, qui perd des morceaux entiers de texte en coloration diff. J'ai utilisé ': syntax off' comme nécessaire dans le passé, mais je l'ai simplement ajouté à mon .vimrc dans le prédicat 'if & diff' et
j'ai

166

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 choix de couleurs pour n'utiliser qu'une seule couleur pour mettre en évidence (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 de couleurs ( ~/.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 - définit le style
  • ctermfg - définir la couleur du texte
  • ctermbg - définir la mise en évidence
  • 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 autre choix de couleurs pour macvim / gvim


1
Merci! Cela semble beaucoup mieux!
vitaluha

4
Comme pabo l'a dit dans un autre commentaire, vous devrez peut-être nommer votre fichier de jeu de couleurs comme mycolorscheme.vim, avec l'extension .vim à la fin.
David Winiecki

Merci! Mineure: Je pense que vous avez accidentellement rendu tous les "guibg" rouges. Aviez-vous l'intention d'avoir deux couleurs - une pour DiffText et une pour le reste?
Kapil Arya

6
Pourquoi lorsque vous utilisez des nombres (ctermbg = 17), les couleurs ne fonctionnent pas, mais lorsque vous utilisez des mots (ctermbg = blue) - cela fonctionne? .. solution: le terminal n'a que 8 couleurs 1-7
Ricky Levi

3
MacOS utilisant iTerm2. Peu importe ce que j'ai fait, j'ai obtenu: Impossible de trouver le jeu de couleurs '~ / .vim / colors / mycolorscheme' Copier les codes de couleur directement entre l'instruction "if & diff" dans ~ / .vimrc a fait l'affaire.
Tony Barganski


22

J'ai trouvé que 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

3
Excellente solution! J'ai choisi Todoau lieu de MatchParenparce qu'il se démarque davantage.
Mihai Capotă

18

Si vous rencontrez des combinaisons de couleurs illisibles (pas seulement laides, mais illisibles comme du texte blanc sur fond rose), une solution facile peut être d'utiliser 16 couleurs au lieu de 256 couleurs. Ensuite, vous n'avez pas à vous soucier des jeux de couleurs.

La raison en est que le jeu de couleurs vimdiff par défaut est attribué DiffChange bgà "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é sur un magenta gras, 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 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 jeu de couleurs.

Pour rendre cela permanent, vous pouvez ajouter set t_Co=16à votre.vimrc


2
Merci beaucoup pour cette astuce, même si dans mon cas c'était l'inverse. t_Coa été mis à 8, ce qui set t_Co=256augmente considérablement la lisibilité.
Olaf Dietsche

11

molokai: jeu de couleurs molokai github: jeu de couleurs github Les deux thèmes github et molokai sont tout aussi 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

Ma nouvelle solution préférée à ce vieux problème!
Stabledog

10

Pour les personnes qui utilisent le très excellent thème Solarized, il existe une option qui active la haute visibilité pour le mode diff:

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

"Ordinaire" entrez la description de l'image ici

"haute" entrez la description de l'image ici

"faible" entrez la description de l'image ici


1
Vous n'auriez pas une capture d'écran de la différence que cela fait?
Victor Zamanian

7

mon choix de couleurs actuel ne montre pas correctement certaines différences dans vimdiff, For. Par exemple, certains diff sont affichés avec la même couleur fg / bg

En fait, j'ai trouvé que le principal coupable de la même couleur fg / bg est le conflit entre la coloration syntaxique du code et le schéma de couleurs différent. Vous pouvez essayer de changer le schéma de couleurs diff, mais cela peut être 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 consiste à désactiver la coloration syntaxique dans vimdiff. Vous pouvez taper soit:

:syntax off

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

if &diff
    syntax off
endif

6

Une autre approche consiste à corriger ce jeu de couleurs.

Autant que je sache, il existe généralement quatre groupes de surbrillance relatifs à la différence: DiffAdd, DiffChange, DiffDelete et DiffText. Si vous ne voulez pas vous soucier de la syntaxe ou peaufiner les couleurs à votre goût, vous pouvez probablement copier votre jeu 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 jeu de couleurs alternatif à la fin de votre nouveau jeu de couleurs personnalisé, en commentant facultativement toutes les autres déclarations liées aux différences.

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


Les développeurs de vim ont reçu de nombreuses plaintes et suggestions sur la façon dont le schéma de couleurs par défaut apparaît sur un fond sombre, mais malheureusement, cela a encore été corrigé.
Stefan Lasiewski

6

/etc/vim/vimrcou ~/.vimrc: Si vous utilisez un arrière-plan sombre dans la zone d'édition et la coloration syntaxique, activez également cette optionset background=dark


3

J'utilise ce qui suit lorsque j'utilise vimdiff à partir de vim:

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

La partie avec l'instruction else est importante car c'est ainsi que vous revenez à votre configuration précédente après avoir terminé la modification. Ainsi, vous pouvez remplacer syntax offet syntax onavec les colorschemecommandes respectives . Cet autocmd gère la modification d'un paramètre et son rétablissement lorsque vous quittez vimdiff (j'utilise Gdiffpour être précis).


3

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.