Gibt es eine Möglichkeit, beides zu nehmen, wenn Sie Vim als Zusammenführungswerkzeug verwenden?

11

Ich verwende Vim auch als 3-Wege-Zusammenführung mit Git und muss manchmal Änderungen sowohl von lokalen als auch von Remote-Zweigen vornehmen. kdiff3kann dies mit ein paar Tastendrücken tun, gibt es eine Möglichkeit, dies in Vim zu tun?

Synapse
quelle

Antworten:

6

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 :diffgetzweimal 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 .

mMontu
quelle
3

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.

8bittree
quelle
0

So kombinieren Sie Änderungen sowohl vom Zielzweig als auch vom Zusammenführungszweig in einem einzigen Befehl:

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.

user3751385
quelle
Geben Sie einen Grund an, wenn Sie abstimmen wollen.
user3751385
Das ist alles was ich tue - lösche einfach die Markierungen.
Aaron McMillin