869f70a760
Related: #192, #210, #248 Also #247 is about `NonText`, which needs investigating. Issues: `:digraphs`, special keys in `:map` output, and certain parts of `'listchars'` are "subtle" and hard to read (esp. w/ `cursorline` over them). Also, vim uses `SpecialKey` for them (instead of `Whitespace` for `'listchars'` and `SpecialKey` elsewhere, like NeoVim). Fix: make `SpecialKey` more like special keys (the highlight in vimscript for, e.g., `map <Space> :echo "hello"<CR>`). This has the side effect of making digraphs more visible. It also makes certain `'listchars'` pink, which may be annoying. But there is no way currently to separate the two in vim. Rationale: It matches with the special keys in maps. The fact that vim uses it elsewhere may simply be "wrong" and need changed. If you don't like it: well, as usual, you can use an autocommand to use whatever colors you want (`:help dracula-customization`).
319 lines
9.3 KiB
VimL
319 lines
9.3 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_underline')
|
|
let g:dracula_underline = 1
|
|
endif
|
|
|
|
if !exists('g:dracula_undercurl')
|
|
let g:dracula_undercurl = g:dracula_underline
|
|
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
|
|
|
|
"}}}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, 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 DraculaBgDarker
|
|
hi! link TabLineSel Normal
|
|
hi! link Title DraculaGreenBold
|
|
hi! link VertSplit DraculaBoundary
|
|
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
|
|
hi! link LspDiagnosticsDefaultInformation DraculaCyan
|
|
hi! link LspDiagnosticsDefaultHint DraculaCyan
|
|
hi! link LspDiagnosticsDefaultError DraculaError
|
|
hi! link LspDiagnosticsDefaultWarning DraculaOrange
|
|
hi! link LspDiagnosticsUnderlineError DraculaErrorLine
|
|
hi! link LspDiagnosticsUnderlineHint DraculaInfoLine
|
|
hi! link LspDiagnosticsUnderlineInformation DraculaInfoLine
|
|
hi! link LspDiagnosticsUnderlineWarning DraculaWarnLine
|
|
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:
|