dracula.vim 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337
  1. " Dracula Theme: v1.5.0 {{{
  2. "
  3. " https://github.com/zenorocha/dracula-theme
  4. "
  5. " Copyright 2016, All rights reserved
  6. "
  7. " Code licensed under the MIT license
  8. " http://zenorocha.mit-license.org
  9. "
  10. " @author Trevor Heins <@heinst>
  11. " @author Éverton Ribeiro <nuxlli@gmail.com>
  12. " @author Derek Sifford <dereksifford@gmail.com>
  13. " @author Zeno Rocha <hi@zenorocha.com>
  14. scriptencoding utf8
  15. " }}}
  16. " Configuration: {{{
  17. if v:version > 580
  18. highlight clear
  19. if exists('syntax_on')
  20. syntax reset
  21. endif
  22. endif
  23. let g:colors_name = 'dracula'
  24. if !(has('termguicolors') && &termguicolors) && !has('gui_running') && &t_Co != 256
  25. finish
  26. endif
  27. " Palette: {{{2
  28. let s:fg = ['#F8F8F2', 255]
  29. let s:bglighter = ['#424450', 238]
  30. let s:bglight = ['#343746', 237]
  31. " color236 is overwritten by my custom Xresources, I think"
  32. " so the bg was wrong; manually setting it to color 0
  33. " let s:bg = ['#282A36', 236]
  34. let s:bg = ['#282A36', 0]
  35. let s:bgdark = ['#21222C', 235]
  36. let s:bgdarker = ['#191A21', 234]
  37. let s:subtle = ['#424450', 238]
  38. let s:selection = ['#44475A', 239]
  39. let s:comment = ['#6272A4', 61]
  40. let s:cyan = ['#8BE9FD', 117]
  41. let s:green = ['#50FA7B', 84]
  42. let s:orange = ['#FFB86C', 215]
  43. let s:pink = ['#FF79C6', 212]
  44. let s:purple = ['#BD93F9', 141]
  45. let s:red = ['#FF5555', 203]
  46. let s:yellow = ['#F1FA8C', 228]
  47. let s:none = ['NONE', 'NONE']
  48. let g:dracula_palette = {
  49. \ 'fg': s:fg,
  50. \ 'bg': s:bg,
  51. \ 'selection': s:selection,
  52. \ 'comment': s:comment,
  53. \ 'cyan': s:cyan,
  54. \ 'green': s:green,
  55. \ 'orange': s:orange,
  56. \ 'pink': s:pink,
  57. \ 'purple': s:purple,
  58. \ 'red': s:red,
  59. \ 'yellow': s:yellow,
  60. \
  61. \ 'bglighter': s:bglighter,
  62. \ 'bglight': s:bglight,
  63. \ 'bgdark': s:bgdark,
  64. \ 'bgdarker': s:bgdarker,
  65. \ 'subtle': s:subtle,
  66. \}
  67. if has('nvim')
  68. let g:terminal_color_0 = '#44475A'
  69. let g:terminal_color_1 = '#DE312B'
  70. let g:terminal_color_2 = '#2FD651'
  71. let g:terminal_color_3 = '#D0D662'
  72. let g:terminal_color_4 = '#9C6FCF'
  73. let g:terminal_color_5 = '#DE559C'
  74. let g:terminal_color_6 = '#6AC5D3'
  75. let g:terminal_color_7 = '#D7D4C8'
  76. let g:terminal_color_8 = '#656B84'
  77. let g:terminal_color_9 = '#FF5555'
  78. let g:terminal_color_10 = '#50FA7B'
  79. let g:terminal_color_11 = '#F1FA8C'
  80. let g:terminal_color_12 = '#BD93F9'
  81. let g:terminal_color_13 = '#FF79C6'
  82. let g:terminal_color_14 = '#8BE9FD'
  83. let g:terminal_color_15 = '#F8F8F2'
  84. endif
  85. " }}}2
  86. " User Configuration: {{{2
  87. if !exists('g:dracula_bold')
  88. let g:dracula_bold = 1
  89. endif
  90. if !exists('g:dracula_italic')
  91. let g:dracula_italic = 1
  92. endif
  93. if !exists('g:dracula_underline')
  94. let g:dracula_underline = 1
  95. endif
  96. if !exists('g:dracula_undercurl') && g:dracula_underline != 0
  97. let g:dracula_undercurl = 1
  98. endif
  99. if !exists('g:dracula_inverse')
  100. let g:dracula_inverse = 1
  101. endif
  102. if !exists('g:dracula_colorterm')
  103. let g:dracula_colorterm = 1
  104. endif
  105. "}}}2
  106. " Script Helpers: {{{2
  107. let s:attrs = {
  108. \ 'bold': g:dracula_bold == 1 ? 'bold' : 0,
  109. \ 'italic': g:dracula_italic == 1 ? 'italic' : 0,
  110. \ 'underline': g:dracula_underline == 1 ? 'underline' : 0,
  111. \ 'undercurl': g:dracula_undercurl == 1 ? 'undercurl' : 0,
  112. \ 'inverse': g:dracula_inverse == 1 ? 'inverse' : 0,
  113. \}
  114. function! s:h(scope, fg, ...) " bg, attr_list, special
  115. let l:fg = copy(a:fg)
  116. let l:bg = get(a:, 1, ['NONE', 'NONE'])
  117. let l:attr_list = filter(get(a:, 2, ['NONE']), 'type(v:val) == 1')
  118. let l:attrs = len(l:attr_list) > 0 ? join(l:attr_list, ',') : 'NONE'
  119. " Falls back to coloring foreground group on terminals because
  120. " nearly all do not support undercurl
  121. let l:special = get(a:, 3, ['NONE', 'NONE'])
  122. if l:special[0] !=# 'NONE' && l:fg[0] ==# 'NONE' && !has('gui_running')
  123. let l:fg[0] = l:special[0]
  124. let l:fg[1] = l:special[1]
  125. endif
  126. let l:hl_string = [
  127. \ 'highlight', a:scope,
  128. \ 'guifg=' . l:fg[0], 'ctermfg=' . l:fg[1],
  129. \ 'guibg=' . l:bg[0], 'ctermbg=' . l:bg[1],
  130. \ 'gui=' . l:attrs, 'cterm=' . l:attrs,
  131. \ 'guisp=' . l:special[0],
  132. \]
  133. execute join(l:hl_string, ' ')
  134. endfunction
  135. function! s:Background()
  136. if g:dracula_colorterm || has('gui_running')
  137. return s:bg
  138. else
  139. return s:none
  140. endif
  141. endfunction
  142. "}}}2
  143. " Dracula Highlight Groups: {{{2
  144. call s:h('DraculaBgLight', s:none, s:bglight)
  145. call s:h('DraculaBgLighter', s:none, s:bglighter)
  146. call s:h('DraculaBgDark', s:none, s:bgdark)
  147. call s:h('DraculaBgDarker', s:none, s:bgdarker)
  148. call s:h('DraculaFg', s:fg)
  149. call s:h('DraculaFgUnderline', s:fg, s:none, [s:attrs.underline])
  150. call s:h('DraculaFgBold', s:fg, s:none, [s:attrs.bold])
  151. call s:h('DraculaComment', s:comment)
  152. call s:h('DraculaCommentBold', s:comment, s:none, [s:attrs.bold])
  153. call s:h('DraculaSelection', s:none, s:selection)
  154. call s:h('DraculaSubtle', s:subtle)
  155. call s:h('DraculaCyan', s:cyan)
  156. call s:h('DraculaCyanItalic', s:cyan, s:none, [s:attrs.italic])
  157. call s:h('DraculaGreen', s:green)
  158. call s:h('DraculaGreenBold', s:green, s:none, [s:attrs.bold])
  159. call s:h('DraculaGreenItalic', s:green, s:none, [s:attrs.italic])
  160. call s:h('DraculaGreenItalicUnderline', s:green, s:none, [s:attrs.italic, s:attrs.underline])
  161. call s:h('DraculaOrange', s:orange)
  162. call s:h('DraculaOrangeBold', s:orange, s:none, [s:attrs.bold])
  163. call s:h('DraculaOrangeItalic', s:orange, s:none, [s:attrs.italic])
  164. call s:h('DraculaOrangeBoldItalic', s:orange, s:none, [s:attrs.bold, s:attrs.italic])
  165. call s:h('DraculaOrangeInverse', s:bg, s:orange)
  166. call s:h('DraculaPink', s:pink)
  167. call s:h('DraculaPinkItalic', s:pink, s:none, [s:attrs.italic])
  168. call s:h('DraculaPurple', s:purple)
  169. call s:h('DraculaPurpleBold', s:purple, s:none, [s:attrs.bold])
  170. call s:h('DraculaPurpleItalic', s:purple, s:none, [s:attrs.italic])
  171. call s:h('DraculaRed', s:red)
  172. call s:h('DraculaRedInverse', s:fg, s:red)
  173. call s:h('DraculaYellow', s:yellow)
  174. call s:h('DraculaYellowItalic', s:yellow, s:none, [s:attrs.italic])
  175. call s:h('DraculaError', s:red, s:none, [], s:red)
  176. call s:h('DraculaErrorLine', s:none, s:none, [s:attrs.undercurl], s:red)
  177. call s:h('DraculaWarnLine', s:none, s:none, [s:attrs.undercurl], s:orange)
  178. call s:h('DraculaInfoLine', s:none, s:none, [s:attrs.undercurl], s:cyan)
  179. call s:h('DraculaTodo', s:cyan, s:none, [s:attrs.bold, s:attrs.inverse])
  180. call s:h('DraculaSearch', s:green, s:none, [s:attrs.inverse])
  181. call s:h('DraculaBoundary', s:comment, s:bgdark)
  182. call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline])
  183. call s:h('DraculaDiffChange', s:none, s:none)
  184. call s:h('DraculaDiffText', s:bg, s:orange)
  185. call s:h('DraculaDiffDelete', s:red, s:bgdark)
  186. " }}}2
  187. " }}}
  188. " User Interface: {{{
  189. set background=dark
  190. " Required as some plugins will overwrite
  191. call s:h('Normal', s:fg, s:Background())
  192. call s:h('StatusLine', s:none, s:bglighter, [s:attrs.bold])
  193. call s:h('StatusLineNC', s:none, s:bglight)
  194. call s:h('WildMenu', s:bg, s:purple, [s:attrs.bold])
  195. call s:h('CursorLine', s:none, s:subtle)
  196. hi! link ColorColumn DraculaSelection
  197. hi! link CursorColumn DraculaSelection
  198. hi! link CursorLineNr DraculaYellow
  199. hi! link DiffAdd DraculaGreen
  200. hi! link DiffAdded DiffAdd
  201. hi! link DiffChange DraculaDiffChange
  202. hi! link DiffDelete DraculaDiffDelete
  203. hi! link DiffRemoved DiffDelete
  204. hi! link DiffText DraculaDiffText
  205. hi! link Directory DraculaPurpleBold
  206. hi! link ErrorMsg DraculaRedInverse
  207. hi! link FoldColumn DraculaSubtle
  208. hi! link Folded DraculaBoundary
  209. hi! link IncSearch DraculaOrangeInverse
  210. hi! link LineNr DraculaComment
  211. hi! link MoreMsg DraculaFgBold
  212. hi! link NonText DraculaSubtle
  213. hi! link Pmenu DraculaBgDark
  214. hi! link PmenuSbar DraculaBgDark
  215. hi! link PmenuSel DraculaSelection
  216. hi! link PmenuThumb DraculaSelection
  217. hi! link Question DraculaFgBold
  218. hi! link Search DraculaSearch
  219. hi! link SignColumn DraculaComment
  220. hi! link TabLine DraculaBoundary
  221. hi! link TabLineFill DraculaBgDarker
  222. hi! link TabLineSel Normal
  223. hi! link Title DraculaGreenBold
  224. hi! link VertSplit DraculaBoundary
  225. hi! link Visual DraculaSelection
  226. hi! link VisualNOS Visual
  227. hi! link WarningMsg DraculaOrangeInverse
  228. " }}}
  229. " Syntax: {{{
  230. " Required as some plugins will overwrite
  231. call s:h('MatchParen', s:fg, s:pink, [s:attrs.underline])
  232. call s:h('Conceal', s:comment, s:bglight)
  233. hi! link Comment DraculaComment
  234. hi! link Underlined DraculaFgUnderline
  235. hi! link Todo DraculaTodo
  236. hi! link Error DraculaError
  237. hi! link SpellBad DraculaErrorLine
  238. hi! link SpellLocal DraculaWarnLine
  239. hi! link SpellCap DraculaInfoLine
  240. hi! link SpellRare DraculaInfoLine
  241. hi! link Constant DraculaPurple
  242. hi! link String DraculaYellow
  243. hi! link Character DraculaPink
  244. hi! link Number Constant
  245. hi! link Boolean Constant
  246. hi! link Float Constant
  247. hi! link Identifier DraculaFg
  248. hi! link Function DraculaGreen
  249. hi! link Statement DraculaPink
  250. hi! link Conditional DraculaPink
  251. hi! link Repeat DraculaPink
  252. hi! link Label DraculaPink
  253. hi! link Operator DraculaPink
  254. hi! link Keyword DraculaPink
  255. hi! link Exception DraculaPink
  256. hi! link PreProc DraculaPink
  257. hi! link Include DraculaPink
  258. hi! link Define DraculaPink
  259. hi! link Macro DraculaPink
  260. hi! link PreCondit DraculaPink
  261. hi! link StorageClass DraculaPink
  262. hi! link Structure DraculaPink
  263. hi! link Typedef DraculaPink
  264. hi! link Type DraculaCyanItalic
  265. hi! link Delimiter DraculaFg
  266. hi! link Special DraculaPink
  267. hi! link SpecialKey DraculaRed
  268. hi! link SpecialComment DraculaCyanItalic
  269. hi! link Tag DraculaCyan
  270. hi! link helpHyperTextJump DraculaLink
  271. hi! link helpCommand DraculaPurple
  272. hi! link helpExample DraculaGreen
  273. "}}}
  274. " vim: fdm=marker ts=2 sts=2 sw=2: