2013-06-09 26 views
9

Tôi không thể cấu hình git để làm theo yêu cầu của tôi:Làm thế nào để thiết lập màu git diff với vim như một pager

  1. sử dụng vim như một pager diff
  2. giữ màu sắc cho diff khi thêm các tập tin trong chế độ tương tác

My ~/.gitconfig thiết lập:

[color] 
    ui = auto 
    # diff = false 

[pager] 
    diff = vim - 

với cấu hình này, chế độ tương tác cho git add --interactive tạo ra màu như mong đợi:

interactive adding

Nhược điểm của việc này là diff trong vim là hỏng. Xem kết quả của git diff:

diff using vim

Khi sử dụng git diff | vim - màu sắc là OK nhưng tôi quá lười biếng để gõ lệnh đầy đủ. Có phương pháp nào được biết để bảo toàn màu sắc trong cả hai trường hợp không?

+0

Xem http://stackoverflow.com/questions/39470081/vim-check- if-running-as-a-pager về cách tự động thực hiện: AnsiEsc khi tải. – 0fnt

Trả lời

11

Bạn cần cài đặt AnsiEsc plugin và chạy :AnsiEsc ngay sau khi tải tệp. Bạn có thể đặt máy nhắn tin thành vim -c AnsiEsc - để thực hiện việc này.

Ngoài ra, sử dụng vim nổi bật riêng: bằng cách sử dụng phương pháp tương tự (-c command) chạy

%sm/\e.\{-}m//g 
set ft=diff 

:

diff = "vim -c '%sm/\\e.\\{-}m//g' -c 'set ft=diff' -" 
+2

hoàn hảo, cảm ơn! Tôi đã sử dụng một phiên bản được cải thiện một chút để đặt con trỏ ở đầu bộ đệm sau khi thay thế. Nó cũng bỏ qua các khác biệt rỗng: _diff = "vim -c '% sm/\\ e. \\ {-} m // ge' -c 'đặt ft = diff' -c 'bình thường gg' -" _ –

+0

Tôi đã thêm -c 'setlocal buftype = nofile' để ngăn chặn vim khỏi phàn nàn về những thay đổi chưa được lưu khi cố gắng: q – notlesh

0

Hãy thử các thiết lập này:

git config --global diff.tool vimdiff 
git config --global merge.tool vimdiff 

git config --global difftool.prompt false 
4

Bạn có hai lựa chọn thay thế ở đây.

Use Vimdiff as a difftool

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

[diff] 
    tool = vimdiff 
[difftool] 
    prompt = false 
[alias] 
    d = difftool # Not needed, just a convenience. $ git difftool, still works. 

Regular Git diff, nhưng với highlithing màu.

$ git config --global color.ui true 

[color] 
    ui = true 

Hiện tại, bạn có kết hợp lạ. Tất nhiên bạn có thể sử dụng cả hai, nhưng pager đang làm rối tung mọi thứ.
Lý do bạn nhận được ^[32m v.v. là vì bạn đang cố gắng đọc màu vỏ trong Vim. Điều này không hoạt động.

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