2010-03-11 24 views
9

Tôi muốn có thể chạy một lệnh mở ra một git diff trong vim, với một tab cho mỗi tệp trong bộ khác.Làm thế nào tôi có thể xem nhiều git diffs cạnh nhau trong vim

Vì vậy, nếu ví dụ tôi đã thay đổi tệp foo.txt và bar.txt trong cây đang hoạt động của mình và tôi chạy lệnh, tôi sẽ thấy vim mở bằng hai tab. Tab đầu tiên sẽ chứa sự khác biệt song song giữa foo.txt trong cây đang hoạt động của tôi và foo.txt trong kho lưu trữ, và tab thứ hai sẽ chứa một sự khác biệt song song đối với bar.txt.

Bất kỳ ai có ý tưởng nào?

Trả lời

7

Con đường tôi sẽ làm điều này (mặc dù nó không phải là một lệnh đơn)

  1. file mở với những thay đổi trong vim tab mới:

    vim -p $ (git diff --name -only)

  2. Đối với mỗi bộ đệm được diff để ĐẦU hiện tại của bạn với vcscommand vim plugin

    : VCSVimDiff

Điều này mang lại cái nhìn tốt đẹp về sự khác biệt, mặc dù không ở dạng bản vá.

Đối với bất kỳ điều gì khác tôi sẽ dính vào git diff.

EDIT

Giống như Dave viết dưới đây, bước 1 và 2 có thể được kết hợp bằng cách sử dụng

vim -p $(git diff --name-only) -c "tabdo VCSVimDiff" 
+2

Bạn có thể kết hợp nó thành một lệnh, có thể được đưa vào tập lệnh hoặc hàm hệ vỏ. (mã chưa được kiểm tra trước): vim -p $ (git diff --name-only) -c "tabdo VCSVimDiff" –

+0

Tôi đã thử cả lệnh một phần và 2 phần. Nó chỉ thực hiện sự khác biệt cho tab cuối cùng được mở. Các tab khác phải có: VCSVimDiff gọi chúng. Giải pháp? .. Tôi muốn nhận được tất cả các tab chạy diffs. – Scoobie

1

Mặc dù nó không thực hiện chính xác những gì bạn muốn, git difftool có lẽ là lựa chọn tốt nhất của bạn . Hành vi của hộp thư từ 'git difftool --tool = vimdiff --no-prompt HEAD' là khởi động vimdiff tuần tự cho mỗi tệp trong thư mục làm việc với các thay đổi.

3

Phỏng theo câu trả lời của Benjamin Bannier + Dave Kirby ở trên cho người dùng chạy trốn.

Bởi vì tôi sử dụng fugitive.vim, tôi thích ở trên đối với trường hợp sử dụng thường xuyên nhất của tôi, nhìn vào diff giữa 2 cam kết cuối cùng:

vim -p $(git diff --name-only HEAD~1 HEAD) -c "tabdo :Gdiff HEAD~1" 

tải tất cả những thay đổi vào các tab là tốt hơn rất nhiều hơn là thực hiện tuần tự với git difftool.

0

Plugin đơn giản này đã hoạt động với tôi: TabMultiDiff. Về cơ bản, nó tạo ra một tab khác cho mỗi cặp tệp được chuyển tới vim. Tab được đặt tên theo tệp thứ hai trong mỗi cặp.

Lưu ý rằng không phải là plugin manager compatible, vì vậy bạn cần phải cài đặt thủ công bằng cách sao chép tab-multi-diff.vim đến .vim/plugin.

Đây là ảnh chụp màn hình so sánh hai cặp tệp đơn giản (aaa/aab và aac/aad). Lưu ý rằng tôi cũng sử dụng vim-scripts/diffchar.vim đó là lý do tại sao các ký tự riêng lẻ được tô sáng. enter image description here

Các vấn đề liên quan