Wenn git eine 3-Wege-Zusammenführung ausführt und einen Konflikt aufweist es kann nicht aufgelöst werden, es markiert diesen Bereich der Datei wie folgt:

No unresolvable conflicts here <<<<<<< HEAD xyz ||||||| parent of ... abc ======= 123 >>>>>>> ... 

Gibt es eine Möglichkeit (und wenn ja, wie) zu ändern die Hintergrundfarbe dieser 3 „Abschnitte“:

  • <<<<<<< HEAD durch die Zeile vor ||||||| parent of ...
  • ||||||| parent of ... durch die Zeile vor =======
  • Die Zeile nach ======= durch die Zeile >>>>>>> ...

(BEARBEITEN: Die Frage dreht sich darum, ob es eine Möglichkeit gibt, bestimmte Zeilen abhängig von anderen hervorzuheben Zeilen. xyz wird normalerweise nicht hervorgehoben, aber da es zwischen <<<<<<< und ||||||| es würde hervorgehoben.)

Mit der Fähigkeit, auch andere Sätze von Konfliktmarkierungen zu verarbeiten?

Verwenden der neuesten Version von vim, die zum Zeitpunkt eines Kommentars verfügbar war. Ab sofort 8.1.1183.

Ich verwende einen schwarzen Hintergrund und 256 Farben in meinem Terminal. Ich dachte, es wäre schön, diese Abschnitte mit den dunkelsten R / G / B / C / M / Y-Farben zu versehen, damit sie bei der Hervorhebung der Syntax keine großen Probleme verursachen. (Apropos ANSI-Farben 52, 22, 17, 23, 53 und 58 – nicht die Farben 1-6.)

Kommentare

  • Eine einfache Google-Suchabfrage hätte ausgereicht: github.com/rhysd/conflict-marker.vim
  • @klaus, ich hätte erwähnen sollen, dass ich mir dieses Plugin angesehen habe, während ich viel gemacht habe Google-Suche. Dieses Plugin hebt die Konfliktmarkierungen selbst hervor. ' hebt nicht auch den Text hervor, mit dem diese Markierungen in anderen Zeilen verknüpft sind. Ich denke, das große Problem ist, wenn es vorhanden ist ' ist eine Möglichkeit, bestimmte Zeilen abhängig von anderen Zeilen hervorzuheben. In meinem Beispiel bedeutet dies, dass xyz normalerweise nicht hervorgehoben wird, aber da dies der Fall ist ' s zwischen <<<<<<< und ||||||| Ich möchte, dass es hervorgehoben wird.

Antwort

In Ihrer Vim-Konfiguration können Sie Folgendes tun (ändern Sie die Farben und Stil nach Ihren Wünschen):

function! ConflictsHighlight() abort syn region conflictStart start=/^<<<<<<< .*$/ end=/^\ze\(=======$\||||||||\)/ syn region conflictMiddle start=/^||||||| .*$/ end=/^\ze=======$/ syn region conflictEnd start=/^\(=======$\||||||| |\)/ end=/^>>>>>>> .*$/ highlight conflictStart ctermbg=red ctermfg=black highlight conflictMiddle ctermbg=blue ctermfg=black highlight conflictEnd ctermbg=green cterm=bold ctermfg=black endfunction augroup MyColors autocmd! autocmd BufEnter * call ConflictsHighlight() augroup END 

Dies ergibt Folgendes:

Geben Sie hier die Bildbeschreibung ein.

Ist es das, wonach Sie suchen?

Kommentare

  • Das ' ist absolut das, wonach ich ' bin. Ich ' habe allerdings einige Kuriositäten mit dem Vimscript. Wenn ich Ihr Beispiel eingebe, sieht es genauso aus wie das Bild, das Sie gepostet haben. Wenn ich Ihr Beispiel speichere und dann die neue Datei neu bearbeite, gerät sie furchtbar aus dem Ruder. (vim 8.1.1186.) Noch seltsamer, wenn ich dann alle Zeilen in einer vorhandenen Datei lösche, die seltsam angezeigt werden, und ihren Inhalt erneut einfüge, wird ' immer noch falsch angezeigt. i.ibb.co/jvGMH6t/wtfvim.jpg
  • Die Verwendung in einem tatsächlichen Zusammenführungsszenario löst eine noch seltsamere Färbung aus als das Bild I. verknüpft mit: conflictStart wird richtig hervorgehoben; der ||||||| Teil von conflictMiddle in Rot, der Rest der Zeile jedoch in Blau, wie er sein sollte; die ======= in rot; die >>>>>>> .* -Linie in Gelb (wo ist Gelb hineingekommen, gibt es kein Gelb); und der Rest der Datei, die ' überhaupt nicht Teil des Konflikts sein sollte, wird immer noch als conflictEnd gemäß aufgenommen Die Funktion SynStack() von stackoverflow.com/questions/30247603
  • Verwenden Sie ebenfalls die aktuelle Funktion Zusammenführungsszenario: Wenn ich den Inhalt in eine neue Datei kopiere / einfüge, wird er wie erwartet angezeigt. Sobald er jedoch ' gespeichert und vim neu gestartet wird, wird er falsch angezeigt.
  • In einem tatsächlichen Zusammenführungsszenario können Sie die ursprüngliche Diff-Färbung mit :diffoff deaktivieren, wobei nur der Dateityp ' s übrig bleibt Syntax-Highlight. Ich werde ein bisschen spielen, um Ihren ersten Fall zu sehen.
  • Ack, sorry, hatte vergessen, dass ich das Conflict_marker-Plugin installiert hatte, nachdem ich es vor meinem Beitrag ausprobiert hatte, was widersprüchlich war und das Problem verursachte. Entfernen Sie das und haben Sie das Problem nicht mehr.

Antwort

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.