Carregar esquema de cores diferente ao usar vimdiff

137

Como carregar um esquema de cores diferente ao fazê-lo vimdiff.

Eu quero isso porque o meu esquema de cores atual não mostra algumas diferenças adequadamente em vimdiff, para. por exemplo, algumas diferenças são mostradas com a mesma cor fg / bg. Isso torna muito difícil entender o diff. Então, toda vez que faço um, vimdifftenho que fazer:colorscheme some_other_scheme

Isso pode ser feito em .vimrcarquivo?

CodeRain
fonte

Respostas:

118

Se você estiver ligando vimdiffda linha de comando, coloque o seguinte em .vimrc:

if &diff
    colorscheme some_other_scheme
endif

Se você estiver usando o vimdiff no vim, você precisará substituir os comandos que você usa para iniciar / parar (por exemplo diffthis, diffoff) usando :cnoreabbr(também há um plugin ) ou use um comando automático:

au FilterWritePre * if &diff | colorscheme xyz | endif

O FilterWritePre é chamado antes de filtrar através de um programa externo (o utilitário diff) e a &diffopção-é definida pelo vim quando entra no modo diff (entre outros, consulte :help diff)

No entanto, não tenho certeza de qual comando automático usar para retornar ao esquema de cores original.

DataWraith
fonte
É possível chamar mais de um comando entre os dois pipes "|"? Gostaria de retornar ao esquema de cores original depois de usar o vimdiff do vim também ...
Alguém ainda usa o MS-DOS
1
Os pipes são substituídos por novas linhas, semelhantes aos ;scripts de shell, para que você possa adicionar novas 'linhas':if &diff | colorscheme xyz | cmd2 | cmd3 | endif
DataWraith
1
colorscheme some_other_schemeprocurará nos seus caminhos de tempo de execução color/some_other_scheme.vim. Você pode ver seus caminhos de execução :set runtimepath?no vim.
pabo
1
Para usuários de console (como eu), achei 'vividchalk' o melhor esquema de cores (fora do conjunto de instalação padrão) para manter o contraste entre diferenças destacadas e sintaxe destacada, pelo menos para scripts de shell. Um segundo próximo foi "noite". Espero que ajude.
Conrad Meyer
Meu problema é sempre a falta de contraste com o realce da sintaxe, que perde partes inteiras do texto em cores diferentes. Eu usei ': syntax off' conforme necessário no passado, mas apenas o adicionei ao meu .vimrc no predicado 'if & diff' e agora salvei algumas teclas
qneill
166

Não sei por que o vim usa tantas cores para destacar, isso realmente não ajuda a descobrir o que está acontecendo.

Modifiquei meu esquema de cores para usar apenas uma cor para realçar (com outra para mostrar onde há uma diferença dentro de uma linha) e isso fez toda a diferença.

Antes

insira a descrição da imagem aqui

Depois de

colorscheme_screenshot

Fiz isso adicionando o seguinte ao final do meu arquivo 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 - define o estilo
  • ctermfg - define a cor do texto
  • ctermbg - defina o realce
  • DiffAdd - linha foi adicionada
  • DiffDelete - a linha foi removida
  • DiffChange - parte da linha foi alterada (destaca toda a linha)
  • DiffText - a parte exata da linha que mudou

eu usei esse link como referência para os números de cores.

Nota: Eu não defini as opções da GUI porque uso um esquema de cores diferente para o macvim / gvim

reitor
fonte
1
Obrigado! Isso parece muito melhor!
vitaluha
4
Como o pabo disse em outro comentário, pode ser necessário nomear seu arquivo de esquema de cores como mycolorscheme.vim, com a extensão .vim no final.
David Winiecki
Obrigado! Menor: acho que você acidentalmente deixou todo o "guibg" vermelho. Você pretendia ter duas cores - uma para o DiffText e outra para o resto?
precisa saber é o seguinte
6
Por que ao usar números (ctermbg = 17) as cores não funcionam, mas ao usar palavras (ctermbg = azul) - funciona? .. solução: terminal só tem 8 cores 1-7
Ricky Levi
3
MacOS usando o iTerm2. Não importa o que eu fiz, obtive: Não é possível encontrar o esquema de cores '~ / .vim / colors / mycolorscheme' A cópia dos códigos de cores diretamente entre a instrução "if & diff" em ~ / .vimrc fez o truque.
Tony Barganski 19/09/09
59

Para responder minha própria pergunta:

if &diff
    colorscheme evening
endif
CodeRain
fonte
Ótima cor para mim!
skytree
22

Eu achei a maneira mais fácil de colar esse one-liner no meu arquivo ~ / .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
fonte
3
Ótima solução! Eu escolhi em Todovez de MatchParenporque se destaca mais.
Mihai Capotă 18/04/2013
18

Se você estiver encontrando esquemas de cores ilegíveis (não apenas feios, mas ilegíveis como texto branco em fundo rosa), uma solução fácil pode ser usar 16 cores em vez de 256 cores. Então você não precisa mexer com os esquemas de cores.

O motivo é que o esquema de cores vimdiff padrão atribui DiffChange bg como "LightMagenta", que é mapeado para um rosa muito claro em 256 cores. Isso é ilegível com texto em branco. Com 16 cores, o "LightMagenta" é mapeado para uma magenta em negrito, na qual o texto em branco aparece muito melhor.

Você pode fazer um teste rápido fazendo algo assim:

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

Captura de tela em 256 cores insira a descrição da imagem aqui

Captura de tela de 16 cores insira a descrição da imagem aqui

Como você pode ver, as 16 cores são muito mais legíveis, sem alterar o esquema de cores.

Para tornar isso permanente, você pode adicionar set t_Co=16ao seu.vimrc

wisbucky
fonte
2
Muito obrigado por esta dica, embora no meu caso tenha sido o contrário. t_Cofoi definido como 8, aumentando set t_Co=256tremendamente a legibilidade aprimorada.
Olaf Dietsche
11

molokai: esquema de cores molokai github: esquema de cores do github Os dois temas github e molokai são igualmente bonitos.

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

Coloque o seguinte código no seu ~ / .vimrc, você pode escolher o github ou o molokai (uma linha que começa com "é um comentário):

if &diff
"   colorscheme github
    colorscheme molokai
endif
gelo azul
fonte
Minha nova solução favorita para esse velho problema!
Stabledog
10

Para pessoas que usam o excelente tema Solarizado, há uma opção que ativa a alta visibilidade no modo diff:

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

"normal" insira a descrição da imagem aqui

"Alto" insira a descrição da imagem aqui

"baixo" insira a descrição da imagem aqui

mandrágora
fonte
1
Você não teria uma captura de tela da diferença que isso faz?
Victor Zamanian
7

meu esquema de cores atual não mostra algumas diferenças corretamente no vimdiff, para. por exemplo, algum diff é mostrado com a mesma cor fg / bg

Na verdade, eu descobri que o principal culpado pela mesma cor fg / bg é por causa do conflito entre o destaque da sintaxe do código e o esquema de cores diff. Você pode tentar alterar o esquema de cores do diff, mas pode ser um jogo de "whack-a-mole" quando você abre diferentes tipos de arquivo (com destaque para sintaxe de código diferente).

Uma solução certa é desativar o realce da sintaxe no vimdiff. Você pode digitar:

:syntax off

Ou, se você quiser fazer isso automaticamente sempre, adicione-o ao final do seu ~/.vimrc:

if &diff
    syntax off
endif
wisbucky
fonte
6

Outra abordagem é corrigir esse esquema de cores.

Até onde eu sei, geralmente existem quatro grupos de destaque em relação à diferença: DiffAdd, DiffChange, DiffDelete e DiffText. Se você não quiser se incomodar com a sintaxe ou ajustar as cores ao seu gosto, provavelmente poderá copiar seu esquema de cores padrão com outro nome para ~ / .vim / colors (crie o diretório se ele não existir) e Copie e cole os comandos correspondentes: oi do seu esquema de cores alternativo até o final do seu novo esquema de cores personalizado, comentando opcionalmente quaisquer outras declarações relacionadas a ele.

E se o resultado for uma melhoria óbvia, envie um e-mail ao mantenedor do seu esquema de cores com as alterações e peça a ele para analisar o problema. Há uma boa chance de ele agradecer pelo seu interesse e de corrigir o esquema de cores para que outros usuários também se beneficiem.

guv '
fonte
Os desenvolvedores do vim receberam inúmeras reclamações e sugestões sobre como o esquema de cores padrão aparece em um fundo escuro, mas, infelizmente, isso ainda foi corrigido.
Stefan Lasiewski
6

/etc/vim/vimrcou ~/.vimrc: se estiver usando um fundo escuro dentro da área de edição e realce de sintaxe, ative também esta opçãoset background=dark

Dmitry Ershov
fonte
3

Eu uso o seguinte ao usar o vimdiff no vim:

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

A declaração part with else é importante porque é assim que você volta à sua configuração anterior depois de concluir a diferença. Então você pode substituir syntax offe syntax onpelos respectivos colorschemecomandos. Este autocmd trata de alterar uma configuração e revertê-la ao sair do vimdiff (eu uso Gdiffpara ser mais preciso).

mostruash
fonte
3

Para expandir o @dean e outras respostas aqui, adicione isso ao seu .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
fonte