it-swarm.com.de

Laden Sie ein anderes Farbschema, wenn Sie vimdiff verwenden

Wie lade ich ein anderes Farbschema, wenn ich vimdiff mache?.

Ich möchte dies, weil in meinem aktuellen Farbschema einige Unterschiede in vimdiff, For nicht richtig angezeigt werden. zB wird etwas diff mit der gleichen fg/bg Farbe gezeigt. Dies macht es sehr schwer, den Unterschied zu verstehen. Also jedes Mal, wenn ich ein vimdiff mache, muss ich :colorscheme some_other_scheme

Kann das gemacht werden in .vimrc Datei?

122
CodeRain

Wenn Sie vimdiff über die Befehlszeile aufrufen, geben Sie Folgendes in Ihren .vimrc Ein:

if &diff
    colorscheme some_other_scheme
endif

Wenn Sie vimdiff in vim verwenden, müssen Sie entweder die Befehle, die Sie zum Starten/Stoppen verwenden (z. B. diffthis, diffoff), mit :cnoreabbr (Überschreiben. es gibt auch ein plugin ) oder benutze einen autocommand:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre wird vor dem Filtern durch ein externes Programm (das Dienstprogramm diff) aufgerufen und die Option &diff Wird von vim festgelegt, wenn es in den Diff-Modus wechselt (siehe unter anderem :help diff).

Ich bin mir nicht sicher, mit welchem ​​Autobefehl ich zum ursprünglichen Farbschema zurückkehren soll.

103
DataWraith

Ich weiß nicht, warum vim so viele Farben zum Hervorheben verwendet, es hilft dir nicht wirklich herauszufinden, was los ist.

Ich habe mein Farbschema dahingehend geändert, dass es nur one color zum Hervorheben verwendet (mit einem anderen, um zu zeigen, wo es einen Unterschied innerhalb einer Linie gibt), und es hat den Unterschied ausgemacht.

Vor

enter image description here

Nach

colorscheme_screenshot

Ich tat dies, indem ich das Folgende an das Ende meiner Farbschemadatei anfügte (~/.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 - Legt den Stil fest
  • ctermfg - Legt die Textfarbe fest
  • ctermbg - setzt die Hervorhebung
  • DiffAdd - Zeile wurde hinzugefügt
  • DiffDelete - Zeile wurde entfernt
  • DiffChange - ein Teil der Zeile wurde geändert (hebt die gesamte Zeile hervor)
  • DiffText - der genaue Teil der Zeile, der sich geändert hat

Ich habe diesen Link als Referenz für die Farbnummern verwendet.

Hinweis: Ich habe die GUI-Optionen nicht festgelegt, weil ich ein anderes Farbschema für MacVim/GVIM verwende

143
Dean

Um meine eigene Frage zu beantworten:

if &diff
    colorscheme evening
endif
46
CodeRain

Ich fand den einfachsten Weg, diesen Einzeiler in meine ~/.vimrc-Datei einzufügen:

" 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

Wenn Sie auf unlesbare Farbschemata stoßen (nicht nur hässlich, sondern auch unlesbar wie weißer Text auf rosa Hintergrund), können Sie auf einfache Weise 16 Farben anstelle von 256 Farben verwenden. Dann müssen Sie sich nicht mit den Farbschemata herumschlagen.

Der Grund dafür ist, dass das vimdiff-Standardfarbschema DiffChange bg Als "LightMagenta" zuweist, das einem sehr hellen Rosa in 256 Farben zugeordnet wird. Das ist mit weißem Text nicht lesbar. Mit 16 Farben ist die "LightMagenta" einem kräftigen Magenta zugeordnet, auf dem weißer Text viel besser zur Geltung kommt.

Sie können einen kurzen Test durchführen, indem Sie Folgendes tun:

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

256-Farben-Screenshot enter image description here

16-Farben-Screenshot enter image description here

Wie Sie sehen können, sind die 16 Farben viel besser lesbar, ohne das Farbschema zu ändern.

Um dies dauerhaft zu machen, können Sie set t_Co=16 Zu Ihrem .vimrc Hinzufügen.

15
wisbucky

Für Leute, die das sehr exzellente Solarized Theme verwenden, gibt es eine Option, die die hohe Sichtbarkeit für den Diff-Modus einschaltet:

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

"normal" enter image description here

"hoch" enter image description here

"niedrig" enter image description here

9
mandrake

/etc/vim/vimrc oder ~/.vimrc: Wenn Sie im Bearbeitungsbereich einen dunklen Hintergrund verwenden und die Syntax hervorheben, aktivieren Sie diese Option ebenfalls set background=dark

6
Dmitry Ershov

molokai: molokai color scheme github: github color scheme Die beiden Themen Github und Molokai sind gleichermaßen schön.

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

Fügen Sie den folgenden Code in Ihre ~/.vimrc ein, Sie können Github oder Molokai wählen (eine Zeile, die mit einem "beginnt, ist ein Kommentar):

if &diff
"   colorscheme github
    colorscheme molokai
endif
5
iceblue

Ein anderer Ansatz besteht darin, dieses Farbschema zu korrigieren.

Soweit ich weiß, gibt es normalerweise vier Hervorhebungsgruppen in Bezug auf das Vergleichen: DiffAdd, DiffChange, DiffDelete und DiffText. Wenn Sie sich nicht um die Syntax kümmern oder die Farben nach Ihren Wünschen anpassen möchten, können Sie Ihr Standardfarbschema unter einem anderen Namen nach ~/.vim/colors kopieren (erstellen Sie das Verzeichnis, falls es nicht vorhanden ist) und Kopieren Fügen Sie die entsprechenden: hi-Befehle aus Ihrem alternativen Farbschema bis zum Ende Ihres neuen benutzerdefinierten Farbschemas ein, und kommentieren Sie optional alle anderen diff-bezogenen Anweisungen aus.

Und wenn das Ergebnis eine offensichtliche Verbesserung ist, senden Sie eine E-Mail mit Ihren Änderungen an den Betreuer Ihres Farbschemas und bitten Sie ihn, das Problem zu untersuchen. Es besteht eine gute Chance, dass er sich bei Ihnen für Ihr Interesse bedankt und sein Farbschema so ändert, dass auch andere Benutzer davon profitieren.

5
guv'

Ich benutze folgendes, wenn ich vimdiff von vim aus benutze:

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

Die Anweisung part with else ist wichtig, da Sie auf diese Weise zu Ihrer vorherigen Konfiguration zurückkehren, nachdem Sie mit dem Vergleichen fertig sind. Sie können also syntax off Und syntax on Durch die entsprechenden colorscheme Befehle ersetzen. Diese Autocmd behandelt das Ändern und Zurücksetzen einer Einstellung beim Beenden von vimdiff (ich verwende Gdiff, um genau zu sein).

3
mostruash

mein aktuelles Farbschema zeigt einige Unterschiede in Vimdiff nicht richtig an. zB wird etwas diff mit der gleichen fg/bg Farbe gezeigt

Tatsächlich habe ich festgestellt, dass der Hauptgrund für dieselbe fg/bg-Farbe ein Konflikt zwischen der Hervorhebung der Codesyntax und dem Diff-Farbschema ist. Sie können versuchen, das Diff-Farbschema zu ändern, aber es kann ein Paukenspiel sein, wenn Sie verschiedene Dateitypen öffnen (mit unterschiedlicher Hervorhebung der Codesyntax).

Eine sichere Lösung besteht darin, die Syntaxhervorhebung in vimdiff zu deaktivieren. Sie können entweder Folgendes eingeben:

:syntax off

Oder wenn Sie dies jedes Mal automatisch tun möchten, fügen Sie dies an das Ende Ihres ~/.vimrc:

if &diff
    syntax off
endif
2
wisbucky

Fügen Sie dies zu Ihrem .vimrc Hinzu, um @dean und einige andere Antworten hier zu erweitern:

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