378 lines
12 KiB
VimL
378 lines
12 KiB
VimL
" 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 = g:dracula#palette.fg
|
|
|
|
let s:bglighter = g:dracula#palette.bglighter
|
|
let s:bglight = g:dracula#palette.bglight
|
|
let s:bg = g:dracula#palette.bg
|
|
let s:bgdark = g:dracula#palette.bgdark
|
|
let s:bgdarker = g:dracula#palette.bgdarker
|
|
|
|
let s:comment = g:dracula#palette.comment
|
|
let s:selection = g:dracula#palette.selection
|
|
let s:subtle = g:dracula#palette.subtle
|
|
|
|
let s:cyan = g:dracula#palette.cyan
|
|
let s:green = g:dracula#palette.green
|
|
let s:orange = g:dracula#palette.orange
|
|
let s:pink = g:dracula#palette.pink
|
|
let s:purple = g:dracula#palette.purple
|
|
let s:red = g:dracula#palette.red
|
|
let s:yellow = g:dracula#palette.yellow
|
|
|
|
let s:none = ['NONE', 'NONE']
|
|
|
|
if has('nvim')
|
|
for s:i in range(16)
|
|
let g:terminal_color_{s:i} = g:dracula#palette['color_' . s:i]
|
|
endfor
|
|
endif
|
|
|
|
if has('terminal')
|
|
let g:terminal_ansi_colors = []
|
|
for s:i in range(16)
|
|
call add(g:terminal_ansi_colors, g:dracula#palette['color_' . s:i])
|
|
endfor
|
|
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_strikethrough')
|
|
let g:dracula_strikethrough = 1
|
|
endif
|
|
|
|
if !exists('g:dracula_underline')
|
|
let g:dracula_underline = 1
|
|
endif
|
|
|
|
if !exists('g:dracula_undercurl')
|
|
let g:dracula_undercurl = g:dracula_underline
|
|
endif
|
|
|
|
if !exists('g:dracula_full_special_attrs_support')
|
|
let g:dracula_full_special_attrs_support = has('gui_running')
|
|
endif
|
|
|
|
if !exists('g:dracula_inverse')
|
|
let g:dracula_inverse = 1
|
|
endif
|
|
|
|
if !exists('g:dracula_colorterm')
|
|
let g:dracula_colorterm = 1
|
|
endif
|
|
|
|
if !exists('g:dracula_high_contrast_diff')
|
|
let g:dracula_high_contrast_diff = 0
|
|
endif
|
|
|
|
"}}}2
|
|
" Script Helpers: {{{2
|
|
|
|
let s:attrs = {
|
|
\ 'bold': g:dracula_bold == 1 ? 'bold' : 0,
|
|
\ 'italic': g:dracula_italic == 1 ? 'italic' : 0,
|
|
\ 'strikethrough': g:dracula_strikethrough == 1 ? 'strikethrough' : 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'
|
|
|
|
" If the UI does not have full support for special attributes (like underline and
|
|
" undercurl) and the highlight does not explicitly set the foreground color,
|
|
" make the foreground the same as the attribute color to ensure the user will
|
|
" get some highlight if the attribute is not supported. The default behavior
|
|
" is to assume that terminals do not have full support, but the user can set
|
|
" the global variable `g:dracula_full_special_attrs_support` explicitly if the
|
|
" default behavior is not desirable.
|
|
let l:special = get(a:, 3, ['NONE', 'NONE'])
|
|
if l:special[0] !=# 'NONE' && l:fg[0] ==# 'NONE' && !g:dracula_full_special_attrs_support
|
|
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
|
|
|
|
"}}}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('DraculaFgStrikethrough', s:fg, s:none, [s:attrs.strikethrough])
|
|
|
|
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('DraculaWinSeparator', s:comment, s:bgdark)
|
|
call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline])
|
|
|
|
if g:dracula_high_contrast_diff
|
|
call s:h('DraculaDiffChange', s:yellow, s:purple)
|
|
call s:h('DraculaDiffDelete', s:bgdark, s:red)
|
|
else
|
|
call s:h('DraculaDiffChange', s:orange, s:none)
|
|
call s:h('DraculaDiffDelete', s:red, s:bgdark)
|
|
endif
|
|
|
|
call s:h('DraculaDiffText', s:bg, s:orange)
|
|
call s:h('DraculaInlayHint', s:comment, s:bgdark)
|
|
|
|
" }}}2
|
|
|
|
" }}}
|
|
" User Interface: {{{
|
|
|
|
set background=dark
|
|
|
|
" Required as some plugins will overwrite
|
|
call s:h('Normal', s:fg, g:dracula_colorterm || has('gui_running') ? s:bg : s:none )
|
|
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! link ColorColumn DraculaBgDark
|
|
hi! link CursorColumn CursorLine
|
|
hi! link CursorLineNr DraculaYellow
|
|
hi! link DiffAdd DraculaGreen
|
|
hi! link DiffAdded DiffAdd
|
|
hi! link DiffChange DraculaDiffChange
|
|
hi! link DiffDelete DraculaDiffDelete
|
|
hi! link DiffRemoved DiffDelete
|
|
hi! link DiffText DraculaDiffText
|
|
hi! link Directory DraculaPurpleBold
|
|
hi! link ErrorMsg DraculaRedInverse
|
|
hi! link FoldColumn DraculaSubtle
|
|
hi! link Folded DraculaBoundary
|
|
hi! link IncSearch DraculaOrangeInverse
|
|
call s:h('LineNr', s:comment)
|
|
hi! link MoreMsg DraculaFgBold
|
|
hi! link NonText DraculaSubtle
|
|
hi! link Pmenu DraculaBgDark
|
|
hi! link PmenuSbar DraculaBgDark
|
|
hi! link PmenuSel DraculaSelection
|
|
hi! link PmenuThumb DraculaSelection
|
|
hi! link Question DraculaFgBold
|
|
hi! link Search DraculaSearch
|
|
call s:h('SignColumn', s:comment)
|
|
hi! link TabLine DraculaBoundary
|
|
hi! link TabLineFill DraculaBgDark
|
|
hi! link TabLineSel Normal
|
|
hi! link Title DraculaGreenBold
|
|
hi! link VertSplit DraculaWinSeparator
|
|
hi! link Visual DraculaSelection
|
|
hi! link VisualNOS Visual
|
|
hi! 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:cyan, s:none)
|
|
|
|
" Neovim uses SpecialKey for escape characters only. Vim uses it for that, plus whitespace.
|
|
if has('nvim')
|
|
hi! link SpecialKey DraculaRed
|
|
hi! link LspReferenceText DraculaSelection
|
|
hi! link LspReferenceRead DraculaSelection
|
|
hi! link LspReferenceWrite DraculaSelection
|
|
" Link old 'LspDiagnosticsDefault*' hl groups
|
|
" for backward compatibility with neovim v0.5.x
|
|
hi! link LspDiagnosticsDefaultInformation DiagnosticInfo
|
|
hi! link LspDiagnosticsDefaultHint DiagnosticHint
|
|
hi! link LspDiagnosticsDefaultError DiagnosticError
|
|
hi! link LspDiagnosticsDefaultWarning DiagnosticWarn
|
|
hi! link LspDiagnosticsUnderlineError DiagnosticUnderlineError
|
|
hi! link LspDiagnosticsUnderlineHint DiagnosticUnderlineHint
|
|
hi! link LspDiagnosticsUnderlineInformation DiagnosticUnderlineInfo
|
|
hi! link LspDiagnosticsUnderlineWarning DiagnosticUnderlineWarn
|
|
hi! link LspInlayHint DraculaInlayHint
|
|
|
|
hi! link DiagnosticInfo DraculaCyan
|
|
hi! link DiagnosticHint DraculaCyan
|
|
hi! link DiagnosticError DraculaError
|
|
hi! link DiagnosticWarn DraculaOrange
|
|
hi! link DiagnosticUnderlineError DraculaErrorLine
|
|
hi! link DiagnosticUnderlineHint DraculaInfoLine
|
|
hi! link DiagnosticUnderlineInfo DraculaInfoLine
|
|
hi! link DiagnosticUnderlineWarn DraculaWarnLine
|
|
|
|
hi! link WinSeparator DraculaWinSeparator
|
|
|
|
if has('nvim-0.9')
|
|
hi! link @lsp.type.class DraculaCyan
|
|
hi! link @lsp.type.decorator DraculaGreen
|
|
hi! link @lsp.type.enum DraculaCyan
|
|
hi! link @lsp.type.enumMember DraculaPurple
|
|
hi! link @lsp.type.function DraculaGreen
|
|
hi! link @lsp.type.interface DraculaCyan
|
|
hi! link @lsp.type.macro DraculaCyan
|
|
hi! link @lsp.type.method DraculaGreen
|
|
hi! link @lsp.type.namespace DraculaCyan
|
|
hi! link @lsp.type.parameter DraculaOrangeItalic
|
|
hi! link @lsp.type.property DraculaOrange
|
|
hi! link @lsp.type.struct DraculaCyan
|
|
hi! link @lsp.type.type DraculaCyanItalic
|
|
hi! link @lsp.type.typeParameter DraculaPink
|
|
hi! link @lsp.type.variable DraculaFg
|
|
endif
|
|
else
|
|
hi! link SpecialKey DraculaPink
|
|
endif
|
|
|
|
hi! link Comment DraculaComment
|
|
hi! link Underlined DraculaFgUnderline
|
|
hi! link Todo DraculaTodo
|
|
|
|
hi! link Error DraculaError
|
|
hi! link SpellBad DraculaErrorLine
|
|
hi! link SpellLocal DraculaWarnLine
|
|
hi! link SpellCap DraculaInfoLine
|
|
hi! link SpellRare DraculaInfoLine
|
|
|
|
hi! link Constant DraculaPurple
|
|
hi! link String DraculaYellow
|
|
hi! link Character DraculaPink
|
|
hi! link Number Constant
|
|
hi! link Boolean Constant
|
|
hi! link Float Constant
|
|
|
|
hi! link Identifier DraculaFg
|
|
hi! link Function DraculaGreen
|
|
|
|
hi! link Statement DraculaPink
|
|
hi! link Conditional DraculaPink
|
|
hi! link Repeat DraculaPink
|
|
hi! link Label DraculaPink
|
|
hi! link Operator DraculaPink
|
|
hi! link Keyword DraculaPink
|
|
hi! link Exception DraculaPink
|
|
|
|
hi! link PreProc DraculaPink
|
|
hi! link Include DraculaPink
|
|
hi! link Define DraculaPink
|
|
hi! link Macro DraculaPink
|
|
hi! link PreCondit DraculaPink
|
|
hi! link StorageClass DraculaPink
|
|
hi! link Structure DraculaPink
|
|
hi! link Typedef DraculaPink
|
|
|
|
hi! link Type DraculaCyanItalic
|
|
|
|
hi! link Delimiter DraculaFg
|
|
|
|
hi! link Special DraculaPink
|
|
hi! link SpecialComment DraculaCyanItalic
|
|
hi! link Tag DraculaCyan
|
|
hi! link helpHyperTextJump DraculaLink
|
|
hi! link helpCommand DraculaPurple
|
|
hi! link helpExample DraculaGreen
|
|
hi! link helpBacktick Special
|
|
|
|
"}}}
|
|
|
|
" vim: fdm=marker ts=2 sts=2 sw=2 fdl=0 et:
|