Tôi đang sử dụng Vim dưới dạng hợp nhất 3 chiều với Git và đôi khi cần thực hiện các thay đổi từ cả hai nhánh cục bộ và từ xa. kdiff3
có thể làm điều này với một vài lần nhấn phím, có cách nào để làm điều này trong Vim không?
Tôi đang sử dụng Vim dưới dạng hợp nhất 3 chiều với Git và đôi khi cần thực hiện các thay đổi từ cả hai nhánh cục bộ và từ xa. kdiff3
có thể làm điều này với một vài lần nhấn phím, có cách nào để làm điều này trong Vim không?
Câu trả lời:
Không chính xác những gì bạn đã hỏi, nhưng có thể thấy điều này hữu ích: Plugin Splice: một plugin Vim để giải quyết xung đột trong quá trình hợp nhất ba chiều . Nó có một bản screencast demo đẹp trên Vimeo .
Nếu bạn sẽ gắn bó với vimdiff mặc định, bạn có thể tạo một hàm để lấy số bộ đệm cho các cửa sổ hướng xuống và sử dụng chúng để gọi :diffget
hai lần:
*: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")
Bạn có thể sử dụng ánh xạ để gán một cuộc gọi cho chức năng này cho các phím bạn đã sử dụng kdiff3
.
Bạn có thể tìm thêm thông tin về vimcast này .
yank và put có thể hoạt động mà không cần bất kỳ plugin hay chức năng bổ sung nào, mặc dù vậy, có lẽ, nó kém tiện lợi hơn một chút so với dghoặcdp
Chỉ cần sao chép các bit cần thiết từ bộ đệm chính và dán chúng vào vị trí chính xác trong bộ đệm được hợp nhất. Điều này cũng hữu ích nếu bạn muốn chỉ là một phần của khối khác, hơn là toàn bộ.
Đôi khi, bạn có thể cần buộc Vim cập nhật các điểm nổi bật khác với :diffupdate
.
Bạn chỉ có thể xóa các dòng bằng các dấu xung đột Git. Hai phương thức sau sẽ xóa tất cả các dòng bắt đầu bằng:
<<<<<<<
=======
>>>>>>>
Phương pháp 1: Nhập thủ công và thực thi lệnh
:g/^<\{7}\|^|\{7}\|^=\{7}\|^>\{7}/d
Phương pháp 2: Thực hiện lệnh do người dùng xác định
"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 và diffput sẽ chỉ chọn một nhánh này hoặc nhánh kia. Vì vậy, giải pháp thực sự duy nhất ngoài giải pháp được đưa ra ở trên là tự tay kéo và dán từ cả hai tệp vào bản sao làm việc.