Vimdiff kullanırken farklı renk şeması yükleyin


137

Yaparken farklı bir renk şeması nasıl yüklenir vimdiff.

Bunu istiyorum çünkü mevcut renk şemam bazı farklılıkları doğru şekilde göstermiyor vimdiff, For. örneğin bazı farklılıklar aynı fg / bg rengiyle gösterilir. Bu, farkı anlamayı çok zorlaştırır. Bu yüzden her yaptığımda vimdiffyapmam gerek:colorscheme some_other_scheme

Bu .vimrcdosyada yapılabilir mi?

Yanıtlar:


118

Eğer arıyorsan vimdiffkomut satırından, Gözlerinde farklı aşağıdaki koymak .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Vim içinden vimdiff kullanıyorsanız, ya sen başlatmak için kullandığınız komutları geçersiz olurdu / o (örneğin durdurmak diffthis, diffoffkullanarak) :cnoreabbr(a da orada eklenti ) veya bir autocommand kullanın:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre, harici bir program (diff aracı) aracılığıyla filtrelemeden önce çağrılır ve -option, &diffdiff moduna girdiğinde vim tarafından ayarlanır (diğerleri arasında, bkz. :help diff)

Orijinal renk şemasına dönmek için hangi otomatik komutun kullanılacağından emin değilim.


İki boru arasında "|" birden fazla komut çağırmak mümkün müdür? Vim'den vimdiff'i kullandıktan sonra orijinal renk şemasına geri dönmekle ilgilenirim ...
Birisi hala sizi MS-DOS

1
Borular, ;kabuk betiklerinde olduğu gibi satırsonu satırlarının yerine geçer , bu nedenle yeni 'satırlar' ekleyebilirsiniz:if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith

1
colorscheme some_other_schemeiçin çalışma zamanı yollarınıza bakacak color/some_other_scheme.vim. Gereç yollarınızı :set runtimepath?vim içinden görebilirsiniz .
pabo

1
Konsol kullanıcıları için (benim gibi), vurgulanan farklar ve vurgulanan sözdizimi arasındaki kontrastı en azından kabuk komut dosyaları için korumak için en iyi renk şeması (varsayılan kurulum setinin dışında) olarak 'vividchalk' buldum. Yakın bir saniye 'akşam' idi. Umarım yardımcı olur.
Conrad Meyer

Benim sorunum her zaman sözdizimi vurgulama ile kontrast eksikliğidir, bu da diff renklendirmede tüm metin parçalarını kaybeder. Geçmişte gerektiği gibi ': syntax off' kullandım, ancak bunu 'if & diff' yüklemindeki .vimrc
dosyama ekledim

166

Vim'in vurgulamak için neden bu kadar çok renk kullandığını bilmiyorum, neler olup bittiğini anlamanıza gerçekten yardımcı olmuyor.

Renk şemamı vurgulamak için yalnızca bir rengi kullanacak şekilde değiştirdim (bir çizgi içinde nerede bir fark olduğunu göstermek için başka bir renkle) ve tüm farkı yarattı .

Önce

görüntü açıklamasını buraya girin

Sonra

colorscheme_screenshot

Bunu, renk şeması dosyamın ( ~/.vim/colors/mycolorscheme.vim) sonuna aşağıdakileri ekleyerek yaptım .

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 - stili ayarlar
  • ctermfg - metin rengini ayarlayın
  • ctermbg - vurgulamayı ayarlayın
  • DiffAdd - satır eklendi
  • DiffDelete - satır kaldırıldı
  • DiffChange - çizginin bir kısmı değiştirildi (tüm çizgiyi vurgular)
  • DiffText - satırın tam olarak değişen kısmı

Bu bağlantıyı renk numaraları için referans olarak kullandım .

Not: macvim / gvim için farklı bir renk şeması kullandığım için gui seçeneklerini ayarlamadım


1
Teşekkürler! Bu çok daha iyi görünüyor!
vitaluha

4
Pabo'nun başka bir yorumda söylediği gibi, renk şeması dosyanızı sonunda .vim uzantısıyla mycolorscheme.vim gibi adlandırmanız gerekebilir.
David Winiecki

Teşekkürler! Minor nit: Sanırım kazara tüm "guibg" leri kırmızı yaptınız. Biri DiffText için diğeri geri kalanı için olmak üzere iki renge sahip olmayı mı düşündünüz?
Kapil Arya

6
Neden sayıları kullanırken (ctermbg = 17) renkler işe yaramıyor, ama kelimeler kullanırken (ctermbg = mavi) - işe yarıyor? .. çözüm: terminalin yalnızca 8 rengi 1-7
Ricky Levi

3
İTerm2 kullanan MacOS. Ne yaparsam yapayım, şunu elde ettim: '~ / .vim / colours / mycolorscheme' renk şemasını bulamıyorum ~ / .vimrc içindeki "if & diff" ifadesi arasındaki renk kodlarını doğrudan kopyalamak hile yaptı.
Tony Barganski

59

Kendi sorumu cevaplamak için:

if &diff
    colorscheme evening
endif

Benim için harika renk!
skytree

22

Bu tek satırlık yazıyı ~ / .vimrc dosyama yapıştırmanın en kolay yolunu buldum:

" 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
Harika çözüm! Bunun Todoyerine MatchParendaha çok öne çıktığı için seçtim .
Mihai Capotă

18

Okunamayan renk şemalarıyla karşılaşırsanız (sadece çirkin değil, pembe arka planda beyaz metin gibi okunamayan), kolay bir düzeltme 256 renk yerine 16 renk kullanmak olabilir. O zaman renk şemalarıyla uğraşmanıza gerek kalmaz.

Bunun nedeni, varsayılan vimdiff renk düzeninin DiffChange bg256 renkte çok açık pembeye eşlenen "LightMagenta" olarak atanmasıdır. Bu, beyaz metinle okunamaz. 16 renkle "LightMagenta", beyaz metnin çok daha iyi göründüğü koyu macenta ile eşleştirilir.

Bunun gibi bir şey yaparak hızlı bir test yapabilirsiniz:

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

256 renkli ekran görüntüsü görüntü açıklamasını buraya girin

16 renkli ekran görüntüsü görüntü açıklamasını buraya girin

Gördüğünüz gibi, 16 renk, renk şemasını değiştirmeden çok daha okunabilir.

Bunu kalıcı hale getirmek set t_Co=16için,.vimrc


2
Benim durumumda tersi olmasına rağmen, bu ipucu için çok teşekkür ederim. okunabilirliği büyük ölçüde t_Coartırarak 8 olarak ayarlandı set t_Co=256.
Olaf Dietsche

11

molokai: molokai renk düzeni github: github renk düzeni İki tema github ve molokai eşit derecede güzel.

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

Aşağıdaki kodu ~ / .vimrc dosyanıza koyun, github veya molokai seçebilirsiniz ("ile başlayan bir satır bir yorumdur):

if &diff
"   colorscheme github
    colorscheme molokai
endif

Bu eski soruna yeni favori çözümüm!
Stabledog

10

Çok mükemmel Solarized temasını kullanan kişiler için, fark modu için yüksek görünürlüğü etkinleştiren bir seçenek vardır:

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

"normal" görüntü açıklamasını buraya girin

"yüksek" görüntü açıklamasını buraya girin

"düşük" görüntü açıklamasını buraya girin


1
Bunun yarattığı farkın ekran görüntüsüne sahip değil misiniz?
Victor Zamanian

7

mevcut renk şemam vimdiff, For. örneğin bazı farklılıklar aynı fg / bg rengiyle gösterilir

Aslında, aynı fg / bg rengi için ana suçlunun kod sözdizimi vurgulama ve diff renk şeması arasındaki çelişki nedeniyle olduğunu buldum. Fark renk şemasını değiştirmeyi deneyebilirsiniz, ancak farklı dosya türlerini açtığınızda (farklı kod sözdizimi vurgulamasıyla) bu bir köstebek vurma oyunu olabilir.

Kesin bir çözüm, vimdiff'teki sözdizimi vurgulamasını devre dışı bırakmaktır. Aşağıdakilerden birini yazabilirsiniz:

:syntax off

Veya bunu her seferinde otomatik olarak yapmak istiyorsanız, bunu aşağıdakilerin sonuna ekleyin ~/.vimrc:

if &diff
    syntax off
endif

6

Başka bir yaklaşım, bu renk şemasını düzeltmektir.

Bildiğim kadarıyla, dif'lemeye göre genellikle dört vurgulama grubu vardır: DiffAdd, DiffChange, DiffDelete ve DiffText. Sözdizimi veya renkleri beğeninize göre ayarlamaktan rahatsız olmak istemiyorsanız, varsayılan renk düzeninizi başka bir adla ~ / .vim / colors (yoksa dizini oluşturun) olarak kopyalayabilirsiniz. alternatif renk düzeninizden yeni özel renk düzeninizin sonuna karşılık gelen: hi komutlarını kopyalayıp, isteğe bağlı olarak diff ile ilgili diğer tüm ifadeleri yorumlayarak yapıştırın.

Ve sonuç bariz bir gelişme ise, renk düzeninizin koruyucusuna değişikliklerinizle birlikte bir e-posta gönderin ve ondan sorunu incelemesini isteyin. İlginize teşekkür etmesi ve renk şemasını diğer kullanıcıların da yararına olacak şekilde düzeltmesi için büyük bir şans var ..


Vim geliştiricileri, varsayılan renk şemasının karanlık bir arka planda nasıl göründüğüne ilişkin çok sayıda şikayet ve öneri aldı, ancak ne yazık ki bu sorun henüz çözülmedi.
Stefan Lasiewski

6

/etc/vim/vimrcveya ~/.vimrc: Düzenleme alanı ve sözdizimi vurgulama içinde koyu bir arka plan kullanıyorsanız bu seçeneği de açınset background=dark


3

Vimdiff'i vim içinden kullanırken aşağıdakileri kullanıyorum:

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

Else ifadesinin bulunduğu kısım önemlidir, çünkü diff'ing işlemini bitirdikten sonra önceki yapılandırmanıza bu şekilde geri dönersiniz. Böylece syntax offve syntax onilgili colorschemekomutları değiştirebilirsiniz . Bu autocmd, bir ayarı değiştirmeyi ve vimdiff'ten çıkarken onu geri döndürmeyi yönetir ( Gdiffkesin olarak kullanıyorum).


3

@Dean'ı ve buradaki diğer bazı cevapları genişletmek için, bunu .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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.