Também estou usando o Vim como uma combinação de três vias com o Git e, às vezes, preciso fazer alterações nas ramificações local e remota. kdiff3
você pode fazer isso pressionando algumas teclas, existe uma maneira de fazer isso no Vim?
Não é exatamente o que você pediu, mas pode achar útil: Plug-in do Splice: um plug-in do Vim para resolver conflitos durante a fusão de três vias . Ele tem um ótimo screencast de demonstração no Vimeo .
Se você preferir o vimdiff padrão, poderá criar uma função para recuperar o número do buffer das janelas adjacentes e usá-los para ligar :diffget
duas vezes:
*: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")
Você poderia usar um mapeamento para atribuir uma chamada a essa função às teclas em que foi usado kdiff3
.
Você pode encontrar mais informações sobre este vimcast .
yank e put podem funcionar sem plugins ou funções extras, embora seja, talvez, um pouco menos conveniente que dgoudp
Apenas copie os bits necessários dos buffers pai e cole-os no local correto no buffer mesclado. Isso também é útil se você deseja apenas parte de um bloco diff, e não a coisa toda.
Às vezes, você pode precisar forçar o Vim a atualizar o diferencial com :diffupdate
.
Você pode simplesmente excluir as linhas com marcadores de conflito do Git. Os dois métodos a seguir excluirão todas as linhas que começam com:
<<<<<<<
=======
>>>>>>>
Método 1: inserindo e executando manualmente um comando
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d
Método 2: implementando um comando definido pelo usuário
"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 e diffput escolherão apenas um ramo ou outro. Portanto, a única solução real, além da mencionada acima, é puxar e colar manualmente os dois arquivos na cópia de trabalho.