Có cách nào để người dùng mất cả hai khi sử dụng Vim làm công cụ hợp nhất không?


11

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. kdiff3có 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:


6

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


3

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.


0

Để kết hợp các thay đổi từ cả hai nhánh đích và hợp nhất trong một lệnh:

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 diffgetdiffput 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.


Đưa ra một lý do nếu bạn sẽ downvote.
dùng3751385

Đây là tất cả những gì tôi làm - chỉ cần xóa các điểm đánh dấu.
Aaron McMillin
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.