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:
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 vonconflictMiddle
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 alsconflictEnd
gemäß aufgenommen Die FunktionSynStack()
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
- Konfliktmarker.vim kann die Marker selbst hervorheben. Es bietet auch Sprünge und Möglichkeiten, sie zu beheben.
- mein eigenes ConflictDetection-Plugin erkennt und hebt die gesamten Abschnitte hervor (über Syntaxhervorhebung); Ein Companion ConflictMotions-Plugin bietet Bewegungen und Befehle zur Lösung.