" Dracula Theme: {{{ " " https://github.com/zenorocha/dracula-theme " " Copyright 2016, All rights reserved " " Code licensed under the MIT license " http://zenorocha.mit-license.org " " @author Trevor Heins <@heinst> " @author Éverton Ribeiro <nuxlli@gmail.com> " @author Derek Sifford <dereksifford@gmail.com> " @author Zeno Rocha <hi@zenorocha.com> scriptencoding utf8 " }}} " Configuration: {{{ if v:version > 580 highlight clear if exists('syntax_on') syntax reset endif endif let g:colors_name = 'dracula' if !(has('termguicolors') && &termguicolors) && !has('gui_running') && &t_Co != 256 finish endif " Palette: {{{2 let s:fg = ['#F8F8F2', 255] let s:bglighter = ['#424450', 238] let s:bglight = ['#343746', 237] let s:bg = ['#282A36', 236] let s:bgdark = ['#21222C', 235] let s:bgdarker = ['#191A21', 234] let s:subtle = ['#424450', 238] let s:selection = ['#44475A', 239] let s:comment = ['#6272A4', 61] let s:cyan = ['#8BE9FD', 117] let s:green = ['#50FA7B', 84] let s:orange = ['#FFB86C', 215] let s:pink = ['#FF79C6', 212] let s:purple = ['#BD93F9', 141] let s:red = ['#FF5555', 203] let s:yellow = ['#F1FA8C', 228] let s:none = ['NONE', 'NONE'] let g:dracula_palette = { \ 'fg': s:fg, \ 'bg': s:bg, \ 'selection': s:selection, \ 'comment': s:comment, \ 'cyan': s:cyan, \ 'green': s:green, \ 'orange': s:orange, \ 'pink': s:pink, \ 'purple': s:purple, \ 'red': s:red, \ 'yellow': s:yellow, \ \ 'bglighter': s:bglighter, \ 'bglight': s:bglight, \ 'bgdark': s:bgdark, \ 'bgdarker': s:bgdarker, \ 'subtle': s:subtle, \} if has('nvim') let g:terminal_color_0 = '#21222C' let g:terminal_color_1 = '#FF5555' let g:terminal_color_2 = '#50FA7B' let g:terminal_color_3 = '#F1FA8C' let g:terminal_color_4 = '#BD93F9' let g:terminal_color_5 = '#FF79C6' let g:terminal_color_6 = '#8BE9FD' let g:terminal_color_7 = '#F8F8F2' let g:terminal_color_8 = '#6272A4' let g:terminal_color_9 = '#FF6E6E' let g:terminal_color_10 = '#69FF94' let g:terminal_color_11 = '#FFFFA5' let g:terminal_color_12 = '#D6ACFF' let g:terminal_color_13 = '#FF92DF' let g:terminal_color_14 = '#A4FFFF' let g:terminal_color_15 = '#FFFFFF' endif if has('terminal') let g:terminal_ansi_colors = [ \ '#21222C', '#FF5555', '#50FA7B', '#F1FA8C', \ '#BD93F9', '#FF79C6', '#8BE9FD', '#F8F8F2', \ '#6272A4', '#FF6E6E', '#69FF94', '#FFFFA5', \ '#D6ACFF', '#FF92DF', '#A4FFFF', '#FFFFFF' \] endif " }}}2 " User Configuration: {{{2 if !exists('g:dracula_bold') let g:dracula_bold = 1 endif if !exists('g:dracula_italic') let g:dracula_italic = 1 endif if !exists('g:dracula_underline') let g:dracula_underline = 1 endif if !exists('g:dracula_undercurl') && g:dracula_underline != 0 let g:dracula_undercurl = 1 endif if !exists('g:dracula_inverse') let g:dracula_inverse = 1 endif if !exists('g:dracula_colorterm') let g:dracula_colorterm = 1 endif "}}}2 " Script Helpers: {{{2 let s:attrs = { \ 'bold': g:dracula_bold == 1 ? 'bold' : 0, \ 'italic': g:dracula_italic == 1 ? 'italic' : 0, \ 'underline': g:dracula_underline == 1 ? 'underline' : 0, \ 'undercurl': g:dracula_undercurl == 1 ? 'undercurl' : 0, \ 'inverse': g:dracula_inverse == 1 ? 'inverse' : 0, \} function! s:h(scope, fg, ...) " bg, attr_list, special let l:fg = copy(a:fg) let l:bg = get(a:, 1, ['NONE', 'NONE']) let l:attr_list = filter(get(a:, 2, ['NONE']), 'type(v:val) == 1') let l:attrs = len(l:attr_list) > 0 ? join(l:attr_list, ',') : 'NONE' " Falls back to coloring foreground group on terminals because " nearly all do not support undercurl let l:special = get(a:, 3, ['NONE', 'NONE']) if l:special[0] !=# 'NONE' && l:fg[0] ==# 'NONE' && !has('gui_running') let l:fg[0] = l:special[0] let l:fg[1] = l:special[1] endif let l:hl_string = [ \ 'highlight', a:scope, \ 'guifg=' . l:fg[0], 'ctermfg=' . l:fg[1], \ 'guibg=' . l:bg[0], 'ctermbg=' . l:bg[1], \ 'gui=' . l:attrs, 'cterm=' . l:attrs, \ 'guisp=' . l:special[0], \] execute join(l:hl_string, ' ') endfunction function! s:Background() if g:dracula_colorterm || has('gui_running') return s:bg else return s:none endif endfunction "}}}2 " Dracula Highlight Groups: {{{2 call s:h('DraculaBgLight', s:none, s:bglight) call s:h('DraculaBgLighter', s:none, s:bglighter) call s:h('DraculaBgDark', s:none, s:bgdark) call s:h('DraculaBgDarker', s:none, s:bgdarker) call s:h('DraculaFg', s:fg) call s:h('DraculaFgUnderline', s:fg, s:none, [s:attrs.underline]) call s:h('DraculaFgBold', s:fg, s:none, [s:attrs.bold]) call s:h('DraculaComment', s:comment) call s:h('DraculaCommentBold', s:comment, s:none, [s:attrs.bold]) call s:h('DraculaSelection', s:none, s:selection) call s:h('DraculaSubtle', s:subtle) call s:h('DraculaCyan', s:cyan) call s:h('DraculaCyanItalic', s:cyan, s:none, [s:attrs.italic]) call s:h('DraculaGreen', s:green) call s:h('DraculaGreenBold', s:green, s:none, [s:attrs.bold]) call s:h('DraculaGreenItalic', s:green, s:none, [s:attrs.italic]) call s:h('DraculaGreenItalicUnderline', s:green, s:none, [s:attrs.italic, s:attrs.underline]) call s:h('DraculaOrange', s:orange) call s:h('DraculaOrangeBold', s:orange, s:none, [s:attrs.bold]) call s:h('DraculaOrangeItalic', s:orange, s:none, [s:attrs.italic]) call s:h('DraculaOrangeBoldItalic', s:orange, s:none, [s:attrs.bold, s:attrs.italic]) call s:h('DraculaOrangeInverse', s:bg, s:orange) call s:h('DraculaPink', s:pink) call s:h('DraculaPinkItalic', s:pink, s:none, [s:attrs.italic]) call s:h('DraculaPurple', s:purple) call s:h('DraculaPurpleBold', s:purple, s:none, [s:attrs.bold]) call s:h('DraculaPurpleItalic', s:purple, s:none, [s:attrs.italic]) call s:h('DraculaRed', s:red) call s:h('DraculaRedInverse', s:fg, s:red) call s:h('DraculaYellow', s:yellow) call s:h('DraculaYellowItalic', s:yellow, s:none, [s:attrs.italic]) call s:h('DraculaError', s:red, s:none, [], s:red) call s:h('DraculaErrorLine', s:none, s:none, [s:attrs.undercurl], s:red) call s:h('DraculaWarnLine', s:none, s:none, [s:attrs.undercurl], s:orange) call s:h('DraculaInfoLine', s:none, s:none, [s:attrs.undercurl], s:cyan) call s:h('DraculaTodo', s:cyan, s:none, [s:attrs.bold, s:attrs.inverse]) call s:h('DraculaSearch', s:green, s:none, [s:attrs.inverse]) call s:h('DraculaBoundary', s:comment, s:bgdark) call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline]) call s:h('DraculaDiffChange', s:orange, s:none) call s:h('DraculaDiffText', s:bg, s:orange) call s:h('DraculaDiffDelete', s:red, s:bgdark) " }}}2 " }}} " User Interface: {{{ set background=dark " Required as some plugins will overwrite call s:h('Normal', s:fg, s:Background()) call s:h('StatusLine', s:none, s:bglighter, [s:attrs.bold]) call s:h('StatusLineNC', s:none, s:bglight) call s:h('StatusLineTerm', s:none, s:bglighter, [s:attrs.bold]) call s:h('StatusLineTermNC', s:none, s:bglight) call s:h('WildMenu', s:bg, s:purple, [s:attrs.bold]) call s:h('CursorLine', s:none, s:subtle) hi! def link ColorColumn DraculaBgDark hi! def link CursorColumn DraculaBgDark hi! def link CursorLineNr DraculaYellow hi! def link DiffAdd DraculaGreen hi! def link DiffAdded DiffAdd hi! def link DiffChange DraculaDiffChange hi! def link DiffDelete DraculaDiffDelete hi! def link DiffRemoved DiffDelete hi! def link DiffText DraculaDiffText hi! def link Directory DraculaPurpleBold hi! def link ErrorMsg DraculaRedInverse hi! def link FoldColumn DraculaSubtle hi! def link Folded DraculaBoundary hi! def link IncSearch DraculaOrangeInverse hi! def link LineNr DraculaComment hi! def link MoreMsg DraculaFgBold hi! def link NonText DraculaSubtle hi! def link Pmenu DraculaBgDark hi! def link PmenuSbar DraculaBgDark hi! def link PmenuSel DraculaSelection hi! def link PmenuThumb DraculaSelection hi! def link Question DraculaFgBold hi! def link Search DraculaSearch hi! def link SignColumn DraculaComment hi! def link TabLine DraculaBoundary hi! def link TabLineFill DraculaBgDarker hi! def link TabLineSel Normal hi! def link Title DraculaGreenBold hi! def link VertSplit DraculaBoundary hi! def link Visual DraculaSelection hi! def link VisualNOS Visual hi! def link WarningMsg DraculaOrangeInverse " }}} " Syntax: {{{ " Required as some plugins will overwrite call s:h('MatchParen', s:green, s:none, [s:attrs.underline]) call s:h('Conceal', s:comment, s:bglight) " Neovim uses SpecialKey for escape characters only. Vim uses it for that, plus whitespace. if has('nvim') hi! def link SpecialKey DraculaRed else hi! def link SpecialKey DraculaSubtle endif hi! def link Comment DraculaComment hi! def link Underlined DraculaFgUnderline hi! def link Todo DraculaTodo hi! def link Error DraculaError hi! def link SpellBad DraculaErrorLine hi! def link SpellLocal DraculaWarnLine hi! def link SpellCap DraculaInfoLine hi! def link SpellRare DraculaInfoLine hi! def link Constant DraculaPurple hi! def link String DraculaYellow hi! def link Character DraculaPink hi! def link Number Constant hi! def link Boolean Constant hi! def link Float Constant hi! def link Identifier DraculaFg hi! def link Function DraculaGreen hi! def link Statement DraculaPink hi! def link Conditional DraculaPink hi! def link Repeat DraculaPink hi! def link Label DraculaPink hi! def link Operator DraculaPink hi! def link Keyword DraculaPink hi! def link Exception DraculaPink hi! def link PreProc DraculaPink hi! def link Include DraculaPink hi! def link Define DraculaPink hi! def link Macro DraculaPink hi! def link PreCondit DraculaPink hi! def link StorageClass DraculaPink hi! def link Structure DraculaPink hi! def link Typedef DraculaPink hi! def link Type DraculaCyanItalic hi! def link Delimiter DraculaFg hi! def link Special DraculaPink hi! def link SpecialComment DraculaCyanItalic hi! def link Tag DraculaCyan hi! def link helpHyperTextJump DraculaLink hi! def link helpCommand DraculaPurple hi! def link helpExample DraculaGreen hi! def link helpBacktick Special "}}} " vim: fdm=marker ts=2 sts=2 sw=2: