Xem tất cả `git diffs` với vimdiff


209

Tôi thiết lập git diffđể gói vào vimdiff, sử dụng " Git Diff với Vimdiff " làm hướng dẫn và nó hoạt động như mong đợi trừ khi có nhiều tệp có thay đổi.

Khi có nhiều tệp có thay đổi và tôi chạy git diff, nó sẽ mở tệp đầu tiên và sau khi thoát phiên bản đầu tiên của vimdiff, tôi được trình bày với thông báo sau:

external diff died, stopping at filename

Đây là một hành vi hoàn toàn khác so với tôi đã từng. Tôi đã có một thiết lập tương tự trong quá khứ với SVN và, khi khác với nhiều tệp, tôi sẽ xem lại tệp đầu tiên, sau đó viết và thoát sử dụng :wqvà tệp tiếp theo có sự khác biệt sẽ mở ra.

Đây không phải là trường hợp với Git. Tôi đã thử :n[ext], nhưng làm như vậy không lấp đầy cửa sổ bên trái với tệp gốc để nó có thể khác với phiên bản sửa đổi.

Câu trả lời:


337
git config --global diff.tool vimdiff
git config --global difftool.prompt false
git config --global alias.d difftool

git dmang lại hành vi dự kiến, nhập các :wqchu kỳ vim vào tệp tiếp theo trong tập thay đổi.


22
Chỉ hai xu của tôi: Tôi đã dfbí danh diffdtbí danh difftool. Ngoài ra, gõ :qavào Vim sẽ chuyển sang tập thay đổi tiếp theo mà không lưu bất cứ điều gì.
JC Yamokoski

2
Giải pháp này rất tuyệt ngoại trừ khi lưu thay đổi, bạn phải gõ ": w!" thay vì: w
Asenar

2
@jonyamo Đặt bí danh phải luôn dựa trên tần suất chúng ta sử dụng một số lệnh. Tôi thường sử dụng git diffhơn git difftool. Vì vậy, tôi đã đặt bí danh dcho 'diff' và 'dt' to Difftool '. Khả năng sử dụng là vấn đề hơn là tạo bí danh với mô hình.
Habeeb Perwad

Làm thế nào để làm cho "git diff" sử dụng vimdiff?, Câu trả lời này khiến tôi sử dụng bí danh. Nếu tôi bí danh cho "diff" không hoạt động.
Rombus

6
@Asenar "Giải pháp này rất hay ngoại trừ khi lưu thay đổi, bạn phải nhập :w!thay vì :w". Đó là bởi vì git gọi vimdiffvới -Rtùy chọn. Bạn có thể ghi đè lên nó với git config --global difftool.vimdiff.cmd 'vimdiff "$LOCAL" "$REMOTE"'. Điều đó sẽ mở vimdiff trong chế độ có thể ghi.
wvducky

103

Bạn có thể thử git difftool, nó được thiết kế để làm công cụ này.

Trước tiên, bạn cần cấu hình công cụ diff để vimdiff

git config diff.tool vimdiff

Sau đó, khi bạn muốn khác, chỉ cần sử dụng git difftoolthay vì git diff. Nó sẽ làm việc như bạn mong đợi.


1
Sắp đến rồi! Sửa đổi một chút đó chính xác là những gì tôi đang tìm kiếm. +1 mặc dù!
chuckg

1
Sự hợp nhất vimdiff gần đây đã được cập nhật: git.kernel.org/?p=git/ mẹo (và một vài cam kết khác, nhưng đó là một cam kết lớn nhất). Không chắc chắn khi phát hành bảo trì tiếp theo, nhưng nếu bạn sẵn sàng xây dựng từ git.git, các bản nâng cấp sẽ là của bạn!
Cascabel

21
Git accepts kdiff3, tkdiff, meld, xxdiff, emerge, vimdiff, gvimdiff, ecmerge,
and opendiff as valid diff tools. You can also set up a custom tool. 

git config --global diff.tool vimdiff
git config --global diff.tool kdiff3
git config --global diff.tool meld
git config --global diff.tool xxdiff
git config --global diff.tool emerge
git config --global diff.tool gvimdiff
git config --global diff.tool ecmerge

3
Bạn trả lời cho mergetool, không phải là Difftool. Nhưng nó vẫn là một câu trả lời hữu ích. +1.
dotancohen

@dotancohen Thực sự Cảm ơn tôi chưa bao giờ nhận thấy rằng về lỗi lầm ngớ ngẩn bây giờ tôi có thể chỉnh sửa câu trả lời của mình.
Nanhe Kumar

1
@NanheKumar, @dotancohen, thay thế mergebằng difftrong các câu trả lời ở trên sẽ thực hiện các mẹo, tức là git config --global diff.tool vimdiff .
Sẽ

2

Đối với những người muốn sử dụng một công cụ khác không được liệt kê trong git, hãy nói với nvim. đây là những gì tôi đã sử dụng:

git config --global alias.d difftool -x <tool name>

Trong trường hợp của tôi, tôi đặt <tool name>để nvim -dvà gọi lệnh diff với

git d <file>
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.