Ich verwende Vim auch als 3-Wege-Zusammenführung mit Git und muss manchmal Änderungen sowohl von lokalen als auch von Remote-Zweigen vornehmen. kdiff3
kann dies mit ein paar Tastendrücken tun, gibt es eine Möglichkeit, dies in Vim zu tun?
Nicht genau das, was Sie gefragt haben, aber möglicherweise nützlich: Splice-Plugin: Ein Vim-Plugin zur Lösung von Konflikten während der Drei-Wege-Zusammenführung . Es hat einen schönen Demo-Screencast auf Vimeo .
Wenn Sie sich an das Standard-Vimdiff halten, können Sie eine Funktion erstellen, mit der Sie die Puffernummer für die umgebenden Fenster abrufen und :diffget
zweimal aufrufen können :
*:diffg* *:diffget*
:[range]diffg[et] [bufspec]
Modify the current buffer to undo difference with another
buffer. If [bufspec] is given, that buffer is used. If
[bufspec] refers to the current buffer then nothing happens.
Otherwise this only works if there is one other buffer in diff
(...)
The [bufspec] argument above can be a buffer number, a pattern for a buffer
name or a part of a buffer name. Examples:
:diffget Use the other buffer which is in diff mode
:diffget 3 Use buffer 3
:diffget v2 Use the buffer which matches "v2" and is in
diff mode (e.g., "file.c.v2")
Sie können eine Zuordnung verwenden, um den Tasten, in denen Sie verwendet wurden, einen Aufruf dieser Funktion zuzuweisen kdiff3
.
Weitere Informationen zu diesem Vimcast finden Sie hier .
yank und put können ohne Plugins oder zusätzliche Funktionen arbeiten, obwohl es vielleicht etwas weniger bequem ist als dgoderdp
Kopieren Sie einfach die benötigten Bits aus den übergeordneten Puffern und fügen Sie sie an der richtigen Stelle im zusammengeführten Puffer ein. Dies ist auch nützlich, wenn Sie nur einen Teil eines Diff-Blocks und nicht das Ganze möchten.
Manchmal müssen Sie Vim zwingen, die Diff-Hervorhebung mit zu aktualisieren :diffupdate
.
Sie können die Zeilen einfach mit Git-Konfliktmarkierungen löschen. Die folgenden zwei Methoden löschen alle Zeilen, die mit beginnen:
<<<<<<<
=======
>>>>>>>
Methode 1: Manuelles Eingeben und Ausführen eines Befehls
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d
Methode 2: Implementieren eines benutzerdefinierten Befehls
"Delete all Git conflict markers
"Creates the command :GremoveConflictMarkers
function! RemoveConflictMarkers() range
echom a:firstline.'-'.a:lastline
execute a:firstline.','.a:lastline . ' g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d'
endfunction
"-range=% default is whole file
command! -range=% GremoveConflictMarkers <line1>,<line2>call RemoveConflictMarkers()
Vim Diffget und Diffput wählen nur den einen oder anderen Zweig aus. Die einzige wirkliche Lösung außer der oben angegebenen besteht darin, beide Dateien manuell zu ziehen und in die Arbeitskopie einzufügen.