Załaduj inny schemat kolorów podczas korzystania z vimdiff

137

Jak załadować inny schemat kolorów podczas wykonywania vimdiff .

Chcę tego, ponieważ mój bieżący schemat kolorów nie pokazuje poprawnie niektórych różnic w vimdiff, For. np. niektóre różnice są wyświetlane z tym samym kolorem fg / bg. To sprawia, że ​​bardzo trudno jest zrozumieć różnicę. Więc za każdym razem, gdy robięvimdiff muszę to zrobić:colorscheme some_other_scheme

Czy można to zrobić w .vimrcpliku?

CodeRain
źródło

Odpowiedzi:

118

Jeśli dzwonisz vimdiffz wiersza poleceń, umieść w swoim .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Jeśli używasz Vimdiff od wewnątrz vim, to albo trzeba zastąpić polecenia użyć, aby rozpocząć / zatrzymać (np diffthis, diffoff) za pomocą :cnoreabbr(istnieje również plugin ) lub użyć autokomendy:

au FilterWritePre * if &diff | colorscheme xyz | endif

FilterWritePre jest wywoływana przed przefiltrowaniem przez zewnętrzny program (narzędzie diff), a &diff-opcja jest ustawiana przez vim, kiedy przechodzi w tryb diff (zobacz między innymi :help diff)

Nie jestem jednak pewien, której autokomendy użyć, aby powrócić do oryginalnego schematu kolorów.

DataWraith
źródło
Czy można wywołać więcej niż jedną komendę między dwoma potokami „|”? Byłbym zainteresowany powrotem do oryginalnego schematu kolorów po użyciu vimdiff z vim'a ...
Ktoś nadal używa ciebie MS-DOS.
1
;if &diff | colorscheme xyz | cmd2 | cmd3 | endif
Potoki zastępują znaki
1
colorscheme some_other_schemeprzejrzy ścieżki środowiska uruchomieniowego dla color/some_other_scheme.vim. Możesz zobaczyć swoje runtimepaths :set runtimepath?z poziomu vima.
pabo
1
Dla użytkowników konsol (takich jak ja) stwierdziłem, że 'vividchalk' jest najlepszym schematem kolorów (z domyślnego zestawu instalacyjnego) do utrzymania kontrastu między podświetlonymi różnicami a podświetloną składnią, przynajmniej dla skryptów powłoki. Krótką sekundą był „wieczór”. Mam nadzieję, że to pomoże.
Conrad Meyer
Moim problemem jest zawsze brak kontrastu z podświetlaniem składni, co powoduje utratę całych fragmentów tekstu w kolorowaniu różnicowym. Użyłem ': syntax off' zgodnie z potrzebą w przeszłości, ale po prostu dodałem go do mojego .vimrc w predykacie 'if & diff' i teraz zapisałem kilka naciśnięć klawiszy
qneill
166

Nie wiem, dlaczego vim używa tak wielu kolorów do podświetlania, tak naprawdę nie pomaga ci to zrozumieć, co się dzieje.

Zmodyfikowałem mój schemat kolorów, aby był tylko używany jednego koloru do podświetlania (z innym, aby pokazać, gdzie jest różnica w linii) i to wszystko zmieniło.

Przed

wprowadź opis obrazu tutaj

Po

colorscheme_screenshot

Zrobiłem to, dodając następujący tekst na końcu mojego pliku 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 - nadaje styl
  • ctermfg - ustaw kolor tekstu
  • ctermbg - ustaw podświetlenie
  • DiffAdd - linia została dodana
  • DiffDelete - linia została usunięta
  • DiffChange - zmieniono część linii (podświetla całą linię)
  • DiffText - dokładna część linii, która uległa zmianie

Użyłem tego linku jako odniesienia do numerów kolorów.

Uwaga: nie ustawiłem opcji gui, ponieważ używam innego schematu kolorów dla macvim / gvim

Dziekan
źródło
1
Dzięki! To wygląda znacznie lepiej!
vitaluha
4
Jak pabo powiedział w innym komentarzu, być może będziesz musiał nazwać swój plik schematu kolorów jak mycolorscheme.vim, z rozszerzeniem .vim na końcu.
David Winiecki
Dzięki! Drobna nitka: Myślę, że przypadkowo sprawiłeś, że wszystkie "guibg" były czerwone. Czy zamierzałeś mieć dwa kolory - jeden dla DiffText, a drugi dla pozostałych?
Kapil Arya
6
Dlaczego przy użyciu liczb (ctermbg = 17) kolory nie działają, ale przy użyciu słów (ctermbg = blue) - działa? .. rozwiązanie: terminal ma tylko 8 kolorów 1-7
Ricky Levi
3
MacOS przy użyciu iTerm2. Bez względu na to, co zrobiłem, otrzymałem: Nie można znaleźć schematu kolorów '~ / .vim / colors / mycolorscheme' Kopiowanie kodów kolorów bezpośrednio między instrukcją "if & diff" w ~ / .vimrc załatwiło sprawę.
Tony Barganski
59

Odpowiadając na moje własne pytanie:

if &diff
    colorscheme evening
endif
CodeRain
źródło
Świetny kolor dla mnie!
SkyTree
22

Najłatwiejszym sposobem było wklejenie tej jednej linijki do mojego pliku ~ / .vimrc:

" 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
Alan Thompson
źródło
3
Świetne rozwiązanie! Wybrałem Todozamiast, MatchParenponieważ bardziej się wyróżnia.
Mihai Capotă
18

Jeśli napotykasz nieczytelne schematy kolorów (nie tylko brzydkie, ale nieczytelne, takie jak biały tekst na różowym tle), łatwym rozwiązaniem może być użycie 16 kolorów zamiast 256 kolorów. Wtedy nie musisz majstrować przy schematach kolorów.

Powodem jest to, że przypisuje domyślny schemat kolorów vimdiff DiffChange bg jako „LightMagenta”, który jest odwzorowywany na bardzo jasny róż w 256 kolorach. To jest nieczytelne w przypadku białego tekstu. Przy 16 kolorach „LightMagenta” jest odwzorowywana na odważną magentę, na której biały tekst jest znacznie lepiej widoczny.

Możesz przeprowadzić szybki test, wykonując coś takiego:

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-kolorowy zrzut ekranu wprowadź opis obrazu tutaj

Zrzut ekranu w 16 kolorach wprowadź opis obrazu tutaj

Jak widać, 16 kolorów jest znacznie bardziej czytelnych, bez zmiany schematu kolorów.

Aby to było trwałe, możesz dodać set t_Co=16do swojego.vimrc

wisbucky
źródło
2
Bardzo dziękuję za tę wskazówkę, chociaż w moim przypadku było odwrotnie. t_Cozostała ustawiona na 8, co set t_Co=256ogromnie zwiększyło jej czytelność.
Olaf Dietsche
11

molokai: kolorystyka molokai github: schemat kolorów github Dwa tematy github i molokai są równie piękne.

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

Umieść następujący kod w swoim ~ / .vimrc, możesz wybrać github lub molokai (linia zaczynająca się od "to komentarz):

if &diff
"   colorscheme github
    colorscheme molokai
endif
iceblue
źródło
Moje nowe ulubione rozwiązanie tego starego problemu!
Stabledog
10

Dla osób, które używają bardzo doskonałego motywu Solaryzacja, dostępna jest opcja, która włącza wysoką widoczność w trybie różnicowym:

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

"normalna" wprowadź opis obrazu tutaj

"wysoki" wprowadź opis obrazu tutaj

"Niska" wprowadź opis obrazu tutaj

mandragora
źródło
1
Nie masz zrzutu ekranu przedstawiającego różnicę, jaką to robi?
Victor Zamanian,
7

mój obecny schemat kolorów nie pokazuje poprawnie niektórych różnic w programie vimdiff, For. np. niektóre różnice są wyświetlane z tym samym kolorem fg / bg

Właściwie odkryłem, że głównym winowajcą tego samego koloru fg / bg jest konflikt między podświetlaniem składni kodu a schematem kolorów różnic. Możesz spróbować zmienić schemat kolorów różnic, ale może to być gra typu whack-a-mole, gdy otwierasz różne typy plików (z różnymi podświetleniami składni kodu).

Pewnym rozwiązaniem jest wyłączenie podświetlania składni w vimdiff. Możesz wpisać:

:syntax off

Lub jeśli chcesz to robić automatycznie za każdym razem, dodaj to na końcu ~/.vimrc:

if &diff
    syntax off
endif
wisbucky
źródło
6

Innym podejściem jest naprawienie tego schematu kolorów.

O ile wiem, istnieją zwykle cztery grupy wyróżnień odnoszące się do diff'ing: DiffAdd, DiffChange, DiffDelete i DiffText. Jeśli nie chcesz przejmować się składnią lub dostosowywaniem kolorów do swoich upodobań, prawdopodobnie możesz skopiować domyślny schemat kolorów pod inną nazwą do ~ / .vim / colors (utwórz katalog, jeśli nie istnieje) i kopiuj wklej odpowiednie polecenia: hi z alternatywnego schematu kolorów na koniec nowego niestandardowego schematu kolorów, opcjonalnie komentując wszelkie inne instrukcje związane z różnicami.

A jeśli wynik jest oczywistą poprawą, wyślij e-mail do opiekuna schematu kolorów z twoimi zmianami i poproś go o zbadanie problemu. Jest duża szansa, że ​​podziękuje Ci za zainteresowanie i naprawi swoją kolorystykę, aby inni użytkownicy również skorzystali.

szef'
źródło
Twórcy vima otrzymali wiele skarg i sugestii dotyczących tego, jak domyślny schemat kolorów pojawia się na ciemnym tle, ale niestety zostało to jeszcze naprawione.
Stefan Lasiewski
6

/etc/vim/vimrclub ~/.vimrc: Jeśli używasz ciemnego tła w obszarze edycji i podświetlania składni, włącz również tę opcjęset background=dark

Dmitry Ershov
źródło
3

Używam tego, gdy używam vimdiff z poziomu vim:

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

Część z instrukcją else jest ważna, ponieważ w ten sposób wracasz do poprzedniej konfiguracji po zakończeniu porównywania. Możesz więc zastąpić syntax offi syntax onodpowiednimi colorschemepoleceniami. Ten autocmd obsługuje zmianę ustawienia i przywracanie go podczas wychodzenia z vimdiff (używam Gdiffaby być precyzyjnym).

mostruash
źródło
3

Aby rozwinąć @dean i kilka innych odpowiedzi tutaj, dodaj to do .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
thouliha
źródło