Laden Sie bei Verwendung von vimdiff ein anderes Farbschema


137

So laden Sie dabei ein anderes Farbschema vimdiff.

Ich möchte dies, weil das aktuelle Farbschema einige Unterschiede in vimdiff, z. zB wird ein Diff mit der gleichen fg / bg-Farbe angezeigt. Dies macht es sehr schwer, den Unterschied zu verstehen. Also jedes Mal, wenn ich eine machevimdiff , etwas tun:colorscheme some_other_scheme

Kann dies in einer .vimrcDatei erfolgen?

Antworten:


118

Wenn Sie vimdiffüber die Befehlszeile anrufen , geben Sie Folgendes in Ihre Datei ein .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Wenn Sie vimdiff aus vim sind, dann würden Sie müssen entweder die Befehle außer Kraft setzen Sie starten verwenden / stoppen es (zB diffthis, diffoff) mit :cnoreabbr(es gibt auch ein Plugin ) oder einen automatischen Befehl verwenden:

au FilterWritePre * if &diff | colorscheme xyz | endif

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

Ich bin mir nicht sicher, welchen Autobefehl ich verwenden soll, um zum ursprünglichen Farbschema zurückzukehren.


Ist es möglich, mehr als einen Befehl zwischen den beiden Pipes "|" aufzurufen? Ich wäre daran interessiert, zum ursprünglichen Farbschema zurückzukehren, nachdem ich auch vimdiff von vim verwendet habe ...
Jemand verwendet Sie immer noch MS-DOS

1
Die Pipes sind Ersatz für Zeilenumbrüche, ähnlich wie ;in Shell-Skripten. Sie können also einfach neue Zeilen hinzufügen:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemewird Ihre Laufzeitpfade nach suchen color/some_other_scheme.vim. Sie können Ihre Laufzeitpfade :set runtimepath?in vim anzeigen .
Pabo

1
Für Konsolenbenutzer (wie mich) war 'vividchalk' das beste Farbschema (aus dem Standardinstallationssatz), um den Kontrast zwischen hervorgehobenen Unterschieden und hervorgehobener Syntax aufrechtzuerhalten, zumindest für Shell-Skripte. Eine knappe Sekunde war "Abend". Hoffentlich hilft das.
Conrad Meyer

Mein Problem ist immer der fehlende Kontrast zur Syntaxhervorhebung, bei der ganze Textblöcke in unterschiedlicher Farbe verloren gehen. Ich habe in der Vergangenheit nach Bedarf ': syntax off' verwendet, es aber einfach zu meiner .vimrc im Prädikat 'if & diff' hinzugefügt und jetzt einige Tastenanschläge gespeichert
qneill

166

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

Ich habe mein Farbschema so geändert, dass nur eine Farbe zum Hervorheben verwendet wird (mit einer anderen, um zu zeigen, wo es einen Unterschied innerhalb einer Linie gibt), und es hat den Unterschied gemacht.

Vor

Geben Sie hier die Bildbeschreibung ein

Nach dem

colorscheme_screenshot

Dazu habe ich am Ende meiner Farbschemadatei ( ~/.vim/colors/mycolorscheme.vim) Folgendes hinzugefügt .

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 - Stellen Sie die Textfarbe ein
  • ctermbg - Hervorheben einstellen
  • DiffAdd - Zeile wurde hinzugefügt
  • DiffDelete - Linie wurde entfernt
  • DiffChange - Ein Teil der Linie wurde geändert (hebt die gesamte Linie hervor)
  • DiffText - der genaue Teil der Linie, der sich geändert hat

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

Hinweis: Ich habe die GUI-Optionen nicht festgelegt, da ich für macvim / gvim ein anderes Farbschema verwende


1
Vielen Dank! Das sieht viel besser aus!
Vitaluha

4
Wie pabo in einem anderen Kommentar sagte, müssen Sie möglicherweise Ihre Farbschemadatei wie mycolorscheme.vim mit der Erweiterung .vim am Ende benennen.
David Winiecki

Vielen Dank! Minor nit: Ich denke, Sie haben versehentlich alle "Guibg" rot gemacht. Wollten Sie zwei Farben haben - eine für DiffText und eine für den Rest?
Kapil Arya

6
Warum funktioniert die Verwendung von Zahlen (ctermbg = 17) nicht, aber die Verwendung von Wörtern (ctermbg = blau)? .. Lösung: Terminal hat nur 8 Farben 1-7
Ricky Levi

3
MacOS mit iTerm2. Egal was ich getan habe, ich habe: Farbschema '~ / .vim / colours / mycolorscheme' kann nicht gefunden werden. Das Kopieren der Farbcodes direkt zwischen der Anweisung "if & diff" in ~ / .vimrc hat den Trick ausgeführt.
Tony Barganski

59

Um meine eigene Frage zu beantworten:

if &diff
    colorscheme evening
endif

Tolle Farbe für mich!
Skytree

22

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

3
Tolle Lösung! Ich habe Todostatt gewählt, MatchParenweil es mehr auffällt.
Mihai Capotă

18

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

Der Grund dafür ist, dass das Standard-Vimdiff-Farbschema zugewiesen wird DiffChange bg "LightMagenta" zugewiesen wird, das in 256 Farben einem sehr hellen Rosa zugeordnet wird. Das ist mit weißem Text nicht lesbar. Mit 16 Farben wird die "LightMagenta" einem fetten Magenta zugeordnet, auf dem weißer Text viel besser zur Geltung kommt.

Sie können einen kurzen Test machen, indem Sie so etwas 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 Geben Sie hier die Bildbeschreibung ein

16-farbiger Screenshot Geben Sie hier die Bildbeschreibung ein

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=16es Ihrem hinzufügen.vimrc


2
Vielen Dank für diesen Tipp, obwohl es in meinem Fall umgekehrt war. t_Cowurde auf 8 gesetzt, was set t_Co=256die Lesbarkeit enorm verbesserte.
Olaf Dietsche

11

Molokai: Molokai Farbschema Github: Github Farbschema Die beiden Themen Github und Molokai sind gleich 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

Geben Sie den folgenden Code in Ihr ~ / .vimrc ein. Sie können zwischen Github und Molokai wählen (eine Zeile, die mit einem "beginnt, ist ein Kommentar):

if &diff
"   colorscheme github
    colorscheme molokai
endif

Meine neue Lieblingslösung für dieses alte Problem!
Stabledog

10

Für Leute, die das sehr ausgezeichnete Solarized- Thema verwenden, gibt es eine Option, die die hohe Sichtbarkeit für den Diff-Modus aktiviert :

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

"normal" Geben Sie hier die Bildbeschreibung ein

"hoch" Geben Sie hier die Bildbeschreibung ein

"niedrig" Geben Sie hier die Bildbeschreibung ein


1
Sie hätten nicht zufällig einen Screenshot des Unterschieds, den dies macht?
Victor Zamanian

7

Mein aktuelles Farbschema zeigt einige Unterschiede in vimdiff nicht richtig. zB wird ein Diff mit der gleichen fg / bg-Farbe angezeigt

Tatsächlich habe ich festgestellt, dass der Hauptschuldige 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 Schlagabtausch 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 am Ende Ihres ~/.vimrc:

if &diff
    syntax off
endif

6

Ein anderer Ansatz besteht darin, dieses Farbschema zu korrigieren.

Soweit ich weiß, gibt es normalerweise vier Hervorhebungsgruppen in Bezug auf Diff'ing: 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 wahrscheinlich unter einem anderen Namen nach ~ / .vim / colours kopieren (erstellen Sie das Verzeichnis, falls es nicht vorhanden ist) und Kopieren Fügen Sie die entsprechenden: hi-Befehle aus Ihrem alternativen Farbschema in das Ende Ihres neuen benutzerdefinierten Farbschemas ein und kommentieren Sie optional andere darin enthaltene diff-bezogene Anweisungen aus.

Wenn das Ergebnis eine offensichtliche Verbesserung darstellt, 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 korrigiert, dass auch andere Benutzer davon profitieren.


Die vim-Entwickler haben zahlreiche Beschwerden und Vorschläge erhalten, wie das Standardfarbschema auf einem dunklen Hintergrund angezeigt wird. Leider wurde dies noch behoben.
Stefan Lasiewski

6

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


3

Ich verwende Folgendes, wenn ich vimdiff aus vim heraus verwende:

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

Der Teil mit der else-Anweisung ist wichtig, da Sie auf diese Weise zu Ihrer vorherigen Konfiguration zurückkehren, nachdem Sie mit dem Diff'ing fertig sind. So können Sie syntax offund syntax ondurch entsprechende colorschemeBefehle ersetzen . Dieses Autocmd behandelt das Ändern und Zurücksetzen einer Einstellung beim Beenden von vimdiff (ich verwende Gdiff, um genau zu sein).


3

Um @dean und einige andere Antworten hier zu erweitern, fügen Sie dies zu Ihrem hinzu .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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.