Tải các màu sắc khác nhau khi sử dụng vimdiff


137

Làm thế nào để tải một màu sắc khác nhau khi làm vimdiff.

Tôi muốn điều này bởi vì màu sắc hiện tại của tôi không hiển thị một số khác biệt chính xác trong vimdiff, For. ví dụ một số diff được hiển thị với cùng màu fg / bg. Điều này làm cho nó rất khó để hiểu khác biệt. Vì vậy, mỗi khi tôi làm vimdifftôi phải làm:colorscheme some_other_scheme

Điều này có thể được thực hiện trong .vimrctập tin?

Câu trả lời:


118

Nếu bạn đang gọi vimdifftừ dòng lệnh, hãy đặt phần sau vào .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Nếu bạn đang sử dụng vimdiff từ bên trong vim, bạn muốn một trong hai phải ghi đè lên các lệnh bạn sử dụng để bắt đầu / dừng nó (ví dụ diffthis, diffoff) sử dụng :cnoreabbr(đó cũng là một Plugin ) hoặc sử dụng một autocommand:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre được gọi trước khi lọc thông qua một chương trình bên ngoài (tiện ích diff) và &diff-option được đặt bởi vim khi nó chuyển sang chế độ diff (trong số các chương trình khác, xem :help diff)

Tôi không chắc chắn nên sử dụng chế độ tự động nào để trở về màu sắc ban đầu.


Có thể gọi nhiều hơn một lệnh giữa hai ống "|" không? Tôi sẽ quan tâm đến việc quay lại màu sắc ban đầu sau khi sử dụng vimdiff từ vim nữa ...
Ai đó vẫn sử dụng bạn MS-DOS vào

1
Các đường ống là sự thay thế cho các dòng mới, tương tự như ;trong các tập lệnh shell, vì vậy bạn chỉ cần thêm 'dòng' mới:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemesẽ xem qua các đường dẫn thời gian chạy của bạn cho color/some_other_scheme.vim. Bạn có thể thấy runtimepath của bạn :set runtimepath?từ bên trong vim.
pabo

1
Đối với người dùng bảng điều khiển (như bản thân tôi), tôi thấy 'sinh động' là màu sắc tốt nhất (ngoài bộ cài đặt mặc định) để duy trì độ tương phản giữa các khác biệt được tô sáng và cú pháp được tô sáng, ít nhất là cho các tập lệnh shell. Một giây gần gũi là 'buổi tối.' Mong rằng sẽ giúp.
Conrad Meyer

Vấn đề của tôi luôn là sự thiếu tương phản với tô sáng cú pháp, làm mất toàn bộ khối văn bản trong màu khác. Tôi đã sử dụng ': cú pháp tắt' khi cần trong quá khứ, nhưng chỉ cần thêm nó vào .vimrc của tôi trong vị từ 'if & diff' và hiện đã lưu một số tổ hợp phím
qneill

166

Tôi không biết tại sao vim sử dụng nhiều màu sắc để làm nổi bật, nó không thực sự giúp bạn tìm hiểu chuyện gì đang xảy ra.

Tôi đã sửa đổi màu sắc của mình để chỉ sử dụng một màu để làm nổi bật (với màu khác để hiển thị nơi có sự khác biệt trong một dòng) và nó đã tạo ra sự khác biệt.

Trước

nhập mô tả hình ảnh ở đây

Sau

colorscheme_sc mãi

Tôi đã làm điều này bằng cách thêm phần sau vào cuối tập tin colorscheme ( ~/.vim/colors/mycolorscheme.vim).

highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
  • cterm - thiết lập phong cách
  • ctermfg - đặt màu văn bản
  • ctermbg - thiết lập đánh dấu
  • DiffAdd - dòng đã được thêm vào
  • DiffDelete - dòng đã bị xóa
  • DiffChange - một phần của dòng đã được thay đổi (đánh dấu toàn bộ dòng)
  • DiffText - phần chính xác của dòng đã thay đổi

Tôi đã sử dụng liên kết này như một tài liệu tham khảo cho các số màu.

Lưu ý: Tôi không đặt các tùy chọn gui vì tôi sử dụng một màu khác nhau cho macvim / gvim


1
Cảm ơn! Điều này có vẻ tốt hơn nhiều!
Vitaluha

4
Giống như pabo đã nói trong một nhận xét khác, bạn có thể cần đặt tên tệp sơ đồ màu của mình như mycolorscheme.vim, với phần mở rộng .vim ở cuối.
David Winiecki

Cảm ơn! Tiểu nit: Tôi nghĩ rằng bạn đã vô tình làm cho tất cả "guibg" màu đỏ. Bạn có dự định có hai màu - một cho DiffText và một cho phần còn lại không?
Kapil Arya

6
Tại sao khi sử dụng số (ctermbg = 17) màu không hoạt động, nhưng khi sử dụng từ (ctermbg = màu xanh) - nó hoạt động? .. giải pháp: thiết bị đầu cuối chỉ có 8 màu 1-7
Ricky Levi

3
MacOS sử dụng iTerm2. Bất kể tôi đã làm gì, tôi đã nhận được: Không thể tìm thấy lược đồ màu '~ / .vim / colors / mycolorscheme' Sao chép mã màu trực tiếp giữa câu lệnh "if & diff" trong ~ / .vimrc đã thực hiện thủ thuật này.
Tony Barganski

59

Để trả lời câu hỏi của riêng tôi:

if &diff
    colorscheme evening
endif

Màu sắc tuyệt vời cho tôi!
skytree

22

Tôi thấy cách dễ nhất là dán tập tin này vào tập tin ~ / .vimrc của tôi:

" Fix the difficult-to-read default setting for diff text highlighting.  The
" bang (!) is required since we are overwriting the DiffText setting. The highlighting
" for "Todo" also looks nice (yellow) if you don't like the "MatchParen" colors.
highlight! link DiffText MatchParen

3
Giải pháp tuyệt vời! Tôi chọn Todothay MatchParenvì vì nó nổi bật hơn.
Mihai Capotă

18

Nếu bạn gặp phải các phối màu không thể đọc được (không chỉ xấu, mà không thể đọc được như văn bản màu trắng trên nền màu hồng), cách khắc phục dễ dàng có thể là sử dụng 16 màu thay vì 256 màu. Sau đó, bạn không phải lộn xộn với các bảng màu.

Lý do là bảng màu vimdiff mặc định được gán DiffChange bglà "LightMagenta", được ánh xạ sang màu hồng rất nhạt với 256 màu. Điều đó là không thể đọc được với văn bản màu trắng. Với 16 màu, "LightMagenta" được ánh xạ tới màu đỏ tươi đậm, văn bản màu trắng hiển thị tốt hơn nhiều.

Bạn có thể làm một bài kiểm tra nhanh bằng cách làm một cái gì đó như thế này:

vimdiff <file1> <file2>
:set t_Co?    " print current setting (256 by default)
:highlight    " print highlighting scheme
:set t_Co=16  " set to 16 colors
:highlight    " print highlighting scheme

Ảnh chụp màn hình 256 màu nhập mô tả hình ảnh ở đây

Ảnh chụp màn hình 16 màu nhập mô tả hình ảnh ở đây

Như bạn có thể thấy, 16 màu dễ đọc hơn nhiều, không thay đổi bảng màu.

Để làm điều này vĩnh viễn, bạn có thể thêm set t_Co=16vào.vimrc


2
Cảm ơn rất nhiều về mẹo này, mặc dù trong trường hợp của tôi, nó là cách khác. t_Cođã được đặt thành 8, tăng nó lên set t_Co=256rất nhiều khả năng đọc.
Olaf Dietsche

11

molokai: phối màu molokai github: phối màu github Hai chủ đề github và molokai đều đẹp như nhau.

curl -fLo ~/.vim/colors/molokai.vim --create-dirs https://raw.githubusercontent.com/tomasr/molokai/master/colors/molokai.vim
curl -fLo ~/.vim/colors/github.vim --create-dirs https://raw.githubusercontent.com/endel/vim-github-colorscheme/master/colors/github.vim

Đặt mã sau vào ~ / .vimrc của bạn, bạn có thể chọn github hoặc molokai (một dòng bắt đầu bằng "là một nhận xét):

if &diff
"   colorscheme github
    colorscheme molokai
endif

Giải pháp yêu thích mới của tôi cho vấn đề cũ này!
Stablesog

10

Đối với những người sử dụng chủ đề Solarized rất xuất sắc, có một tùy chọn bật khả năng hiển thị cao cho chế độ khác:

" ~/vim.rc
" Set high visibility for diff mode
let g:solarized_diffmode="high"

"bình thường" nhập mô tả hình ảnh ở đây

"cao" nhập mô tả hình ảnh ở đây

"Thấp" nhập mô tả hình ảnh ở đây


1
Bạn sẽ không có một ảnh chụp màn hình về sự khác biệt này?
Victor Zamanian

7

màu sắc hiện tại của tôi không hiển thị một số khác biệt đúng trong vimdiff, For. ví dụ: một số khác biệt được hiển thị với cùng màu fg / bg

Trên thực tế, tôi đã thấy rằng thủ phạm chính cho cùng màu fg / bg là do xung đột giữa tô sáng cú pháp mã và màu sắc khác nhau. Bạn có thể thử thay đổi màu sắc khác nhau, nhưng nó có thể là một trò chơi vô bổ khi bạn mở các loại tệp khác nhau (với tô sáng cú pháp mã khác nhau).

Một giải pháp chắc chắn là vô hiệu hóa cú pháp tô sáng trong vimdiff. Bạn có thể gõ:

:syntax off

Hoặc nếu bạn muốn tự động làm điều này mỗi lần, thì hãy thêm phần này vào cuối ~/.vimrc:

if &diff
    syntax off
endif

6

Một cách tiếp cận khác là sửa lỗi phối màu đó.

Theo như tôi biết, thường có bốn nhóm nổi bật liên quan đến diff'ing: DiffAdd, DiffChange, DiffDelete và DiffText. Nếu bạn không muốn bị làm phiền về cú pháp hoặc điều chỉnh màu theo ý thích của mình, bạn có thể sao chép lược đồ màu mặc định của mình dưới tên khác thành ~ / .vim / colors (tạo thư mục nếu nó không tồn tại) và sao chép dán các lệnh tương ứng: hi từ bảng màu thay thế của bạn vào cuối bảng màu tùy chỉnh mới của bạn, tùy ý nhận xét bất kỳ câu lệnh liên quan đến khác nào khác trong đó.

Và nếu kết quả là một sự cải thiện rõ ràng, hãy gửi email đến người duy trì bảng màu của bạn với những thay đổi của bạn và yêu cầu anh ấy xem xét vấn đề. Có một cơ hội tốt rằng anh ấy sẽ cảm ơn bạn vì sự quan tâm của bạn và anh ấy sẽ sửa chữa bảng màu của mình để những người dùng khác cũng được hưởng lợi ..


Các nhà phát triển vim đã nhận được rất nhiều khiếu nại và đề xuất về cách màu sắc mặc định xuất hiện trên nền tối, nhưng thật đáng buồn là điều này vẫn chưa được khắc phục.
Stefan Lasiewski

6

/etc/vim/vimrchoặc ~/.vimrc: Nếu sử dụng nền tối trong khu vực chỉnh sửa và tô sáng cú pháp cũng bật tùy chọn nàyset background=dark


3

Tôi sử dụng như sau khi sử dụng vimdiff từ bên trong vim:

au BufEnter,BufNew * if &diff | syntax off | else | syntax on | endif

Phần với câu lệnh khác rất quan trọng vì đó là cách bạn quay lại cấu hình trước đó sau khi bạn hoàn thành việc khác. Vì vậy, bạn có thể thay thế syntax offsyntax onvới các colorschemelệnh tương ứng . Autocmd này xử lý thay đổi cài đặt và hoàn nguyên nó khi thoát vimdiff (tôi sử dụng Gdiffđể chính xác).


3

Để mở rộng trên @dean và một số câu trả lời khác tại đây, hãy thêm câu này vào .vimrc:

if &diff
  " colorscheme evening
  highlight DiffAdd    cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffDelete cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffChange cterm=bold ctermfg=10 ctermbg=17 gui=none guifg=bg guibg=Red
  highlight DiffText   cterm=bold ctermfg=10 ctermbg=88 gui=none guifg=bg guibg=Red
endif
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.