dracula / vim

🧛🏻‍♂️ Dark theme for Vim
https://draculatheme.com/vim
MIT License
1.32k stars 455 forks source link

Error & warning colors unreadable with coc plugin #191

Open rtaibah opened 4 years ago

rtaibah commented 4 years ago

What happened

Error & warning are very hard to read with coc plugin.

Screenshot

Screen Shot 2020-05-25 at 7 23 08 AM Screen Shot 2020-05-25 at 7 22 22 AM

Machine Info

Darwin MacBook-Pro-5.local 18.7.0 Darwin Kernel Version 18.7.0: Thu Jan 23 06:52:12 PST 2020; root:xnu-4903.278.25~1/RELEASE_X86_64 x86_64

Additional Info

Terminal 0: xterm-256color [references=1, flags=0x1]:
   0: acsc: (string) ``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~
   1: AX: (flag) true
   2: bce: (flag) true
   3: bel: (string) \a
   4: blink: (string) \033[5m
   5: bold: (string) \033[1m
   6: civis: (string) \033[?25l
   7: clear: (string) \033[H\033[2J
   8: cnorm: (string) \033[?12l\033[?25h
   9: colors: (number) 256
  10: Cr: (string) \033]112\a
  11: Cs: (string) \033]12;%p1%s\a
  12: csr: (string) \033[%i%p1%d;%p2%dr
  13: cub: (string) \033[%p1%dD
  14: cub1: (string) \b
  15: cud: (string) \033[%p1%dB
  16: cud1: (string) \n
  17: cuf: (string) \033[%p1%dC
  18: cuf1: (string) \033[C
  19: cup: (string) \033[%i%p1%d;%p2%dH
  20: cuu: (string) \033[%p1%dA
  21: cuu1: (string) \033[A
  22: cvvis: (string) \033[?12;25h
  23: dch: (string) \033[%p1%dP
  24: dch1: (string) \033[P
  25: dim: (string) \033[2m
  26: dl: (string) \033[%p1%dM
  27: dl1: (string) \033[M
  28: E3: (string) \033[3J
  29: ech: (string) \033[%p1%dX
  30: ed: (string) \033[J
  31: el: (string) \033[K
  32: el1: (string) \033[1K
  33: enacs: [missing]
  34: fsl: (string) \a
  35: home: (string) \033[H
  36: hpa: (string) \033[%i%p1%dG
  37: ich: (string) \033[%p1%d@
  38: ich1: [missing]
  39: il: (string) \033[%p1%dL
  40: il1: (string) \033[L
  41: indn: (string) \033[%p1%dS
  42: invis: (string) \033[8m
  43: kcbt: (string) \033[Z
  44: kcub1: (string) \033OD
  45: kcud1: (string) \033OB
  46: kcuf1: (string) \033OC
  47: kcuu1: (string) \033OA
  48: kDC: (string) \033[3;2~
  49: kDC3: (string) \033[3;3~
  50: kDC4: (string) \033[3;4~
  51: kDC5: (string) \033[3;5~
  52: kDC6: (string) \033[3;6~
  53: kDC7: (string) \033[3;7~
  54: kdch1: (string) \033[3~
  55: kDN: (string) \033[1;2B
  56: kDN3: (string) \033[1;3B
  57: kDN4: (string) \033[1;4B
  58: kDN5: (string) \033[1;5B
  59: kDN6: (string) \033[1;6B
  60: kDN7: (string) \033[1;7B
  61: kend: (string) \033OF
  62: kEND: (string) \033[1;2F
  63: kEND3: (string) \033[1;3F
  64: kEND4: (string) \033[1;4F
  65: kEND5: (string) \033[1;5F
  66: kEND6: (string) \033[1;6F
  67: kEND7: (string) \033[1;7F
  68: kf1: (string) \033OP
  69: kf10: (string) \033[21~
  70: kf11: (string) \033[23~
  71: kf12: (string) \033[24~
  72: kf13: (string) \033[1;2P
  73: kf14: (string) \033[1;2Q
  74: kf15: (string) \033[1;2R
  75: kf16: (string) \033[1;2S
  76: kf17: (string) \033[15;2~
  77: kf18: (string) \033[17;2~
  78: kf19: (string) \033[18;2~
  79: kf2: (string) \033OQ
  80: kf20: (string) \033[19;2~
  81: kf21: (string) \033[20;2~
  82: kf22: (string) \033[21;2~
  83: kf23: (string) \033[23;2~
  84: kf24: (string) \033[24;2~
  85: kf25: (string) \033[1;5P
  86: kf26: (string) \033[1;5Q
  87: kf27: (string) \033[1;5R
  88: kf28: (string) \033[1;5S
  89: kf29: (string) \033[15;5~
  90: kf3: (string) \033OR
  91: kf30: (string) \033[17;5~
  92: kf31: (string) \033[18;5~
  93: kf32: (string) \033[19;5~
  94: kf33: (string) \033[20;5~
  95: kf34: (string) \033[21;5~
  96: kf35: (string) \033[23;5~
  97: kf36: (string) \033[24;5~
  98: kf37: (string) \033[1;6P
  99: kf38: (string) \033[1;6Q
 100: kf39: (string) \033[1;6R
 101: kf4: (string) \033OS
 102: kf40: (string) \033[1;6S
 103: kf41: (string) \033[15;6~
 104: kf42: (string) \033[17;6~
 105: kf43: (string) \033[18;6~
 106: kf44: (string) \033[19;6~
 107: kf45: (string) \033[20;6~
 108: kf46: (string) \033[21;6~
 109: kf47: (string) \033[23;6~
 110: kf48: (string) \033[24;6~
 111: kf49: (string) \033[1;3P
 112: kf5: (string) \033[15~
 113: kf50: (string) \033[1;3Q
 114: kf51: (string) \033[1;3R
 115: kf52: (string) \033[1;3S
 116: kf53: (string) \033[15;3~
 117: kf54: (string) \033[17;3~
 118: kf55: (string) \033[18;3~
 119: kf56: (string) \033[19;3~
 120: kf57: (string) \033[20;3~
 121: kf58: (string) \033[21;3~
 122: kf59: (string) \033[23;3~
 123: kf6: (string) \033[17~
 124: kf60: (string) \033[24;3~
 125: kf61: (string) \033[1;4P
 126: kf62: (string) \033[1;4Q
 127: kf63: (string) \033[1;4R
 128: kf7: (string) \033[18~
 129: kf8: (string) \033[19~
 130: kf9: (string) \033[20~
 131: kHOM: (string) \033[1;2H
 132: kHOM3: (string) \033[1;3H
 133: kHOM4: (string) \033[1;4H
 134: kHOM5: (string) \033[1;5H
 135: kHOM6: (string) \033[1;6H
 136: kHOM7: (string) \033[1;7H
 137: khome: (string) \033OH
 138: kIC: (string) \033[2;2~
 139: kIC3: (string) \033[2;3~
 140: kIC4: (string) \033[2;4~
 141: kIC5: (string) \033[2;5~
 142: kIC6: (string) \033[2;6~
 143: kIC7: (string) \033[2;7~
 144: kich1: (string) \033[2~
 145: kind: (string) \033[1;2B
 146: kLFT: (string) \033[1;2D
 147: kLFT3: (string) \033[1;3D
 148: kLFT4: (string) \033[1;4D
 149: kLFT5: (string) \033[1;5D
 150: kLFT6: (string) \033[1;6D
 151: kLFT7: (string) \033[1;7D
 152: kmous: (string) \033[<
 153: knp: (string) \033[6~
 154: kNXT: (string) \033[6;2~
 155: kNXT3: (string) \033[6;3~
 156: kNXT4: (string) \033[6;4~
 157: kNXT5: (string) \033[6;5~
 158: kNXT6: (string) \033[6;6~
 159: kNXT7: (string) \033[6;7~
 160: kpp: (string) \033[5~
 161: kPRV: (string) \033[5;2~
 162: kPRV3: (string) \033[5;3~
 163: kPRV4: (string) \033[5;4~
 164: kPRV5: (string) \033[5;5~
 165: kPRV6: (string) \033[5;6~
 166: kPRV7: (string) \033[5;7~
 167: kri: (string) \033[1;2A
 168: kRIT: (string) \033[1;2C
 169: kRIT3: (string) \033[1;3C
 170: kRIT4: (string) \033[1;4C
 171: kRIT5: (string) \033[1;5C
 172: kRIT6: (string) \033[1;6C
 173: kRIT7: (string) \033[1;7C
 174: kUP: (string) \033[1;2A
 175: kUP3: (string) \033[1;3A
 176: kUP4: (string) \033[1;4A
 177: kUP5: (string) \033[1;5A
 178: kUP6: (string) \033[1;6A
 179: kUP7: (string) \033[1;7A
 180: Ms: (string) \033]52;%p1%s;%p2%s\a
 181: op: (string) \033[39;49m
 182: rev: (string) \033[7m
 183: RGB: [missing]
 184: ri: (string) \033M
 185: rin: (string) \033[%p1%dT
 186: rmacs: (string) \033(B
 187: rmcup: (string) \033[?1049l\033[23;0;0t
 188: rmkx: (string) \033[?1l\033>
 189: Se: (string) \033[2 q
 190: setab: (string) \033[%?%p1%{8}%<%t4%p1%d%e%p1%{16}%<%t10%p1%{8}%-%d%e48;5;%p1%d%;m
 191: setaf: (string) \033[%?%p1%{8}%<%t3%p1%d%e%p1%{16}%<%t9%p1%{8}%-%d%e38;5;%p1%d%;m
 192: setrgbb: [missing]
 193: setrgbf: [missing]
 194: Setulc: [missing]
 195: sgr0: (string) \033(B\033[m
 196: sitm: (string) \033[3m
 197: smacs: (string) \033(0
 198: smcup: (string) \033[?1049h\033[22;0;0t
 199: Smol: [missing]
 200: smkx: (string) \033[?1h\033=
 201: smso: (string) \033[7m
 202: Smulx: [missing]
 203: smul: (string) \033[4m
 204: smxx: (string) \033[9m
 205: Ss: (string) \033[%p1%d q
 206: Tc: [missing]
 207: tsl: (string) \033]0;
 208: U8: [missing]
 209: vpa: (string) \033[%i%p1%dd
 210: xenl: (flag) true
 211: XT: (flag) true
dsifford commented 4 years ago

I'm not a coc user. Thoughts @benknoble?

benknoble commented 4 years ago

@dsifford I’m meaning to look at the coc docs or code to identify the right highlight groups; we can decide then what to do?

benknoble commented 4 years ago

From their docs (assuming you're using neoclide/coc.nvim), there are a lot of highlight groups, and I'm not sure exactly which ones are which (I don't use coc, so I don't know what a "Read kind of document symbol" is...). @rtaibah could you experiment with some of these to at least identify which specific groups are causing your issue?

HIGHLIGHTS                      *coc-highlights*

To customize a highlight, simply use |:highlight| command of Vim in your
vimrc, like: >

    " make error texts have a red color
    highlight CocErrorHighlight ctermfg=Red  guifg=#ff0000
<
Note: don't use `:hi default` for overwriting the highlights.

Note: highlight commands should appear after the |:colorscheme| command or use
|ColorScheme| autocmd to make sure customized highlight works after color
scheme change.

CocErrorSign                    *CocErrorSign*

  Default: `hi CocErrorSign  ctermfg=Red guifg=#ff0000`

  The highlight used for error signs.

CocWarningSign                  *CocWarningSign*

  Default: `hi CocWarningSign  ctermfg=Brown guifg=#ff922b`

  The highlight used for warning signs.

CocInfoSign                 *CocInfoSign*

  Default: `hi CocInfoSign  ctermfg=Yellow guifg=#fab005`

  The highlight used for information signs.

CocHintSign                 *CocHintSign*

  Default: `hi CocHintSign  ctermfg=Blue guifg=#15aabf`

  The highlight used for hint signs.

CocErrorVirtualText                 *CocErrorVirtualText*

  Default: `hi default link CocErrorVirtualText  CocErrorSign`

  The highlight used for error signs.

CocWarningVirtualText                   *CocWarningVirtualText*

  Default: `hi default link CocWarningVirtualText CocWarningSign`

  The highlight used for warning signs.

CocInfoVirtualText                  *CocInfoVirtualText*

  Default: `hi default link CocInfoVirtualText CocInfoSign`

  The highlight used for information signs.

CocHintVirtualText                  *CocHintVirtualText*

  Default: `hi default link CocHintVirtualText CocHintSign`

  The highlight used for hint signs.

CocErrorHighlight               *CocErrorHighlight*

  Default: `hi default link CocErrorHighlight   CocUnderline`

  The highlight used for error text.

CocWarningHighlight             *CocWarningHighlight*

  Default: `hi default link CocWarningHighlight   CocUnderline`

  The highlight used for warning text.

CocInfoHighlight                *CocInfoHighlight*

  Default: `hi default link CocInfoHighlight   CocUnderline`

  The highlight used for information text.

CocHintHighlight                *CocHintHighlight*

  Default: `hi default link CocHintHighlight   CocUnderline`

  The highlight used for hint text.

CocHighlightText                *CocHighlightText*

  Default `hi default link CursorColumn`

  The highlight used for document highlight feature. Normally used for
  highlighting same symbols in the buffer at the current cursor position.

CocHighlightRead                *CocHighlightRead*

  Default `hi default link CocHighlightRead  CocHighlightText`

  Highlight for `Read` kind of document symbol.

CocHighlightWrite               *CocHighlightWrite*

  Default `hi default link CocHighlightWrite  CocHighlightText`

  Highlight for `Write` kind of document symbol.

CocErrorLine                    *CocErrorLine*

  Default `undefined`

  Line highlight of sign for a line that contains error diagnostic.

CocWarningLine                  *CocWarningLine*

  Default `undefined`

  Line highlight of sign for a line that contains warning diagnostic.

CocInfoLine                 *CocInfoLine*

  Default `undefined`

  Line highlight of sign for a line that contains info diagnostic.

CocHintLine                 *CocHintLine*

  Default `undefined`

  Highlight for a line with diagnostic hint.

CocCodeLens                 *CocCodeLens*

  Default: `ctermfg=Gray    guifg=#999999`

  Highlight group of virtual text for codeLens.

CocFloating                 *CocFloating*

  Default: `Pmenu`

  Highlight group of a floating window.

CocErrorFloat                   *CocErrorFloat*

  Default: `hi default link CocErrorFloat CocErrorSign`

  The highlight used for a floating window with errors.

CocWarningFloat                 *CocWarningFloat*

  Default: `hi default link CocWarningFloat CocWarningSign`

  The highlight used for a floating window with warnings.

CocInfoFloat                    *CocInfoFloat*

  Default: `hi default link CocInfoFloat CocInfoSign`

  The highlight used for a floating window with information.

CocHintFloat                    *CocHintFloat*

  Default: `hi default link CocHintFloat CocHintSign`

  The highlight used for a floating window with hints.

CocCursorRange                  *CocCursorRange*

  Default: `hi default link CocCursorRange Search`

  The highlight used for cursor ranges.

CocHoverRange                   *CocHoverRange*

  Default: `hi default link CocHoverRange Search`

  The highlight used for current hover range.
dsifford commented 4 years ago

It's unfortunate the coc decided to hard-code the highlight colors for most of the groups, rather than just link them to the related groups so that themes wouldn't have to go back and set them all manually. Boo.

rtaibah commented 4 years ago

From their docs (assuming you're using neoclide/coc.nvim), there are a lot of highlight groups, and I'm not sure exactly which ones are which (I don't use coc, so I don't know what a "Read kind of document symbol" is...). @rtaibah could you experiment with some of these to at least identify which specific groups are causing your issue?

These two are the ones causing them.

CocErrorSign                    *CocErrorSign*

  Default: `hi CocErrorSign  ctermfg=Red guifg=#ff0000`

  The highlight used for error signs.

CocInfoSign                 *CocInfoSign*

  Default: `hi CocInfoSign  ctermfg=Yellow guifg=#fab005`

  The highlight used for information signs.
dsifford commented 4 years ago

@rtaibah PRs accepted for this.

See https://github.com/dracula/vim/blob/master/after/plugin/dracula.vim for an example of how (and where) we would do it for coc.

Try to match the default PMenu highlight style if you can.

rtaibah commented 4 years ago

Tried something like this:

" CoC: {{{
if exists('g:coc_enabled')
  hi! CocErrorSign  ctermfg=blue guifg=#ff0000
  hi CocInfoSign  ctermfg=black guifg=#fab005
endif
" }}}

Is not triggering anything.

benknoble commented 4 years ago

Try g:did_coc_load: plugin/coc.vim

rtaibah commented 4 years ago

echo exists('g:coc_enabled')

returns 1

echo exists('g:did_coc_load: plugin/coc.vim')

returns 0

dsifford commented 4 years ago

the second hi call is missing the bang.

rtaibah commented 4 years ago

@dsifford Yeah, I was focusing on the first line. Still doesn't matter neither error or info are working.

dsifford commented 4 years ago

@rtaibah the variable appears to be did_coc_loaded not did_coc_load.

Try that.

https://github.com/neoclide/coc.nvim/blob/master/plugin/coc.vim#L48

dsifford commented 4 years ago

And to be clear, you need to write it like this:

if exists('g:did_coc_loaded')
rtaibah commented 4 years ago

Just to make sure I am doing this right. I am using vim-plug and editing the file dracula.vim under ~/.vim/plugged/dracula/after/plugin. The code I currently have is

" CoC: {{{
if exists('g:did_coc_loaded')
  hi! CocErrorSign  ctermfg=blue guifg=#ff0000
  hi! CocInfoSign  ctermfg=black guifg=#fab005
endif
" }}}

I exit vim with every edit to make sure the updated plugin is loaded. I expect the font color to change to either blue or black depending on whether its info or error. Am I missing anything?

dsifford commented 4 years ago

Try it without the condition. If that still doesn't work then it's not the condition causing the problem.

rtaibah commented 4 years ago

Good call. Still not working.

dsifford commented 4 years ago

Then you probably have the wrong groups targeted. Try some of the others. Or just run the following and look for groups that match what you're trying to target..

:filter Coc hi
rtaibah commented 4 years ago

I really hate to be a nag, but the target seems fine; the error color changed to green when executed the command in the vim line.

The code and the file location appear on the left.

A1

dsifford commented 4 years ago

The error sign is an emoji. You can't recolor that.

rtaibah commented 4 years ago

My point is that group changed the text to green also.

I’ll try other groups I guess.

JDuchniewicz commented 3 years ago

I opened an issue (quickly closed though lol) in the coc repo. Basically what they miss is a coloring walkthrough, presumably too performance costly???

Honestly I think that the Magenta default is pretty nice background for documentation and omni. However, when the documentation contains code or content which is text it is replaced by default String highlight for this theme which is the same as Magenta, rendering it invisible.

benknoble commented 3 years ago

Just reviewing, I wonder if @rtaibah's issue might be due to the way Coc colors--that is, after/plugin might somehow still be too early? (Ugh)

@JDuchniewicz I'm not entirely sure I follow what your issue is, but I'd like to help fix it--can you give some examples/screenshots/more context/&c.? May be worth opening a separate issue.

JDuchniewicz commented 3 years ago

You can take a look at the issue linked above ( I think it is related though to this issue): coc.nvim utilized Pmenu highlight for its floating windows. One of them (visible on the right in the linked image) is for documentation, which displays usually code which is highlighted as String which links to Constant. So, as mentioned above, the colors blend together in this peculiar case.

sibu-github commented 2 years ago

Try this -

highlight CocErrorFloat ctermfg=White guifg=#ffffff

link

mukuntharajaa commented 1 year ago

I have the same issue with "YouCompleteMe". Is there a solution for this problem ?

benknoble commented 1 year ago

@mukuntharajaa in general, we need to override the plugin's highlighting if it doesn't link to standard groups. Fortunately you can technically do this yourself (see :help dracula-customization and :highlight the offending groups).

If you can come up with customized highlights that fit with Dracula and solve YCM's problem, we'll probably accept a PR baking that in.

Alternately, complain to YCM that their hard-coded highlighting is a poor strategy, and that they should link to standard groups instead :P