Mercurial > ec-dotfiles
view vendor/vim-colors/PaperColor.vim @ 674:7423d2c773e4
Merge
author | nanaya <me@nanaya.pro> |
---|---|
date | Tue, 05 Apr 2022 13:55:57 +0900 |
parents | 6cdd7d26260d |
children | 17cacf387f7c |
line wrap: on
line source
" Theme: PaperColor " Author: Nikyle Nguyen <NLKNguyen@MSN.com> " License: MIT " Source: http://github.com/NLKNguyen/papercolor-theme let s:version = '0.9.x' " Note on navigating this source code: " - Use folding feature to collapse/uncollapse blocks of marked code " zM to fold all markers in this file to see the structure of the source code " zR to unfold all recursively " za to toggle a fold " See: http://vim.wikia.com/wiki/Folding " - The main section is at the end where the functions are called in order. " Theme Repository: {{{ let s:themes = {} " }}} fun! s:register_default_theme() " Theme name should be lowercase let s:themes['default'] = { \ 'maintainer' : 'Nikyle Nguyen <me@Nikyle.com>', \ 'source' : 'http://github.com/NLKNguyen/papercolor-theme', \ 'description' : 'The original PaperColor Theme, inspired by Google Material Design', \ 'options' : { \ 'allow_bold': 1 \ } \ } " Theme can have 'light' and/or 'dark' color palette. " Color values can be HEX and/or 256-color. Use empty string '' if not provided. " Only color00 -> color15 are required. The rest are optional. let s:themes['default'].light = { \ 'NO_CONVERSION': 1, \ 'TEST_256_COLOR_CONSISTENCY' : 1, \ 'palette' : { \ 'color00' : ['#eeeeee', '255'], \ 'color01' : ['#af0000', '124'], \ 'color02' : ['#008700', '28'], \ 'color03' : ['#5f8700', '64'], \ 'color04' : ['#0087af', '31'], \ 'color05' : ['#878787', '102'], \ 'color06' : ['#005f87', '24'], \ 'color07' : ['#444444', '238'], \ 'color08' : ['#bcbcbc', '250'], \ 'color09' : ['#d70000', '160'], \ 'color10' : ['#d70087', '162'], \ 'color11' : ['#8700af', '91'], \ 'color12' : ['#d75f00', '166'], \ 'color13' : ['#d75f00', '166'], \ 'color14' : ['#005faf', '25'], \ 'color15' : ['#005f87', '24'], \ 'color16' : ['#0087af', '31'], \ 'color17' : ['#008700', '28'], \ 'cursor_fg' : ['#eeeeee', '255'], \ 'cursor_bg' : ['#005f87', '24'], \ 'cursorline' : ['#e4e4e4', '254'], \ 'cursorcolumn' : ['#e4e4e4', '254'], \ 'cursorlinenr_fg' : ['#af5f00', '130'], \ 'cursorlinenr_bg' : ['#eeeeee', '255'], \ 'popupmenu_fg' : ['#444444', '238'], \ 'popupmenu_bg' : ['#d0d0d0', '252'], \ 'search_fg' : ['#444444', '238'], \ 'search_bg' : ['#ffff5f', '227'], \ 'linenumber_fg' : ['#b2b2b2', '249'], \ 'linenumber_bg' : ['#eeeeee', '255'], \ 'vertsplit_fg' : ['#005f87', '24'], \ 'vertsplit_bg' : ['#eeeeee', '255'], \ 'statusline_active_fg' : ['#e4e4e4', '254'], \ 'statusline_active_bg' : ['#005f87', '24'], \ 'statusline_inactive_fg' : ['#444444', '238'], \ 'statusline_inactive_bg' : ['#d0d0d0', '252'], \ 'todo_fg' : ['#00af5f', '35'], \ 'todo_bg' : ['#eeeeee', '255'], \ 'error_fg' : ['#af0000', '124'], \ 'error_bg' : ['#ffd7ff', '225'], \ 'matchparen_bg' : ['#c6c6c6', '251'], \ 'matchparen_fg' : ['#005f87', '24'], \ 'visual_fg' : ['#eeeeee', '255'], \ 'visual_bg' : ['#0087af', '31'], \ 'folded_fg' : ['#0087af', '31'], \ 'folded_bg' : ['#afd7ff', '153'], \ 'wildmenu_fg': ['#444444', '238'], \ 'wildmenu_bg': ['#ffff00', '226'], \ 'spellbad': ['#ffafd7', '218'], \ 'spellcap': ['#ffffaf', '229'], \ 'spellrare': ['#afff87', '156'], \ 'spelllocal': ['#d7d7ff', '189'], \ 'diffadd_fg': ['#008700', '28'], \ 'diffadd_bg': ['#afffaf', '157'], \ 'diffdelete_fg': ['#af0000', '124'], \ 'diffdelete_bg': ['#ffd7ff', '225'], \ 'difftext_fg': ['#0087af', '31'], \ 'difftext_bg': ['#ffffd7', '230'], \ 'diffchange_fg': ['#444444', '238'], \ 'diffchange_bg': ['#ffd787', '222'], \ 'tabline_bg': ['#005f87', '24'], \ 'tabline_active_fg': ['#444444', '238'], \ 'tabline_active_bg': ['#e4e4e4', '254'], \ 'tabline_inactive_fg': ['#eeeeee', '255'], \ 'tabline_inactive_bg': ['#0087af', '31'], \ 'buftabline_bg': ['#005f87', '24'], \ 'buftabline_current_fg': ['#444444', '238'], \ 'buftabline_current_bg': ['#e4e4e4', '254'], \ 'buftabline_active_fg': ['#eeeeee', '255'], \ 'buftabline_active_bg': ['#005faf', '25'], \ 'buftabline_inactive_fg': ['#eeeeee', '255'], \ 'buftabline_inactive_bg': ['#0087af', '31'] \ } \ } " TODO: idea for subtheme options " let s:themes['default'].light.subtheme = { " \ 'alternative' : { " \ 'options' : { " \ 'transparent_background': 1 " \ }, " \ 'palette' : { " \ } " \ } " \ } let s:themes['default'].dark = { \ 'NO_CONVERSION': 1, \ 'TEST_256_COLOR_CONSISTENCY' : 1, \ 'palette' : { \ 'color00' : ['#1c1c1c', '234'], \ 'color01' : ['#af005f', '125'], \ 'color02' : ['#5faf00', '70'], \ 'color03' : ['#d7af5f', '179'], \ 'color04' : ['#5fafd7', '74'], \ 'color05' : ['#808080', '244'], \ 'color06' : ['#d7875f', '173'], \ 'color07' : ['#d0d0d0', '252'], \ 'color08' : ['#585858', '240'], \ 'color09' : ['#5faf5f', '71'], \ 'color10' : ['#afd700', '148'], \ 'color11' : ['#af87d7', '140'], \ 'color12' : ['#ffaf00', '214'], \ 'color13' : ['#ff5faf', '205'], \ 'color14' : ['#00afaf', '37'], \ 'color15' : ['#5f8787', '66'], \ 'color16' : ['#5fafd7', '74'], \ 'color17' : ['#d7af00', '178'], \ 'cursor_fg' : ['#1c1c1c', '234'], \ 'cursor_bg' : ['#c6c6c6', '251'], \ 'cursorline' : ['#303030', '236'], \ 'cursorcolumn' : ['#303030', '236'], \ 'cursorlinenr_fg' : ['#ffff00', '226'], \ 'cursorlinenr_bg' : ['#1c1c1c', '234'], \ 'popupmenu_fg' : ['#c6c6c6', '251'], \ 'popupmenu_bg' : ['#303030', '236'], \ 'search_fg' : ['#000000', '16'], \ 'search_bg' : ['#00875f', '29'], \ 'linenumber_fg' : ['#585858', '240'], \ 'linenumber_bg' : ['#1c1c1c', '234'], \ 'vertsplit_fg' : ['#5f8787', '66'], \ 'vertsplit_bg' : ['#1c1c1c', '234'], \ 'statusline_active_fg' : ['#1c1c1c', '234'], \ 'statusline_active_bg' : ['#5f8787', '66'], \ 'statusline_inactive_fg' : ['#bcbcbc', '250'], \ 'statusline_inactive_bg' : ['#3a3a3a', '237'], \ 'todo_fg' : ['#ff8700', '208'], \ 'todo_bg' : ['#1c1c1c', '234'], \ 'error_fg' : ['#af005f', '125'], \ 'error_bg' : ['#5f0000', '52'], \ 'matchparen_bg' : ['#4e4e4e', '239'], \ 'matchparen_fg' : ['#c6c6c6', '251'], \ 'visual_fg' : ['#000000', '16'], \ 'visual_bg' : ['#8787af', '103'], \ 'folded_fg' : ['#d787ff', '177'], \ 'folded_bg' : ['#5f005f', '53'], \ 'wildmenu_fg': ['#1c1c1c', '234'], \ 'wildmenu_bg': ['#afd700', '148'], \ 'spellbad': ['#5f0000', '52'], \ 'spellcap': ['#5f005f', '53'], \ 'spellrare': ['#005f00', '22'], \ 'spelllocal': ['#00005f', '17'], \ 'diffadd_fg': ['#87d700', '112'], \ 'diffadd_bg': ['#005f00', '22'], \ 'diffdelete_fg': ['#af005f', '125'], \ 'diffdelete_bg': ['#5f0000', '52'], \ 'difftext_fg': ['#5fffff', '87'], \ 'difftext_bg': ['#008787', '30'], \ 'diffchange_fg': ['#d0d0d0', '252'], \ 'diffchange_bg': ['#005f5f', '23'], \ 'tabline_bg': ['#262626', '235'], \ 'tabline_active_fg': ['#121212', '233'], \ 'tabline_active_bg': ['#00afaf', '37'], \ 'tabline_inactive_fg': ['#bcbcbc', '250'], \ 'tabline_inactive_bg': ['#585858', '240'], \ 'buftabline_bg': ['#262626', '235'], \ 'buftabline_current_fg': ['#121212', '233'], \ 'buftabline_current_bg': ['#00afaf', '37'], \ 'buftabline_active_fg': ['#00afaf', '37'], \ 'buftabline_active_bg': ['#585858', '240'], \ 'buftabline_inactive_fg': ['#bcbcbc', '250'], \ 'buftabline_inactive_bg': ['#585858', '240'] \ } \ } endfun " ============================ THEME REGISTER ================================= " Acquire Theme Data: {{{ " Brief: " Function to get theme information and store in variables for other " functions to use " " Require: " s:themes <dictionary> collection of all theme palettes " " Require Optionally: " {g:PaperColor_Theme_[s:theme_name]} <dictionary> user custom theme palette " g:PaperColor_Theme_Options <dictionary> user options " " Expose: " s:theme_name <string> the name of the selected theme " s:selected_theme <dictionary> the selected theme object (contains palette, etc.) " s:selected_variant <string> 'light' or 'dark' " s:palette <dictionary> the palette of selected theme " s:options <dictionary> user options fun! s:acquire_theme_data() " Get theme name: {{{ let s:theme_name = 'default' if exists("g:PaperColor_Theme") " Users expressed theme preference let lowercase_theme_name = tolower(g:PaperColor_Theme) if lowercase_theme_name !=? 'default' let theme_identifier = 'PaperColor_' . lowercase_theme_name let autoload_function = theme_identifier . '#register' call {autoload_function}() let theme_variable = 'g:' . theme_identifier if exists(theme_variable) let s:theme_name = lowercase_theme_name let s:themes[s:theme_name] = {theme_variable} endif endif endif " }}} if s:theme_name ==? 'default' " Either no other theme is specified or they failed to load " Defer loading default theme until now call s:register_default_theme() endif let s:selected_theme = s:themes[s:theme_name] " Get Theme Variant: either dark or light {{{ let s:selected_variant = 'dark' let s:is_dark=(&background == 'dark') if s:is_dark if has_key(s:selected_theme, 'dark') let s:selected_variant = 'dark' else " in case the theme only provides the other variant let s:selected_variant = 'light' endif else " is light background if has_key(s:selected_theme, 'light') let s:selected_variant = 'light' else " in case the theme only provides the other variant let s:selected_variant = 'dark' endif endif let s:palette = s:selected_theme[s:selected_variant].palette " Systematic User-Config Options: {{{ " Example config in .vimrc " let g:PaperColor_Theme_Options = { " \ 'theme': { " \ 'default': { " \ 'allow_bold': 1, " \ 'allow_italic': 0, " \ 'transparent_background': 1 " \ } " \ }, " \ 'language': { " \ 'python': { " \ 'highlight_builtins' : 1 " \ }, " \ 'c': { " \ 'highlight_builtins' : 1 " \ }, " \ 'cpp': { " \ 'highlight_standard_library': 1 " \ } " \ } " \ } " let s:options = {} if exists("g:PaperColor_Theme_Options") let s:options = g:PaperColor_Theme_Options endif " }}} " }}} endfun " }}} " Identify Color Mode: {{{ fun! s:identify_color_mode() let s:MODE_16_COLOR = 0 let s:MODE_256_COLOR = 1 let s:MODE_GUI_COLOR = 2 if has("gui_running") || has('termguicolors') && &termguicolors || has('nvim') && $NVIM_TUI_ENABLE_TRUE_COLOR let s:mode = s:MODE_GUI_COLOR elseif (&t_Co >= 256) let s:mode = s:MODE_256_COLOR else let s:mode = s:MODE_16_COLOR endif endfun " }}} " ============================ OPTION HANDLER ================================= " Generate Them Option Variables: {{{ fun! s:generate_theme_option_variables() " 0. All possible theme option names must be registered here let l:available_theme_options = [ \ 'allow_bold', \ 'allow_italic', \ 'transparent_background', \ ] " 1. Generate variables and set to default value for l:option in l:available_theme_options let s:{'themeOpt_' . l:option} = 0 endfor let s:themeOpt_override = {} " special case, this has to be a dictionary " 2. Reassign value to the above variables based on theme settings " 2.1 In case the theme has top-level options if has_key(s:selected_theme, 'options') let l:theme_options = s:selected_theme['options'] for l:opt_name in keys(l:theme_options) let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} endfor endif " 2.2 In case the theme has specific variant options if has_key(s:selected_theme[s:selected_variant], 'options') let l:theme_options = s:selected_theme[s:selected_variant]['options'] for l:opt_name in keys(l:theme_options) let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} endfor endif " 3. Reassign value to the above variables which the user customizes " Part of user-config options let s:theme_options = {} if has_key(s:options, 'theme') let s:theme_options = s:options['theme'] endif " 3.1 In case user sets for a theme without specifying which variant if has_key(s:theme_options, s:theme_name) let l:theme_options = s:theme_options[s:theme_name] for l:opt_name in keys(l:theme_options) let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} endfor endif " 3.2 In case user sets for a specific variant of a theme " Create the string that the user might have set for this theme variant " for example, 'default.dark' let l:specific_theme_variant = s:theme_name . '.' . s:selected_variant if has_key(s:theme_options, l:specific_theme_variant) let l:theme_options = s:theme_options[l:specific_theme_variant] for l:opt_name in keys(l:theme_options) let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} endfor endif endfun " }}} " Check If Theme Has Hint: {{{ " " Brief: " Function to Check if the selected theme and variant has a hint " " Details: " A hint is a known key that has value 1 " It is not part of theme design but is used for technical purposes " " Example: " If a theme has hint 'NO_CONVERSION', then we can assume that every " color value is a complete pair, so we don't have to check. fun! s:theme_has_hint(hint) return has_key(s:selected_theme[s:selected_variant], a:hint) && \ s:selected_theme[s:selected_variant][a:hint] == 1 endfun " }}} " Set Overriding Colors: {{{ fun! s:set_overriding_colors() if s:theme_has_hint('NO_CONVERSION') " s:convert_colors will not do anything, so we take care of conversion " for the overriding colors that need to be converted if s:mode == s:MODE_GUI_COLOR " if GUI color is not provided, convert from 256 color that must be available if !empty(s:themeOpt_override) call s:load_256_to_GUI_converter() endif for l:color in keys(s:themeOpt_override) let l:value = s:themeOpt_override[l:color] if l:value[0] == '' let l:value[0] = s:to_HEX[l:value[1]] endif let s:palette[l:color] = l:value endfor elseif s:mode == s:MODE_256_COLOR " if 256 color is not provided, convert from GUI color that must be available if !empty(s:themeOpt_override) call s:load_GUI_to_256_converter() endif for l:color in keys(s:themeOpt_override) let l:value = s:themeOpt_override[l:color] if l:value[1] == '' let l:value[1] = s:to_256(l:value[0]) endif let s:palette[l:color] = l:value endfor endif else " simply set the colors and let s:convert_colors() take care of conversion for l:color in keys(s:themeOpt_override) let s:palette[l:color] = s:themeOpt_override[l:color] endfor endif endfun " }}} " Generate Language Option Variables: {{{ " Brief: " Function to generate language option variables so that there is no need to " look up from the dictionary every time the option value is checked in the " function s:apply_syntax_highlightings() " " Require: " s:options <dictionary> user options " " Require Optionally: " g:PaperColor_Theme_Options <dictionary> user option config in .vimrc " " Expose: " s:langOpt_[LANGUAGE]__[OPTION] <any> variables for language options " " Example: " g:PaperColor_Theme_Options has something like this: " 'language': { " \ 'python': { " \ 'highlight_builtins': 1 " \ } " } " The following variable will be generated: " s:langOpt_python__highlight_builtins = 1 fun! s:generate_language_option_variables() " 0. All possible theme option names must be registered here let l:available_language_options = [ \ 'c__highlight_builtins', \ 'cpp__highlight_standard_library', \ 'python__highlight_builtins' \ ] " 1. Generate variables and set to default value for l:option in l:available_language_options let s:{'langOpt_' . l:option} = 0 endfor " Part of user-config options if has_key(s:options, 'language') let l:language_options = s:options['language'] " echo l:language_options for l:lang in keys(l:language_options) let l:options = l:language_options[l:lang] " echo l:lang " echo l:options for l:option in keys(l:options) let s:{'langOpt_' . l:lang . '__' . l:option} = l:options[l:option] " echo 's:langOpt_' . l:lang . '__' . l:option . ' = ' . l:options[l:option] endfor endfor endif endfun " }}} " =========================== COLOR CONVERTER ================================= fun! s:load_GUI_to_256_converter() " GUI-color To 256-color: {{{ " Returns an approximate grey index for the given grey level fun! s:grey_number(x) if &t_Co == 88 if a:x < 23 return 0 elseif a:x < 69 return 1 elseif a:x < 103 return 2 elseif a:x < 127 return 3 elseif a:x < 150 return 4 elseif a:x < 173 return 5 elseif a:x < 196 return 6 elseif a:x < 219 return 7 elseif a:x < 243 return 8 else return 9 endif else if a:x < 14 return 0 else let l:n = (a:x - 8) / 10 let l:m = (a:x - 8) % 10 if l:m < 5 return l:n else return l:n + 1 endif endif endif endfun " Returns the actual grey level represented by the grey index fun! s:grey_level(n) if &t_Co == 88 if a:n == 0 return 0 elseif a:n == 1 return 46 elseif a:n == 2 return 92 elseif a:n == 3 return 115 elseif a:n == 4 return 139 elseif a:n == 5 return 162 elseif a:n == 6 return 185 elseif a:n == 7 return 208 elseif a:n == 8 return 231 else return 255 endif else if a:n == 0 return 0 else return 8 + (a:n * 10) endif endif endfun " Returns the palette index for the given grey index fun! s:grey_colour(n) if &t_Co == 88 if a:n == 0 return 16 elseif a:n == 9 return 79 else return 79 + a:n endif else if a:n == 0 return 16 elseif a:n == 25 return 231 else return 231 + a:n endif endif endfun " Returns an approximate colour index for the given colour level fun! s:rgb_number(x) if &t_Co == 88 if a:x < 69 return 0 elseif a:x < 172 return 1 elseif a:x < 230 return 2 else return 3 endif else if a:x < 75 return 0 else let l:n = (a:x - 55) / 40 let l:m = (a:x - 55) % 40 if l:m < 20 return l:n else return l:n + 1 endif endif endif endfun " Returns the actual colour level for the given colour index fun! s:rgb_level(n) if &t_Co == 88 if a:n == 0 return 0 elseif a:n == 1 return 139 elseif a:n == 2 return 205 else return 255 endif else if a:n == 0 return 0 else return 55 + (a:n * 40) endif endif endfun " Returns the palette index for the given R/G/B colour indices fun! s:rgb_colour(x, y, z) if &t_Co == 88 return 16 + (a:x * 16) + (a:y * 4) + a:z else return 16 + (a:x * 36) + (a:y * 6) + a:z endif endfun " Returns the palette index to approximate the given R/G/B colour levels fun! s:colour(r, g, b) " Get the closest grey let l:gx = s:grey_number(a:r) let l:gy = s:grey_number(a:g) let l:gz = s:grey_number(a:b) " Get the closest colour let l:x = s:rgb_number(a:r) let l:y = s:rgb_number(a:g) let l:z = s:rgb_number(a:b) if l:gx == l:gy && l:gy == l:gz " There are two possibilities let l:dgr = s:grey_level(l:gx) - a:r let l:dgg = s:grey_level(l:gy) - a:g let l:dgb = s:grey_level(l:gz) - a:b let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) let l:dr = s:rgb_level(l:gx) - a:r let l:dg = s:rgb_level(l:gy) - a:g let l:db = s:rgb_level(l:gz) - a:b let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) if l:dgrey < l:drgb " Use the grey return s:grey_colour(l:gx) else " Use the colour return s:rgb_colour(l:x, l:y, l:z) endif else " Only one possibility return s:rgb_colour(l:x, l:y, l:z) endif endfun " Returns the palette index to approximate the '#rrggbb' hex string fun! s:to_256(rgb) let l:r = ("0x" . strpart(a:rgb, 1, 2)) + 0 let l:g = ("0x" . strpart(a:rgb, 3, 2)) + 0 let l:b = ("0x" . strpart(a:rgb, 5, 2)) + 0 return s:colour(l:r, l:g, l:b) endfun " }}} endfun fun! s:load_256_to_GUI_converter() " 256-color To GUI-color: {{{ """ Xterm 256 color dictionary " See: http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html " let s:to_HEX = { \ '00': '#000000', '01': '#800000', '02': '#008000', '03': '#808000', '04': '#000080', \ '05': '#800080', '06': '#008080', '07': '#c0c0c0', '08': '#808080', '09': '#ff0000', \ '10': '#00ff00', '11': '#ffff00', '12': '#0000ff', '13': '#ff00ff', '14': '#00ffff', \ '15': '#ffffff', '16': '#000000', '17': '#00005f', '18': '#000087', '19': '#0000af', \ '20': '#0000d7', '21': '#0000ff', '22': '#005f00', '23': '#005f5f', '24': '#005f87', \ '25': '#005faf', '26': '#005fd7', '27': '#005fff', '28': '#008700', '29': '#00875f', \ '30': '#008787', '31': '#0087af', '32': '#0087d7', '33': '#0087ff', '34': '#00af00', \ '35': '#00af5f', '36': '#00af87', '37': '#00afaf', '38': '#00afd7', '39': '#00afff', \ '40': '#00d700', '41': '#00d75f', '42': '#00d787', '43': '#00d7af', '44': '#00d7d7', \ '45': '#00d7ff', '46': '#00ff00', '47': '#00ff5f', '48': '#00ff87', '49': '#00ffaf', \ '50': '#00ffd7', '51': '#00ffff', '52': '#5f0000', '53': '#5f005f', '54': '#5f0087', \ '55': '#5f00af', '56': '#5f00d7', '57': '#5f00ff', '58': '#5f5f00', '59': '#5f5f5f', \ '60': '#5f5f87', '61': '#5f5faf', '62': '#5f5fd7', '63': '#5f5fff', '64': '#5f8700', \ '65': '#5f875f', '66': '#5f8787', '67': '#5f87af', '68': '#5f87d7', '69': '#5f87ff', \ '70': '#5faf00', '71': '#5faf5f', '72': '#5faf87', '73': '#5fafaf', '74': '#5fafd7', \ '75': '#5fafff', '76': '#5fd700', '77': '#5fd75f', '78': '#5fd787', '79': '#5fd7af', \ '80': '#5fd7d7', '81': '#5fd7ff', '82': '#5fff00', '83': '#5fff5f', '84': '#5fff87', \ '85': '#5fffaf', '86': '#5fffd7', '87': '#5fffff', '88': '#870000', '89': '#87005f', \ '90': '#870087', '91': '#8700af', '92': '#8700d7', '93': '#8700ff', '94': '#875f00', \ '95': '#875f5f', '96': '#875f87', '97': '#875faf', '98': '#875fd7', '99': '#875fff', \ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af', '104': '#8787d7', \ '105': '#8787ff', '106': '#87af00', '107': '#87af5f', '108': '#87af87', '109': '#87afaf', \ '110': '#87afd7', '111': '#87afff', '112': '#87d700', '113': '#87d75f', '114': '#87d787', \ '115': '#87d7af', '116': '#87d7d7', '117': '#87d7ff', '118': '#87ff00', '119': '#87ff5f', \ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffd7', '123': '#87ffff', '124': '#af0000', \ '125': '#af005f', '126': '#af0087', '127': '#af00af', '128': '#af00d7', '129': '#af00ff', \ '130': '#af5f00', '131': '#af5f5f', '132': '#af5f87', '133': '#af5faf', '134': '#af5fd7', \ '135': '#af5fff', '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af', \ '140': '#af87d7', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f', '144': '#afaf87', \ '145': '#afafaf', '146': '#afafd7', '147': '#afafff', '148': '#afd700', '149': '#afd75f', \ '150': '#afd787', '151': '#afd7af', '152': '#afd7d7', '153': '#afd7ff', '154': '#afff00', \ '155': '#afff5f', '156': '#afff87', '157': '#afffaf', '158': '#afffd7', '159': '#afffff', \ '160': '#d70000', '161': '#d7005f', '162': '#d70087', '163': '#d700af', '164': '#d700d7', \ '165': '#d700ff', '166': '#d75f00', '167': '#d75f5f', '168': '#d75f87', '169': '#d75faf', \ '170': '#d75fd7', '171': '#d75fff', '172': '#d78700', '173': '#d7875f', '174': '#d78787', \ '175': '#d787af', '176': '#d787d7', '177': '#d787ff', '178': '#d7af00', '179': '#d7af5f', \ '180': '#d7af87', '181': '#d7afaf', '182': '#d7afd7', '183': '#d7afff', '184': '#d7d700', \ '185': '#d7d75f', '186': '#d7d787', '187': '#d7d7af', '188': '#d7d7d7', '189': '#d7d7ff', \ '190': '#d7ff00', '191': '#d7ff5f', '192': '#d7ff87', '193': '#d7ffaf', '194': '#d7ffd7', \ '195': '#d7ffff', '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af', \ '200': '#ff00d7', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f', '204': '#ff5f87', \ '205': '#ff5faf', '206': '#ff5fd7', '207': '#ff5fff', '208': '#ff8700', '209': '#ff875f', \ '210': '#ff8787', '211': '#ff87af', '212': '#ff87d7', '213': '#ff87ff', '214': '#ffaf00', \ '215': '#ffaf5f', '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafd7', '219': '#ffafff', \ '220': '#ffd700', '221': '#ffd75f', '222': '#ffd787', '223': '#ffd7af', '224': '#ffd7d7', \ '225': '#ffd7ff', '226': '#ffff00', '227': '#ffff5f', '228': '#ffff87', '229': '#ffffaf', \ '230': '#ffffd7', '231': '#ffffff', '232': '#080808', '233': '#121212', '234': '#1c1c1c', \ '235': '#262626', '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e', \ '240': '#585858', '241': '#626262', '242': '#6c6c6c', '243': '#767676', '244': '#808080', \ '245': '#8a8a8a', '246': '#949494', '247': '#9e9e9e', '248': '#a8a8a8', '249': '#b2b2b2', \ '250': '#bcbcbc', '251': '#c6c6c6', '252': '#d0d0d0', '253': '#dadada', '254': '#e4e4e4', \ '255': '#eeeeee' } " }}} endfun " ========================== ENVIRONMENT ADAPTER ============================== " Set Format Attributes: {{{ fun! s:set_format_attributes() " These are the default if s:mode == s:MODE_GUI_COLOR let s:ft_bold = " cterm=bold gui=bold " let s:ft_none = " cterm=none gui=none " let s:ft_reverse = " cterm=reverse gui=reverse " let s:ft_italic = " cterm=italic gui=italic " let s:ft_italic_bold = " cterm=italic,bold gui=italic,bold " elseif s:mode == s:MODE_256_COLOR let s:ft_bold = " cterm=bold " let s:ft_none = " cterm=none " let s:ft_reverse = " cterm=reverse " let s:ft_italic = " cterm=italic " let s:ft_italic_bold = " cterm=italic,bold " else let s:ft_bold = "" let s:ft_none = " cterm=none " let s:ft_reverse = " cterm=reverse " let s:ft_italic = "" let s:ft_italic_bold = "" endif " Unless instructed otherwise either by theme setting or user overriding if s:themeOpt_allow_bold == 0 let s:ft_bold = "" endif if s:themeOpt_allow_italic == 0 let s:ft_italic = "" let s:ft_italic_bold = s:ft_bold endif endfun " }}} " Convert Colors If Needed: {{{ fun! s:convert_colors() if s:theme_has_hint('NO_CONVERSION') return endif if s:mode == s:MODE_GUI_COLOR " if GUI color is not provided, convert from 256 color that must be available call s:load_256_to_GUI_converter() for l:color in keys(s:palette) let l:value = s:palette[l:color] if l:value[0] == '' let l:value[0] = s:to_HEX[l:value[1]] endif let s:palette[l:color] = l:value endfor elseif s:mode == s:MODE_256_COLOR " if 256 color is not provided, convert from GUI color that must be available call s:load_GUI_to_256_converter() for l:color in keys(s:palette) let l:value = s:palette[l:color] if l:value[1] == '' let l:value[1] = s:to_256(l:value[0]) endif let s:palette[l:color] = l:value endfor endif " otherwise use the terminal colors and none of the theme colors are used endfun " }}} " ============================ COLOR POPULARIZER =============================== " Set Color Variables: {{{ fun! s:set_color_variables() " Helper: {{{ " ------- " Function to dynamically generate variables that store the color strings " for setting highlighting. Each color name will have 2 variables with prefix " s:fg_ and s:bg_. For example: " if a:color_name is 'Normal' and a:color_value is ['#000000', '0', 'Black'], " the following 2 variables will be created: " s:fg_Normal that stores the string ' guifg=#000000 ' " s:bg_Normal that stores the string ' guibg=#000000 ' " Depending on the color mode, ctermfg and ctermbg will be either 0 or Black " " Rationale: " The whole purpose is for speed. We generate these ahead of time so that we " don't have to do look up or do any if-branch when we set the highlightings. " " Furthermore, multiple function definitions for each mode actually reduces " the need for multiple if-branches inside a single function. This is not " pretty, but Vim Script is slow, so reducing if-branches in function that is " often called helps speeding things up quite a bit. Think of this like macro. " " If you are familiar with the old code base (v0.9 and ealier), this way of " generate variables dramatically reduces the loading speed. " None of previous optimization tricks gets anywhere near this. if s:mode == s:MODE_GUI_COLOR fun! s:create_color_variables(color_name, rich_color, term_color) let {'s:fg_' . a:color_name} = ' guifg=' . a:rich_color[0] . ' ' let {'s:bg_' . a:color_name} = ' guibg=' . a:rich_color[0] . ' ' let {'s:sp_' . a:color_name} = ' guisp=' . a:rich_color[0] . ' ' endfun elseif s:mode == s:MODE_256_COLOR fun! s:create_color_variables(color_name, rich_color, term_color) let {'s:fg_' . a:color_name} = ' ctermfg=' . a:rich_color[1] . ' ' let {'s:bg_' . a:color_name} = ' ctermbg=' . a:rich_color[1] . ' ' let {'s:sp_' . a:color_name} = '' endfun else fun! s:create_color_variables(color_name, rich_color, term_color) let {'s:fg_' . a:color_name} = ' ctermfg=' . a:term_color . ' ' let {'s:bg_' . a:color_name} = ' ctermbg=' . a:term_color . ' ' let {'s:sp_' . a:color_name} = '' endfun endif " }}} " Color value format: Array [<GUI COLOR/HEX >, <256-Base>, <16-Base>] " 16-Base is terminal's native color palette that can be alternated through " the terminal settings. The 16-color names are according to `:h cterm-colors` " BASIC COLORS: " color00-15 are required by all themes. " These are also how the terminal color palette for the target theme should be. " See README for theme design guideline " " An example format of the below variable's value: ['#262626', '234', 'Black'] " Where the 1st value is HEX color for GUI Vim, 2nd value is for 256-color terminal, " and the color name on the right is for 16-color terminal (the actual terminal colors " can be different from what the color names suggest). See :h cterm-colors " " Depending on the provided color palette and current Vim, the 1st and 2nd " parameter might not exist, for example, on 16-color terminal, the variables below " only store the color names to use the terminal color palette which is the only " thing available therefore no need for GUI-color or 256-color. let color00 = get(s:palette, 'color00') let color01 = get(s:palette, 'color01') let color02 = get(s:palette, 'color02') let color03 = get(s:palette, 'color03') let color04 = get(s:palette, 'color04') let color05 = get(s:palette, 'color05') let color06 = get(s:palette, 'color06') let color07 = get(s:palette, 'color07') let color08 = get(s:palette, 'color08') let color09 = get(s:palette, 'color09') let color10 = get(s:palette, 'color10') let color11 = get(s:palette, 'color11') let color12 = get(s:palette, 'color12') let color13 = get(s:palette, 'color13') let color14 = get(s:palette, 'color14') let color15 = get(s:palette, 'color15') call s:create_color_variables('background', color00 , 'Black') call s:create_color_variables('negative', color01 , 'DarkRed') call s:create_color_variables('positive', color02 , 'DarkGreen') call s:create_color_variables('olive', color03 , 'DarkYellow') " string call s:create_color_variables('neutral', color04 , 'DarkBlue') call s:create_color_variables('comment', color05 , 'DarkMagenta') call s:create_color_variables('navy', color06 , 'DarkCyan') " storageclass call s:create_color_variables('foreground', color07 , 'LightGray') call s:create_color_variables('nontext', color08 , 'DarkGray') call s:create_color_variables('red', color09 , 'LightRed') " import / try/catch call s:create_color_variables('pink', color10 , 'LightGreen') " statement, type call s:create_color_variables('purple', color11 , 'LightYellow') " if / conditional call s:create_color_variables('accent', color12 , 'LightBlue') call s:create_color_variables('orange', color13 , 'LightMagenta') " number call s:create_color_variables('blue', color14 , 'LightCyan') " other keyword call s:create_color_variables('highlight', color15 , 'White') " Note: special case for FoldColumn group. I want to get rid of this case. call s:create_color_variables('transparent', [color00[0], 'none'], 'none') " EXTENDED COLORS: " From here on, all colors are optional and must have default values (3rd parameter of the " `get` command) that point to the above basic colors in case the target theme doesn't " provide the extended colors. The default values should be reasonably sensible. " The terminal color must be provided also. call s:create_color_variables('aqua', get(s:palette, 'color16', color14) , 'LightCyan') call s:create_color_variables('green', get(s:palette, 'color17', color13) , 'LightMagenta') call s:create_color_variables('wine', get(s:palette, 'color18', color11) , 'LightYellow') " LineNumber: when set number call s:create_color_variables('linenumber_fg', get(s:palette, 'linenumber_fg', color08) , 'DarkGray') call s:create_color_variables('linenumber_bg', get(s:palette, 'linenumber_bg', color00) , 'Black') " Vertical Split: when there are more than 1 window side by side, ex: <C-W><C-V> call s:create_color_variables('vertsplit_fg', get(s:palette, 'vertsplit_fg', color15) , 'White') call s:create_color_variables('vertsplit_bg', get(s:palette, 'vertsplit_bg', color00) , 'Black') " Statusline: when set status=2 call s:create_color_variables('statusline_active_fg', get(s:palette, 'statusline_active_fg', color00) , 'Black') call s:create_color_variables('statusline_active_bg', get(s:palette, 'statusline_active_bg', color15) , 'White') call s:create_color_variables('statusline_inactive_fg', get(s:palette, 'statusline_inactive_fg', color07) , 'LightGray') call s:create_color_variables('statusline_inactive_bg', get(s:palette, 'statusline_inactive_bg', color08) , 'DarkGray') " Cursor: in normal mode call s:create_color_variables('cursor_fg', get(s:palette, 'cursor_fg', color00) , 'Black') call s:create_color_variables('cursor_bg', get(s:palette, 'cursor_bg', color07) , 'LightGray') call s:create_color_variables('cursorline', get(s:palette, 'cursorline', color00) , 'Black') " CursorColumn: when set cursorcolumn call s:create_color_variables('cursorcolumn', get(s:palette, 'cursorcolumn', color00) , 'Black') " CursorLine Number: when set cursorline number call s:create_color_variables('cursorlinenr_fg', get(s:palette, 'cursorlinenr_fg', color13) , 'LightMagenta') call s:create_color_variables('cursorlinenr_bg', get(s:palette, 'cursorlinenr_bg', color00) , 'Black') " Popup Menu: when <C-X><C-N> for autocomplete call s:create_color_variables('popupmenu_fg', get(s:palette, 'popupmenu_fg', color07) , 'LightGray') call s:create_color_variables('popupmenu_bg', get(s:palette, 'popupmenu_bg', color08) , 'DarkGray') " TODO: double check this, might resolve an issue " Search: ex: when * on a word call s:create_color_variables('search_fg', get(s:palette, 'search_fg', color00) , 'Black') call s:create_color_variables('search_bg', get(s:palette, 'search_bg', color15) , 'Yellow') " Todo: ex: TODO call s:create_color_variables('todo_fg', get(s:palette, 'todo_fg', color05) , 'LightYellow') call s:create_color_variables('todo_bg', get(s:palette, 'todo_bg', color00) , 'Black') " Error: ex: turn spell on and have invalid words call s:create_color_variables('error_fg', get(s:palette, 'error_fg', color01) , 'DarkRed') call s:create_color_variables('error_bg', get(s:palette, 'error_bg', color00) , 'Black') " Match Parenthesis: selecting an opening/closing pair and the other one will be highlighted call s:create_color_variables('matchparen_fg', get(s:palette, 'matchparen_fg', color00) , 'LightMagenta') call s:create_color_variables('matchparen_bg', get(s:palette, 'matchparen_bg', color05) , 'Black') " Visual: call s:create_color_variables('visual_fg', get(s:palette, 'visual_fg', color08) , 'Black') call s:create_color_variables('visual_bg', get(s:palette, 'visual_bg', color07) , 'White') " Folded: call s:create_color_variables('folded_fg', get(s:palette, 'folded_fg', color00) , 'Black') call s:create_color_variables('folded_bg', get(s:palette, 'folded_bg', color05) , 'DarkYellow') " WildMenu: Autocomplete command, ex: :color <tab><tab> call s:create_color_variables('wildmenu_fg', get(s:palette, 'wildmenu_fg', color00) , 'Black') call s:create_color_variables('wildmenu_bg', get(s:palette, 'wildmenu_bg', color06) , 'LightGray') " Spelling: when spell on and there are spelling problems like this for example: papercolor. a vim color scheme call s:create_color_variables('spellbad', get(s:palette, 'spellbad', color04) , 'DarkRed') call s:create_color_variables('spellcap', get(s:palette, 'spellcap', color05) , 'DarkMagenta') call s:create_color_variables('spellrare', get(s:palette, 'spellrare', color06) , 'DarkYellow') call s:create_color_variables('spelllocal', get(s:palette, 'spelllocal', color01) , 'DarkBlue') " Diff: call s:create_color_variables('diffadd_fg', get(s:palette, 'diffadd_fg', color00) , 'Black') call s:create_color_variables('diffadd_bg', get(s:palette, 'diffadd_bg', color02) , 'DarkGreen') call s:create_color_variables('diffdelete_fg', get(s:palette, 'diffdelete_fg', color00) , 'Black') call s:create_color_variables('diffdelete_bg', get(s:palette, 'diffdelete_bg', color04) , 'DarkRed') call s:create_color_variables('difftext_fg', get(s:palette, 'difftext_fg', color00) , 'Black') call s:create_color_variables('difftext_bg', get(s:palette, 'difftext_bg', color06) , 'DarkYellow') call s:create_color_variables('diffchange_fg', get(s:palette, 'diffchange_fg', color00) , 'Black') call s:create_color_variables('diffchange_bg', get(s:palette, 'diffchange_bg', color14) , 'LightYellow') " Tabline: when having tabs, ex: :tabnew call s:create_color_variables('tabline_bg', get(s:palette, 'tabline_bg', color00) , 'Black') call s:create_color_variables('tabline_active_fg', get(s:palette, 'tabline_active_fg', color07) , 'LightGray') call s:create_color_variables('tabline_active_bg', get(s:palette, 'tabline_active_bg', color00) , 'Black') call s:create_color_variables('tabline_inactive_fg', get(s:palette, 'tabline_inactive_fg', color07) , 'Black') call s:create_color_variables('tabline_inactive_bg', get(s:palette, 'tabline_inactive_bg', color08) , 'DarkMagenta') " Plugin: BufTabLine https://github.com/ap/vim-buftabline call s:create_color_variables('buftabline_bg', get(s:palette, 'buftabline_bg', color00) , 'Black') call s:create_color_variables('buftabline_current_fg', get(s:palette, 'buftabline_current_fg', color07) , 'LightGray') call s:create_color_variables('buftabline_current_bg', get(s:palette, 'buftabline_current_bg', color05) , 'DarkMagenta') call s:create_color_variables('buftabline_active_fg', get(s:palette, 'buftabline_active_fg', color07) , 'LightGray') call s:create_color_variables('buftabline_active_bg', get(s:palette, 'buftabline_active_bg', color12) , 'LightBlue') call s:create_color_variables('buftabline_inactive_fg', get(s:palette, 'buftabline_inactive_fg', color07) , 'LightGray') call s:create_color_variables('buftabline_inactive_bg', get(s:palette, 'buftabline_inactive_bg', color00) , 'Black') " Neovim terminal colors https://neovim.io/doc/user/nvim_terminal_emulator.html#nvim-terminal-emulator-configuration " TODO: Fix this let g:terminal_color_0 = color00[0] let g:terminal_color_1 = color01[0] let g:terminal_color_2 = color02[0] let g:terminal_color_3 = color03[0] let g:terminal_color_4 = color04[0] let g:terminal_color_5 = color05[0] let g:terminal_color_6 = color06[0] let g:terminal_color_7 = color07[0] let g:terminal_color_8 = color08[0] let g:terminal_color_9 = color09[0] let g:terminal_color_10 = color10[0] let g:terminal_color_11 = color11[0] let g:terminal_color_12 = color12[0] let g:terminal_color_13 = color13[0] let g:terminal_color_14 = color14[0] let g:terminal_color_15 = color15[0] " Vim 8's :terminal buffer ANSI colors if has('terminal') let g:terminal_ansi_colors = [color00[0], color01[0], color02[0], color03[0], \ color04[0], color05[0], color06[0], color07[0], color08[0], color09[0], \ color10[0], color11[0], color12[0], color13[0], color14[0], color15[0]] endif endfun " }}} " Apply Syntax Highlightings: {{{ fun! s:apply_syntax_highlightings() if s:themeOpt_transparent_background exec 'hi Normal' . s:fg_foreground " Switching between dark & light variant through `set background` " NOTE: Handle background switching right after `Normal` group because of " God-know-why reason. Not doing this way had caused issue before if s:is_dark " DARK VARIANT set background=dark else " LIGHT VARIANT set background=light endif exec 'hi NonText' . s:fg_nontext exec 'hi LineNr' . s:fg_linenumber_fg exec 'hi Conceal' . s:fg_linenumber_fg exec 'hi VertSplit' . s:fg_vertsplit_fg . s:ft_none exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_transparent . s:ft_none else exec 'hi Normal' . s:fg_foreground . s:bg_background " Switching between dark & light variant through `set background` if s:is_dark " DARK VARIANT set background=dark exec 'hi EndOfBuffer' . s:fg_cursor_fg . s:ft_none else " LIGHT VARIANT set background=light endif exec 'hi NonText' . s:fg_nontext . s:bg_background exec 'hi LineNr' . s:fg_linenumber_fg . s:bg_linenumber_bg exec 'hi Conceal' . s:fg_linenumber_fg . s:bg_linenumber_bg exec 'hi VertSplit' . s:fg_vertsplit_bg . s:bg_vertsplit_fg exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_background . s:ft_none endif exec 'hi Cursor' . s:fg_cursor_fg . s:bg_cursor_bg exec 'hi SpecialKey' . s:fg_nontext exec 'hi Search' . s:fg_search_fg . s:bg_search_bg exec 'hi StatusLine' . s:fg_statusline_active_bg . s:bg_statusline_active_fg exec 'hi StatusLineNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg exec 'hi StatusLineTerm' . s:fg_statusline_active_bg . s:bg_statusline_active_fg exec 'hi StatusLineTermNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg exec 'hi Visual' . s:fg_visual_fg . s:bg_visual_bg exec 'hi Directory' . s:fg_blue exec 'hi ModeMsg' . s:fg_olive exec 'hi MoreMsg' . s:fg_olive exec 'hi Question' . s:fg_olive exec 'hi WarningMsg' . s:fg_pink exec 'hi MatchParen' . s:fg_matchparen_fg . s:bg_matchparen_bg exec 'hi Folded' . s:fg_folded_fg . s:bg_folded_bg exec 'hi WildMenu' . s:fg_wildmenu_fg . s:bg_wildmenu_bg . s:ft_bold if version >= 700 exec 'hi CursorLine' . s:bg_cursorline . s:ft_none if s:mode == s:MODE_16_COLOR exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg else exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg . s:ft_none endif exec 'hi CursorColumn' . s:bg_cursorcolumn . s:ft_none exec 'hi PMenu' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi PMenuSel' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_reverse if s:themeOpt_transparent_background exec 'hi SignColumn' . s:fg_green . s:ft_none else exec 'hi SignColumn' . s:fg_green . s:bg_background . s:ft_none endif end if version >= 703 exec 'hi ColorColumn' . s:bg_cursorcolumn . s:ft_none end exec 'hi TabLine' . s:fg_tabline_inactive_fg . s:bg_tabline_inactive_bg . s:ft_none exec 'hi TabLineFill' . s:fg_tabline_bg . s:bg_tabline_bg . s:ft_none exec 'hi TabLineSel' . s:fg_tabline_active_fg . s:bg_tabline_active_bg . s:ft_none exec 'hi BufTabLineCurrent' . s:fg_buftabline_current_fg . s:bg_buftabline_current_bg . s:ft_none exec 'hi BufTabLineActive' . s:fg_buftabline_active_fg . s:bg_buftabline_active_bg . s:ft_none exec 'hi BufTabLineHidden' . s:fg_buftabline_inactive_fg . s:bg_buftabline_inactive_bg . s:ft_none exec 'hi BufTabLineFill' . s:bg_buftabline_bg . s:ft_none " Standard Group Highlighting: exec 'hi Comment' . s:fg_comment . s:ft_italic exec 'hi Constant' . s:fg_orange exec 'hi String' . s:fg_olive exec 'hi Character' . s:fg_olive exec 'hi Number' . s:fg_orange exec 'hi Boolean' . s:fg_green . s:ft_bold exec 'hi Float' . s:fg_orange exec 'hi Identifier' . s:fg_navy exec 'hi Function' . s:fg_foreground exec 'hi Statement' . s:fg_pink . s:ft_none exec 'hi Conditional' . s:fg_purple . s:ft_bold exec 'hi Repeat' . s:fg_purple . s:ft_bold exec 'hi Label' . s:fg_blue exec 'hi Operator' . s:fg_aqua . s:ft_none exec 'hi Keyword' . s:fg_blue exec 'hi Exception' . s:fg_red exec 'hi PreProc' . s:fg_blue exec 'hi Include' . s:fg_red exec 'hi Define' . s:fg_blue exec 'hi Macro' . s:fg_blue exec 'hi PreCondit' . s:fg_aqua exec 'hi Type' . s:fg_pink . s:ft_bold exec 'hi StorageClass' . s:fg_navy . s:ft_bold exec 'hi Structure' . s:fg_blue . s:ft_bold exec 'hi Typedef' . s:fg_pink . s:ft_bold exec 'hi Special' . s:fg_foreground exec 'hi SpecialChar' . s:fg_foreground exec 'hi Tag' . s:fg_green exec 'hi Delimiter' . s:fg_aqua exec 'hi SpecialComment' . s:fg_comment . s:ft_bold exec 'hi Debug' . s:fg_orange exec 'hi Error' . s:fg_error_fg . s:bg_error_bg exec 'hi Todo' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi Title' . s:fg_comment exec 'hi Global' . s:fg_blue " Neovim (LSP) diagnostics if has('nvim') exec 'hi LspDiagnosticsDefaultError' . s:fg_error_fg . s:bg_error_bg exec 'hi LspDiagnosticsDefaultWarning' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi LspDiagnosticsDefaultInformation' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi LspDiagnosticsDefaultHint' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi LspDiagnosticsUnderlineError cterm=undercurl gui=undercurl' . s:sp_error_fg exec 'hi LspDiagnosticsUnderlineWarning cterm=undercurl gui=undercurl' . s:sp_todo_fg exec 'hi LspDiagnosticsUnderlineInformation cterm=undercurl gui=undercurl' . s:sp_todo_fg exec 'hi LspDiagnosticsUnderlineHint cterm=undercurl gui=undercurl' . s:sp_todo_fg hi! link DiagnosticError LspDiagnosticsDefaultError hi! link DiagnosticWarn LspDiagnosticsDefaultWarning hi! link DiagnosticInfo LspDiagnosticsDefaultInformation hi! link DiagnosticHint LspDiagnosticsDefaultHint hi! link DiagnosticUnderlineError LspDiagnosticsUnderlineError hi! link DiagnosticUnderlineWarn LspDiagnosticsUnderlineWarning hi! link DiagnosticUnderlineInfo LspDiagnosticsUnderlineInformation hi! link DiagnosticUnderlineHint LspDiagnosticsUnderlineHint endif " Extension {{{ " VimL Highlighting exec 'hi vimCommand' . s:fg_pink exec 'hi vimVar' . s:fg_navy exec 'hi vimFuncKey' . s:fg_pink exec 'hi vimFunction' . s:fg_blue . s:ft_bold exec 'hi vimNotFunc' . s:fg_pink exec 'hi vimMap' . s:fg_red exec 'hi vimAutoEvent' . s:fg_aqua . s:ft_bold exec 'hi vimMapModKey' . s:fg_aqua exec 'hi vimFuncName' . s:fg_purple exec 'hi vimIsCommand' . s:fg_foreground exec 'hi vimFuncVar' . s:fg_aqua exec 'hi vimLet' . s:fg_red exec 'hi vimContinue' . s:fg_aqua exec 'hi vimMapRhsExtend' . s:fg_foreground exec 'hi vimCommentTitle' . s:fg_comment . s:ft_italic_bold exec 'hi vimBracket' . s:fg_aqua exec 'hi vimParenSep' . s:fg_aqua exec 'hi vimNotation' . s:fg_aqua exec 'hi vimOper' . s:fg_foreground exec 'hi vimOperParen' . s:fg_foreground exec 'hi vimSynType' . s:fg_purple exec 'hi vimSynReg' . s:fg_pink . s:ft_none exec 'hi vimSynRegion' . s:fg_foreground exec 'hi vimSynMtchGrp' . s:fg_pink exec 'hi vimSynNextgroup' . s:fg_pink exec 'hi vimSynKeyRegion' . s:fg_green exec 'hi vimSynRegOpt' . s:fg_blue exec 'hi vimSynMtchOpt' . s:fg_blue exec 'hi vimSynContains' . s:fg_pink exec 'hi vimGroupName' . s:fg_foreground exec 'hi vimGroupList' . s:fg_foreground exec 'hi vimHiGroup' . s:fg_foreground exec 'hi vimGroup' . s:fg_navy . s:ft_bold exec 'hi vimOnlyOption' . s:fg_blue " Makefile Highlighting exec 'hi makeIdent' . s:fg_blue exec 'hi makeSpecTarget' . s:fg_olive exec 'hi makeTarget' . s:fg_red exec 'hi makeStatement' . s:fg_aqua . s:ft_bold exec 'hi makeCommands' . s:fg_foreground exec 'hi makeSpecial' . s:fg_orange . s:ft_bold " CMake Highlighting (Builtin) exec 'hi cmakeStatement' . s:fg_blue exec 'hi cmakeArguments' . s:fg_foreground exec 'hi cmakeVariableValue' . s:fg_pink " CMake Highlighting (Plugin: https://github.com/pboettch/vim-cmake-syntax) exec 'hi cmakeCommand' . s:fg_blue exec 'hi cmakeCommandConditional' . s:fg_purple . s:ft_bold exec 'hi cmakeKWset' . s:fg_orange exec 'hi cmakeKWvariable_watch' . s:fg_orange exec 'hi cmakeKWif' . s:fg_orange exec 'hi cmakeArguments' . s:fg_foreground exec 'hi cmakeKWproject' . s:fg_pink exec 'hi cmakeGeneratorExpressions' . s:fg_orange exec 'hi cmakeGeneratorExpression' . s:fg_aqua exec 'hi cmakeVariable' . s:fg_pink exec 'hi cmakeProperty' . s:fg_aqua exec 'hi cmakeKWforeach' . s:fg_aqua exec 'hi cmakeKWunset' . s:fg_aqua exec 'hi cmakeKWmacro' . s:fg_aqua exec 'hi cmakeKWget_property' . s:fg_aqua exec 'hi cmakeKWset_tests_properties' . s:fg_aqua exec 'hi cmakeKWmessage' . s:fg_aqua exec 'hi cmakeKWinstall_targets' . s:fg_orange exec 'hi cmakeKWsource_group' . s:fg_orange exec 'hi cmakeKWfind_package' . s:fg_aqua exec 'hi cmakeKWstring' . s:fg_olive exec 'hi cmakeKWinstall' . s:fg_aqua exec 'hi cmakeKWtarget_sources' . s:fg_orange " C Highlighting exec 'hi cType' . s:fg_pink . s:ft_bold exec 'hi cFormat' . s:fg_olive exec 'hi cStorageClass' . s:fg_navy . s:ft_bold exec 'hi cBoolean' . s:fg_green . s:ft_bold exec 'hi cCharacter' . s:fg_olive exec 'hi cConstant' . s:fg_green . s:ft_bold exec 'hi cConditional' . s:fg_purple . s:ft_bold exec 'hi cSpecial' . s:fg_olive . s:ft_bold exec 'hi cDefine' . s:fg_blue exec 'hi cNumber' . s:fg_orange exec 'hi cPreCondit' . s:fg_aqua exec 'hi cRepeat' . s:fg_purple . s:ft_bold exec 'hi cLabel' . s:fg_aqua " exec 'hi cAnsiFunction' . s:fg_aqua . s:ft_bold " exec 'hi cAnsiName' . s:fg_pink exec 'hi cDelimiter' . s:fg_blue " exec 'hi cBraces' . s:fg_foreground " exec 'hi cIdentifier' . s:fg_blue . s:bg_pink " exec 'hi cSemiColon' . s:bg_blue exec 'hi cOperator' . s:fg_aqua " exec 'hi cStatement' . s:fg_pink " exec 'hi cTodo' . s:fg_comment . s:ft_bold " exec 'hi cStructure' . s:fg_blue . s:ft_bold exec 'hi cCustomParen' . s:fg_foreground " exec 'hi cCustomFunc' . s:fg_foreground " exec 'hi cUserFunction' . s:fg_blue . s:ft_bold exec 'hi cOctalZero' . s:fg_purple . s:ft_bold if s:langOpt_c__highlight_builtins == 1 exec 'hi cFunction' . s:fg_blue else exec 'hi cFunction' . s:fg_foreground endif " CPP highlighting exec 'hi cppBoolean' . s:fg_green . s:ft_bold exec 'hi cppSTLnamespace' . s:fg_purple exec 'hi cppSTLexception' . s:fg_pink exec 'hi cppSTLfunctional' . s:fg_foreground . s:ft_bold exec 'hi cppSTLiterator' . s:fg_foreground . s:ft_bold exec 'hi cppExceptions' . s:fg_red exec 'hi cppStatement' . s:fg_blue exec 'hi cppStorageClass' . s:fg_navy . s:ft_bold exec 'hi cppAccess' . s:fg_orange . s:ft_bold if s:langOpt_cpp__highlight_standard_library == 1 exec 'hi cppSTLconstant' . s:fg_green . s:ft_bold exec 'hi cppSTLtype' . s:fg_pink . s:ft_bold exec 'hi cppSTLfunction' . s:fg_blue exec 'hi cppSTLios' . s:fg_olive . s:ft_bold else exec 'hi cppSTLconstant' . s:fg_foreground exec 'hi cppSTLtype' . s:fg_foreground exec 'hi cppSTLfunction' . s:fg_foreground exec 'hi cppSTLios' . s:fg_foreground endif " exec 'hi cppSTL' . s:fg_blue " Rust highlighting exec 'hi rustKeyword' . s:fg_pink exec 'hi rustModPath' . s:fg_blue exec 'hi rustModPathSep' . s:fg_blue exec 'hi rustLifetime' . s:fg_purple exec 'hi rustStructure' . s:fg_aqua . s:ft_bold exec 'hi rustAttribute' . s:fg_aqua . s:ft_bold exec 'hi rustPanic' . s:fg_olive . s:ft_bold exec 'hi rustTrait' . s:fg_blue . s:ft_bold exec 'hi rustEnum' . s:fg_green . s:ft_bold exec 'hi rustEnumVariant' . s:fg_green exec 'hi rustSelf' . s:fg_orange exec 'hi rustSigil' . s:fg_aqua . s:ft_bold exec 'hi rustOperator' . s:fg_aqua . s:ft_bold exec 'hi rustMacro' . s:fg_olive . s:ft_bold exec 'hi rustMacroVariable' . s:fg_olive exec 'hi rustAssert' . s:fg_olive . s:ft_bold exec 'hi rustConditional' . s:fg_purple . s:ft_bold " Lex highlighting exec 'hi lexCFunctions' . s:fg_foreground exec 'hi lexAbbrv' . s:fg_purple exec 'hi lexAbbrvRegExp' . s:fg_aqua exec 'hi lexAbbrvComment' . s:fg_comment exec 'hi lexBrace' . s:fg_navy exec 'hi lexPat' . s:fg_aqua exec 'hi lexPatComment' . s:fg_comment exec 'hi lexPatTag' . s:fg_orange " exec 'hi lexPatBlock' . s:fg_foreground . s:ft_bold exec 'hi lexSlashQuote' . s:fg_foreground exec 'hi lexSep' . s:fg_foreground exec 'hi lexStartState' . s:fg_orange exec 'hi lexPatTagZone' . s:fg_olive . s:ft_bold exec 'hi lexMorePat' . s:fg_olive . s:ft_bold exec 'hi lexOptions' . s:fg_olive . s:ft_bold exec 'hi lexPatString' . s:fg_olive " Yacc highlighting exec 'hi yaccNonterminal' . s:fg_navy exec 'hi yaccDelim' . s:fg_orange exec 'hi yaccInitKey' . s:fg_aqua exec 'hi yaccInit' . s:fg_navy exec 'hi yaccKey' . s:fg_purple exec 'hi yaccVar' . s:fg_aqua " NASM highlighting exec 'hi nasmStdInstruction' . s:fg_navy exec 'hi nasmGen08Register' . s:fg_aqua exec 'hi nasmGen16Register' . s:fg_aqua exec 'hi nasmGen32Register' . s:fg_aqua exec 'hi nasmGen64Register' . s:fg_aqua exec 'hi nasmHexNumber' . s:fg_purple exec 'hi nasmStorage' . s:fg_aqua . s:ft_bold exec 'hi nasmLabel' . s:fg_pink exec 'hi nasmDirective' . s:fg_blue . s:ft_bold exec 'hi nasmLocalLabel' . s:fg_orange " GAS highlighting exec 'hi gasSymbol' . s:fg_pink exec 'hi gasDirective' . s:fg_blue . s:ft_bold exec 'hi gasOpcode_386_Base' . s:fg_navy exec 'hi gasDecimalNumber' . s:fg_purple exec 'hi gasSymbolRef' . s:fg_pink exec 'hi gasRegisterX86' . s:fg_blue exec 'hi gasOpcode_P6_Base' . s:fg_navy exec 'hi gasDirectiveStore' . s:fg_foreground . s:ft_bold " MIPS highlighting exec 'hi mipsInstruction' . s:fg_pink exec 'hi mipsRegister' . s:fg_navy exec 'hi mipsLabel' . s:fg_aqua . s:ft_bold exec 'hi mipsDirective' . s:fg_purple . s:ft_bold " Shell/Bash highlighting exec 'hi bashStatement' . s:fg_foreground . s:ft_bold exec 'hi shDerefVar' . s:fg_aqua . s:ft_bold exec 'hi shDerefSimple' . s:fg_aqua exec 'hi shFunction' . s:fg_orange . s:ft_bold exec 'hi shStatement' . s:fg_foreground exec 'hi shLoop' . s:fg_purple . s:ft_bold exec 'hi shQuote' . s:fg_olive exec 'hi shCaseEsac' . s:fg_aqua . s:ft_bold exec 'hi shSnglCase' . s:fg_purple . s:ft_none exec 'hi shFunctionOne' . s:fg_navy exec 'hi shCase' . s:fg_navy exec 'hi shSetList' . s:fg_navy " @see Dockerfile Highlighting section for more sh* " PowerShell Highlighting exec 'hi ps1Type' . s:fg_green . s:ft_bold exec 'hi ps1Variable' . s:fg_navy exec 'hi ps1Boolean' . s:fg_navy . s:ft_bold exec 'hi ps1FunctionInvocation' . s:fg_pink exec 'hi ps1FunctionDeclaration' . s:fg_pink exec 'hi ps1Keyword' . s:fg_blue . s:ft_bold exec 'hi ps1Exception' . s:fg_red exec 'hi ps1Operator' . s:fg_aqua . s:ft_bold exec 'hi ps1CommentDoc' . s:fg_purple exec 'hi ps1CDocParam' . s:fg_orange " HTML Highlighting exec 'hi htmlTitle' . s:fg_green . s:ft_bold exec 'hi htmlH1' . s:fg_green . s:ft_bold exec 'hi htmlH2' . s:fg_aqua . s:ft_bold exec 'hi htmlH3' . s:fg_purple . s:ft_bold exec 'hi htmlH4' . s:fg_orange . s:ft_bold exec 'hi htmlTag' . s:fg_comment exec 'hi htmlTagName' . s:fg_wine exec 'hi htmlArg' . s:fg_pink exec 'hi htmlEndTag' . s:fg_comment exec 'hi htmlString' . s:fg_blue exec 'hi htmlScriptTag' . s:fg_comment exec 'hi htmlBold' . s:fg_foreground . s:ft_bold exec 'hi htmlItalic' . s:fg_comment . s:ft_italic exec 'hi htmlBoldItalic' . s:fg_navy . s:ft_italic_bold " exec 'hi htmlLink' . s:fg_blue . s:ft_bold exec 'hi htmlTagN' . s:fg_wine . s:ft_bold exec 'hi htmlSpecialTagName' . s:fg_wine exec 'hi htmlComment' . s:fg_comment . s:ft_italic exec 'hi htmlCommentPart' . s:fg_comment . s:ft_italic " CSS Highlighting exec 'hi cssIdentifier' . s:fg_pink exec 'hi cssPositioningProp' . s:fg_foreground exec 'hi cssNoise' . s:fg_foreground exec 'hi cssBoxProp' . s:fg_foreground exec 'hi cssTableAttr' . s:fg_purple exec 'hi cssPositioningAttr' . s:fg_navy exec 'hi cssValueLength' . s:fg_orange exec 'hi cssFunctionName' . s:fg_blue exec 'hi cssUnitDecorators' . s:fg_aqua exec 'hi cssColor' . s:fg_blue . s:ft_bold exec 'hi cssBraces' . s:fg_pink exec 'hi cssBackgroundProp' . s:fg_foreground exec 'hi cssTextProp' . s:fg_foreground exec 'hi cssDimensionProp' . s:fg_foreground exec 'hi cssClassName' . s:fg_pink " Markdown Highlighting exec 'hi markdownHeadingRule' . s:fg_pink . s:ft_bold exec 'hi markdownH1' . s:fg_pink . s:ft_bold exec 'hi markdownH2' . s:fg_orange . s:ft_bold exec 'hi markdownBlockquote' . s:fg_pink exec 'hi markdownCodeBlock' . s:fg_olive exec 'hi markdownCode' . s:fg_olive exec 'hi markdownLink' . s:fg_blue . s:ft_bold exec 'hi markdownUrl' . s:fg_blue exec 'hi markdownLinkText' . s:fg_pink exec 'hi markdownLinkTextDelimiter' . s:fg_purple exec 'hi markdownLinkDelimiter' . s:fg_purple exec 'hi markdownCodeDelimiter' . s:fg_blue exec 'hi mkdCode' . s:fg_olive exec 'hi mkdLink' . s:fg_blue . s:ft_bold exec 'hi mkdURL' . s:fg_comment exec 'hi mkdString' . s:fg_foreground exec 'hi mkdBlockQuote' . s:fg_pink exec 'hi mkdLinkTitle' . s:fg_pink exec 'hi mkdDelimiter' . s:fg_aqua exec 'hi mkdRule' . s:fg_pink " reStructuredText Highlighting exec 'hi rstSections' . s:fg_pink . s:ft_bold exec 'hi rstDelimiter' . s:fg_pink . s:ft_bold exec 'hi rstExplicitMarkup' . s:fg_pink . s:ft_bold exec 'hi rstDirective' . s:fg_blue exec 'hi rstHyperlinkTarget' . s:fg_green exec 'hi rstExDirective' . s:fg_foreground exec 'hi rstInlineLiteral' . s:fg_olive exec 'hi rstInterpretedTextOrHyperlinkReference' . s:fg_blue " Python Highlighting exec 'hi pythonImport' . s:fg_pink . s:ft_bold exec 'hi pythonExceptions' . s:fg_red exec 'hi pythonException' . s:fg_purple . s:ft_bold exec 'hi pythonInclude' . s:fg_red exec 'hi pythonStatement' . s:fg_pink exec 'hi pythonConditional' . s:fg_purple . s:ft_bold exec 'hi pythonRepeat' . s:fg_purple . s:ft_bold exec 'hi pythonFunction' . s:fg_aqua . s:ft_bold exec 'hi pythonPreCondit' . s:fg_purple exec 'hi pythonExClass' . s:fg_orange exec 'hi pythonOperator' . s:fg_purple . s:ft_bold exec 'hi pythonBuiltin' . s:fg_foreground exec 'hi pythonDecorator' . s:fg_orange exec 'hi pythonString' . s:fg_olive exec 'hi pythonEscape' . s:fg_olive . s:ft_bold exec 'hi pythonStrFormatting' . s:fg_olive . s:ft_bold exec 'hi pythonBoolean' . s:fg_green . s:ft_bold exec 'hi pythonBytesEscape' . s:fg_olive . s:ft_bold exec 'hi pythonDottedName' . s:fg_purple exec 'hi pythonStrFormat' . s:fg_foreground if s:langOpt_python__highlight_builtins == 1 exec 'hi pythonBuiltinFunc' . s:fg_blue exec 'hi pythonBuiltinObj' . s:fg_red else exec 'hi pythonBuiltinFunc' . s:fg_foreground exec 'hi pythonBuiltinObj' . s:fg_foreground endif " Java Highlighting exec 'hi javaExternal' . s:fg_pink exec 'hi javaAnnotation' . s:fg_orange exec 'hi javaTypedef' . s:fg_aqua exec 'hi javaClassDecl' . s:fg_aqua . s:ft_bold exec 'hi javaScopeDecl' . s:fg_blue . s:ft_bold exec 'hi javaStorageClass' . s:fg_navy . s:ft_bold exec 'hi javaBoolean' . s:fg_green . s:ft_bold exec 'hi javaConstant' . s:fg_blue exec 'hi javaCommentTitle' . s:fg_wine exec 'hi javaDocTags' . s:fg_aqua exec 'hi javaDocComment' . s:fg_comment exec 'hi javaDocParam' . s:fg_foreground exec 'hi javaStatement' . s:fg_pink " JavaScript Highlighting exec 'hi javaScriptBraces' . s:fg_blue exec 'hi javaScriptParens' . s:fg_blue exec 'hi javaScriptIdentifier' . s:fg_pink exec 'hi javaScriptFunction' . s:fg_blue . s:ft_bold exec 'hi javaScriptConditional' . s:fg_purple . s:ft_bold exec 'hi javaScriptRepeat' . s:fg_purple . s:ft_bold exec 'hi javaScriptBoolean' . s:fg_green . s:ft_bold exec 'hi javaScriptNumber' . s:fg_orange exec 'hi javaScriptMember' . s:fg_navy exec 'hi javaScriptReserved' . s:fg_navy exec 'hi javascriptNull' . s:fg_comment . s:ft_bold exec 'hi javascriptGlobal' . s:fg_foreground exec 'hi javascriptStatement' . s:fg_pink exec 'hi javaScriptMessage' . s:fg_foreground exec 'hi javaScriptMember' . s:fg_foreground " TypeScript Highlighting exec 'hi typescriptDecorators' . s:fg_orange exec 'hi typescriptLabel' . s:fg_purple . s:ft_bold " @target https://github.com/pangloss/vim-javascript exec 'hi jsImport' . s:fg_pink . s:ft_bold exec 'hi jsExport' . s:fg_pink . s:ft_bold exec 'hi jsModuleAs' . s:fg_pink . s:ft_bold exec 'hi jsFrom' . s:fg_pink . s:ft_bold exec 'hi jsExportDefault' . s:fg_pink . s:ft_bold exec 'hi jsFuncParens' . s:fg_blue exec 'hi jsFuncBraces' . s:fg_blue exec 'hi jsParens' . s:fg_blue exec 'hi jsBraces' . s:fg_blue exec 'hi jsNoise' . s:fg_blue " Jsx Highlighting " @target https://github.com/MaxMEllon/vim-jsx-pretty exec 'hi jsxTagName' . s:fg_wine exec 'hi jsxComponentName' . s:fg_wine exec 'hi jsxAttrib' . s:fg_pink exec 'hi jsxEqual' . s:fg_comment exec 'hi jsxString' . s:fg_blue exec 'hi jsxCloseTag' . s:fg_comment exec 'hi jsxCloseString' . s:fg_comment exec 'hi jsxDot' . s:fg_wine exec 'hi jsxNamespace' . s:fg_wine exec 'hi jsxPunct' . s:fg_comment " Json Highlighting " @target https://github.com/elzr/vim-json exec 'hi jsonKeyword' . s:fg_blue exec 'hi jsonString' . s:fg_olive exec 'hi jsonQuote' . s:fg_comment exec 'hi jsonNoise' . s:fg_foreground exec 'hi jsonKeywordMatch' . s:fg_foreground exec 'hi jsonBraces' . s:fg_foreground exec 'hi jsonNumber' . s:fg_orange exec 'hi jsonNull' . s:fg_purple . s:ft_bold exec 'hi jsonBoolean' . s:fg_green . s:ft_bold exec 'hi jsonCommentError' . s:fg_pink . s:bg_background " Go Highlighting exec 'hi goDirective' . s:fg_red exec 'hi goDeclaration' . s:fg_blue . s:ft_bold exec 'hi goStatement' . s:fg_pink exec 'hi goConditional' . s:fg_purple . s:ft_bold exec 'hi goConstants' . s:fg_orange exec 'hi goFunction' . s:fg_orange " exec 'hi goTodo' . s:fg_comment . s:ft_bold exec 'hi goDeclType' . s:fg_blue exec 'hi goBuiltins' . s:fg_purple " Systemtap Highlighting " exec 'hi stapBlock' . s:fg_comment . s:ft_none exec 'hi stapComment' . s:fg_comment . s:ft_none exec 'hi stapProbe' . s:fg_aqua . s:ft_bold exec 'hi stapStat' . s:fg_navy . s:ft_bold exec 'hi stapFunc' . s:fg_foreground exec 'hi stapString' . s:fg_olive exec 'hi stapTarget' . s:fg_navy exec 'hi stapStatement' . s:fg_pink exec 'hi stapType' . s:fg_pink . s:ft_bold exec 'hi stapSharpBang' . s:fg_comment exec 'hi stapDeclaration' . s:fg_pink exec 'hi stapCMacro' . s:fg_blue " DTrace Highlighting exec 'hi dtraceProbe' . s:fg_blue exec 'hi dtracePredicate' . s:fg_purple . s:ft_bold exec 'hi dtraceComment' . s:fg_comment exec 'hi dtraceFunction' . s:fg_foreground exec 'hi dtraceAggregatingFunction' . s:fg_blue . s:ft_bold exec 'hi dtraceStatement' . s:fg_navy . s:ft_bold exec 'hi dtraceIdentifier' . s:fg_pink exec 'hi dtraceOption' . s:fg_pink exec 'hi dtraceConstant' . s:fg_orange exec 'hi dtraceType' . s:fg_pink . s:ft_bold " PlantUML Highlighting exec 'hi plantumlPreProc' . s:fg_orange . s:ft_bold exec 'hi plantumlDirectedOrVerticalArrowRL' . s:fg_pink exec 'hi plantumlDirectedOrVerticalArrowLR' . s:fg_pink exec 'hi plantumlString' . s:fg_olive exec 'hi plantumlActivityThing' . s:fg_purple exec 'hi plantumlText' . s:fg_navy exec 'hi plantumlClassPublic' . s:fg_olive . s:ft_bold exec 'hi plantumlClassPrivate' . s:fg_red exec 'hi plantumlColonLine' . s:fg_orange exec 'hi plantumlClass' . s:fg_navy exec 'hi plantumlHorizontalArrow' . s:fg_pink exec 'hi plantumlTypeKeyword' . s:fg_blue . s:ft_bold exec 'hi plantumlKeyword' . s:fg_pink . s:ft_bold exec 'hi plantumlType' . s:fg_blue . s:ft_bold exec 'hi plantumlBlock' . s:fg_pink . s:ft_bold exec 'hi plantumlPreposition' . s:fg_orange exec 'hi plantumlLayout' . s:fg_blue . s:ft_bold exec 'hi plantumlNote' . s:fg_orange exec 'hi plantumlLifecycle' . s:fg_aqua exec 'hi plantumlParticipant' . s:fg_foreground . s:ft_bold " Haskell Highlighting exec 'hi haskellType' . s:fg_aqua . s:ft_bold exec 'hi haskellIdentifier' . s:fg_orange . s:ft_bold exec 'hi haskellOperators' . s:fg_pink exec 'hi haskellWhere' . s:fg_foreground . s:ft_bold exec 'hi haskellDelimiter' . s:fg_aqua exec 'hi haskellImportKeywords' . s:fg_pink exec 'hi haskellStatement' . s:fg_purple . s:ft_bold " SQL/MySQL Highlighting exec 'hi sqlStatement' . s:fg_pink . s:ft_bold exec 'hi sqlType' . s:fg_blue . s:ft_bold exec 'hi sqlKeyword' . s:fg_pink exec 'hi sqlOperator' . s:fg_aqua exec 'hi sqlSpecial' . s:fg_green . s:ft_bold exec 'hi mysqlVariable' . s:fg_olive . s:ft_bold exec 'hi mysqlType' . s:fg_blue . s:ft_bold exec 'hi mysqlKeyword' . s:fg_pink exec 'hi mysqlOperator' . s:fg_aqua exec 'hi mysqlSpecial' . s:fg_green . s:ft_bold " Octave/MATLAB Highlighting exec 'hi octaveVariable' . s:fg_foreground exec 'hi octaveDelimiter' . s:fg_pink exec 'hi octaveQueryVar' . s:fg_foreground exec 'hi octaveSemicolon' . s:fg_purple exec 'hi octaveFunction' . s:fg_navy exec 'hi octaveSetVar' . s:fg_blue exec 'hi octaveUserVar' . s:fg_foreground exec 'hi octaveArithmeticOperator' . s:fg_aqua exec 'hi octaveBeginKeyword' . s:fg_purple . s:ft_bold exec 'hi octaveElseKeyword' . s:fg_purple . s:ft_bold exec 'hi octaveEndKeyword' . s:fg_purple . s:ft_bold exec 'hi octaveStatement' . s:fg_pink " Ruby Highlighting exec 'hi rubyModule' . s:fg_navy . s:ft_bold exec 'hi rubyClass' . s:fg_pink . s:ft_bold exec 'hi rubyPseudoVariable' . s:fg_comment . s:ft_bold exec 'hi rubyKeyword' . s:fg_pink exec 'hi rubyInstanceVariable' . s:fg_purple exec 'hi rubyFunction' . s:fg_foreground . s:ft_bold exec 'hi rubyDefine' . s:fg_pink exec 'hi rubySymbol' . s:fg_aqua exec 'hi rubyConstant' . s:fg_blue exec 'hi rubyAccess' . s:fg_navy exec 'hi rubyAttribute' . s:fg_green exec 'hi rubyInclude' . s:fg_red exec 'hi rubyLocalVariableOrMethod' . s:fg_orange exec 'hi rubyCurlyBlock' . s:fg_foreground exec 'hi rubyCurlyBlockDelimiter' . s:fg_aqua exec 'hi rubyArrayDelimiter' . s:fg_aqua exec 'hi rubyStringDelimiter' . s:fg_olive exec 'hi rubyInterpolationDelimiter' . s:fg_orange exec 'hi rubyConditional' . s:fg_purple . s:ft_bold exec 'hi rubyRepeat' . s:fg_purple . s:ft_bold exec 'hi rubyControl' . s:fg_purple . s:ft_bold exec 'hi rubyException' . s:fg_purple . s:ft_bold exec 'hi rubyExceptional' . s:fg_purple . s:ft_bold exec 'hi rubyBoolean' . s:fg_green . s:ft_bold " Fortran Highlighting exec 'hi fortranUnitHeader' . s:fg_blue . s:ft_bold exec 'hi fortranIntrinsic' . s:fg_blue . s:bg_background . s:ft_none exec 'hi fortranType' . s:fg_pink . s:ft_bold exec 'hi fortranTypeOb' . s:fg_pink . s:ft_bold exec 'hi fortranStructure' . s:fg_aqua exec 'hi fortranStorageClass' . s:fg_navy . s:ft_bold exec 'hi fortranStorageClassR' . s:fg_navy . s:ft_bold exec 'hi fortranKeyword' . s:fg_pink exec 'hi fortranReadWrite' . s:fg_aqua . s:ft_bold exec 'hi fortranIO' . s:fg_navy exec 'hi fortranOperator' . s:fg_aqua . s:ft_bold exec 'hi fortranCall' . s:fg_aqua . s:ft_bold exec 'hi fortranContinueMark' . s:fg_green " ALGOL Highlighting (Plugin: https://github.com/sterpe/vim-algol68) exec 'hi algol68Statement' . s:fg_blue . s:ft_bold exec 'hi algol68Operator' . s:fg_aqua . s:ft_bold exec 'hi algol68PreProc' . s:fg_green exec 'hi algol68Function' . s:fg_blue " R Highlighting exec 'hi rType' . s:fg_blue exec 'hi rArrow' . s:fg_pink exec 'hi rDollar' . s:fg_blue " XXD Highlighting exec 'hi xxdAddress' . s:fg_navy exec 'hi xxdSep' . s:fg_pink exec 'hi xxdAscii' . s:fg_pink exec 'hi xxdDot' . s:fg_aqua " PHP Highlighting exec 'hi phpIdentifier' . s:fg_foreground exec 'hi phpVarSelector' . s:fg_pink exec 'hi phpKeyword' . s:fg_blue exec 'hi phpRepeat' . s:fg_purple . s:ft_bold exec 'hi phpConditional' . s:fg_purple . s:ft_bold exec 'hi phpStatement' . s:fg_pink exec 'hi phpAssignByRef' . s:fg_aqua . s:ft_bold exec 'hi phpSpecialFunction' . s:fg_blue exec 'hi phpFunctions' . s:fg_blue exec 'hi phpComparison' . s:fg_aqua exec 'hi phpBackslashSequences' . s:fg_olive . s:ft_bold exec 'hi phpMemberSelector' . s:fg_blue exec 'hi phpStorageClass' . s:fg_purple . s:ft_bold exec 'hi phpDefine' . s:fg_navy exec 'hi phpIntVar' . s:fg_navy . s:ft_bold " Perl Highlighting exec 'hi perlFiledescRead' . s:fg_green exec 'hi perlMatchStartEnd' . s:fg_pink exec 'hi perlStatementFlow' . s:fg_pink exec 'hi perlStatementStorage' . s:fg_pink exec 'hi perlFunction' . s:fg_pink . s:ft_bold exec 'hi perlMethod' . s:fg_foreground exec 'hi perlStatementFiledesc' . s:fg_orange exec 'hi perlVarPlain' . s:fg_navy exec 'hi perlSharpBang' . s:fg_comment exec 'hi perlStatementInclude' . s:fg_aqua . s:ft_bold exec 'hi perlStatementScalar' . s:fg_purple exec 'hi perlSubName' . s:fg_aqua . s:ft_bold exec 'hi perlSpecialString' . s:fg_olive . s:ft_bold " Pascal Highlighting exec 'hi pascalType' . s:fg_pink . s:ft_bold exec 'hi pascalStatement' . s:fg_blue . s:ft_bold exec 'hi pascalPredefined' . s:fg_pink exec 'hi pascalFunction' . s:fg_foreground exec 'hi pascalStruct' . s:fg_navy . s:ft_bold exec 'hi pascalOperator' . s:fg_aqua . s:ft_bold exec 'hi pascalPreProc' . s:fg_green exec 'hi pascalAcces' . s:fg_navy . s:ft_bold " Lua Highlighting exec 'hi luaFunc' . s:fg_foreground exec 'hi luaIn' . s:fg_blue . s:ft_bold exec 'hi luaFunction' . s:fg_pink exec 'hi luaStatement' . s:fg_blue exec 'hi luaRepeat' . s:fg_blue . s:ft_bold exec 'hi luaCondStart' . s:fg_purple . s:ft_bold exec 'hi luaTable' . s:fg_aqua . s:ft_bold exec 'hi luaConstant' . s:fg_green . s:ft_bold exec 'hi luaElse' . s:fg_purple . s:ft_bold exec 'hi luaCondElseif' . s:fg_purple . s:ft_bold exec 'hi luaCond' . s:fg_purple . s:ft_bold exec 'hi luaCondEnd' . s:fg_purple " Clojure highlighting: exec 'hi clojureConstant' . s:fg_blue exec 'hi clojureBoolean' . s:fg_orange exec 'hi clojureCharacter' . s:fg_olive exec 'hi clojureKeyword' . s:fg_pink exec 'hi clojureNumber' . s:fg_orange exec 'hi clojureString' . s:fg_olive exec 'hi clojureRegexp' . s:fg_purple exec 'hi clojureRegexpEscape' . s:fg_pink exec 'hi clojureParen' . s:fg_aqua exec 'hi clojureVariable' . s:fg_olive exec 'hi clojureCond' . s:fg_blue exec 'hi clojureDefine' . s:fg_blue . s:ft_bold exec 'hi clojureException' . s:fg_red exec 'hi clojureFunc' . s:fg_navy exec 'hi clojureMacro' . s:fg_blue exec 'hi clojureRepeat' . s:fg_blue exec 'hi clojureSpecial' . s:fg_blue . s:ft_bold exec 'hi clojureQuote' . s:fg_blue exec 'hi clojureUnquote' . s:fg_blue exec 'hi clojureMeta' . s:fg_blue exec 'hi clojureDeref' . s:fg_blue exec 'hi clojureAnonArg' . s:fg_blue exec 'hi clojureRepeat' . s:fg_blue exec 'hi clojureDispatch' . s:fg_aqua " Dockerfile Highlighting " @target https://github.com/docker/docker/tree/master/contrib/syntax/vim exec 'hi dockerfileKeyword' . s:fg_blue exec 'hi shDerefVar' . s:fg_purple . s:ft_bold exec 'hi shOperator' . s:fg_aqua exec 'hi shOption' . s:fg_navy exec 'hi shLine' . s:fg_foreground exec 'hi shWrapLineOperator' . s:fg_pink " NGINX Highlighting " @target https://github.com/evanmiller/nginx-vim-syntax exec 'hi ngxDirectiveBlock' . s:fg_pink . s:ft_bold exec 'hi ngxDirective' . s:fg_blue . s:ft_none exec 'hi ngxDirectiveImportant' . s:fg_blue . s:ft_bold exec 'hi ngxString' . s:fg_olive exec 'hi ngxVariableString' . s:fg_purple exec 'hi ngxVariable' . s:fg_purple . s:ft_none " Yaml Highlighting exec 'hi yamlBlockMappingKey' . s:fg_blue exec 'hi yamlKeyValueDelimiter' . s:fg_pink exec 'hi yamlBlockCollectionItemStart' . s:fg_pink " Qt QML Highlighting exec 'hi qmlObjectLiteralType' . s:fg_pink exec 'hi qmlReserved' . s:fg_purple exec 'hi qmlBindingProperty' . s:fg_navy exec 'hi qmlType' . s:fg_navy " Dosini Highlighting exec 'hi dosiniHeader' . s:fg_pink exec 'hi dosiniLabel' . s:fg_blue " Mail highlighting exec 'hi mailHeaderKey' . s:fg_blue exec 'hi mailHeaderEmail' . s:fg_purple exec 'hi mailSubject' . s:fg_pink exec 'hi mailHeader' . s:fg_comment exec 'hi mailURL' . s:fg_aqua exec 'hi mailEmail' . s:fg_purple exec 'hi mailQuoted1' . s:fg_olive exec 'hi mailQuoted2' . s:fg_navy " XML Highlighting exec 'hi xmlProcessingDelim' . s:fg_pink exec 'hi xmlString' . s:fg_olive exec 'hi xmlEqual' . s:fg_orange exec 'hi xmlAttrib' . s:fg_navy exec 'hi xmlAttribPunct' . s:fg_pink exec 'hi xmlTag' . s:fg_blue exec 'hi xmlTagName' . s:fg_blue exec 'hi xmlEndTag' . s:fg_blue exec 'hi xmlNamespace' . s:fg_orange " Exlixir Highlighting " @target https://github.com/elixir-lang/vim-elixir exec 'hi elixirAlias' . s:fg_blue . s:ft_bold exec 'hi elixirAtom' . s:fg_navy exec 'hi elixirVariable' . s:fg_navy exec 'hi elixirUnusedVariable' . s:fg_foreground . s:ft_bold exec 'hi elixirInclude' . s:fg_purple exec 'hi elixirStringDelimiter' . s:fg_olive exec 'hi elixirKeyword' . s:fg_purple . s:ft_bold exec 'hi elixirFunctionDeclaration' . s:fg_aqua . s:ft_bold exec 'hi elixirBlockDefinition' . s:fg_pink exec 'hi elixirDefine' . s:fg_pink exec 'hi elixirStructDefine' . s:fg_pink exec 'hi elixirPrivateDefine' . s:fg_pink exec 'hi elixirModuleDefine' . s:fg_pink exec 'hi elixirProtocolDefine' . s:fg_pink exec 'hi elixirImplDefine' . s:fg_pink exec 'hi elixirModuleDeclaration' . s:fg_aqua . s:ft_bold exec 'hi elixirDocString' . s:fg_olive exec 'hi elixirDocTest' . s:fg_green . s:ft_bold " Erlang Highlighting exec 'hi erlangBIF' . s:fg_purple . s:ft_bold exec 'hi erlangBracket' . s:fg_pink exec 'hi erlangLocalFuncCall' . s:fg_foreground exec 'hi erlangVariable' . s:fg_foreground exec 'hi erlangAtom' . s:fg_navy exec 'hi erlangAttribute' . s:fg_blue . s:ft_bold exec 'hi erlangRecordDef' . s:fg_blue . s:ft_bold exec 'hi erlangRecord' . s:fg_blue exec 'hi erlangRightArrow' . s:fg_blue . s:ft_bold exec 'hi erlangStringModifier' . s:fg_olive . s:ft_bold exec 'hi erlangInclude' . s:fg_blue . s:ft_bold exec 'hi erlangKeyword' . s:fg_pink exec 'hi erlangGlobalFuncCall' . s:fg_foreground " Cucumber Highlighting exec 'hi cucumberFeature' . s:fg_blue . s:ft_bold exec 'hi cucumberBackground' . s:fg_pink . s:ft_bold exec 'hi cucumberScenario' . s:fg_pink . s:ft_bold exec 'hi cucumberGiven' . s:fg_orange exec 'hi cucumberGivenAnd' . s:fg_blue exec 'hi cucumberThen' . s:fg_orange exec 'hi cucumberThenAnd' . s:fg_blue exec 'hi cucumberWhen' . s:fg_purple . s:ft_bold exec 'hi cucumberScenarioOutline' . s:fg_pink . s:ft_bold exec 'hi cucumberExamples' . s:fg_aqua exec 'hi cucumberTags' . s:fg_aqua exec 'hi cucumberPlaceholder' . s:fg_aqua " Ada Highlighting exec 'hi adaInc' . s:fg_aqua . s:ft_bold exec 'hi adaSpecial' . s:fg_aqua . s:ft_bold exec 'hi adaKeyword' . s:fg_pink exec 'hi adaBegin' . s:fg_pink exec 'hi adaEnd' . s:fg_pink exec 'hi adaTypedef' . s:fg_navy . s:ft_bold exec 'hi adaAssignment' . s:fg_aqua . s:ft_bold exec 'hi adaAttribute' . s:fg_green " COBOL Highlighting exec 'hi cobolMarker' . s:fg_comment . s:bg_cursorline exec 'hi cobolLine' . s:fg_foreground exec 'hi cobolReserved' . s:fg_blue exec 'hi cobolDivision' . s:fg_pink . s:ft_bold exec 'hi cobolDivisionName' . s:fg_pink . s:ft_bold exec 'hi cobolSection' . s:fg_navy . s:ft_bold exec 'hi cobolSectionName' . s:fg_navy . s:ft_bold exec 'hi cobolParagraph' . s:fg_purple exec 'hi cobolParagraphName' . s:fg_purple exec 'hi cobolDeclA' . s:fg_purple exec 'hi cobolDecl' . s:fg_green exec 'hi cobolCALLs' . s:fg_aqua . s:ft_bold exec 'hi cobolEXECs' . s:fg_aqua . s:ft_bold " GNU sed highlighting exec 'hi sedST' . s:fg_purple . s:ft_bold exec 'hi sedFlag' . s:fg_purple . s:ft_bold exec 'hi sedRegexp47' . s:fg_pink exec 'hi sedRegexpMeta' . s:fg_blue . s:ft_bold exec 'hi sedReplacement47' . s:fg_olive exec 'hi sedReplaceMeta' . s:fg_orange . s:ft_bold exec 'hi sedAddress' . s:fg_pink exec 'hi sedFunction' . s:fg_aqua . s:ft_bold exec 'hi sedBranch' . s:fg_green . s:ft_bold exec 'hi sedLabel' . s:fg_green . s:ft_bold " GNU awk highlighting exec 'hi awkPatterns' . s:fg_pink . s:ft_bold exec 'hi awkSearch' . s:fg_pink exec 'hi awkRegExp' . s:fg_blue . s:ft_bold exec 'hi awkCharClass' . s:fg_blue . s:ft_bold exec 'hi awkFieldVars' . s:fg_green . s:ft_bold exec 'hi awkStatement' . s:fg_blue . s:ft_bold exec 'hi awkFunction' . s:fg_blue exec 'hi awkVariables' . s:fg_green . s:ft_bold exec 'hi awkArrayElement' . s:fg_orange exec 'hi awkOperator' . s:fg_foreground exec 'hi awkBoolLogic' . s:fg_foreground exec 'hi awkExpression' . s:fg_foreground exec 'hi awkSpecialPrintf' . s:fg_olive . s:ft_bold " Elm highlighting exec 'hi elmImport' . s:fg_navy exec 'hi elmAlias' . s:fg_aqua exec 'hi elmType' . s:fg_pink exec 'hi elmOperator' . s:fg_aqua . s:ft_bold exec 'hi elmBraces' . s:fg_aqua . s:ft_bold exec 'hi elmTypedef' . s:fg_blue . s:ft_bold exec 'hi elmTopLevelDecl' . s:fg_green . s:ft_bold " Purescript highlighting exec 'hi purescriptModuleKeyword' . s:fg_navy exec 'hi purescriptImportKeyword' . s:fg_navy exec 'hi purescriptModuleName' . s:fg_pink exec 'hi purescriptOperator' . s:fg_aqua . s:ft_bold exec 'hi purescriptType' . s:fg_pink exec 'hi purescriptTypeVar' . s:fg_navy exec 'hi purescriptStructure' . s:fg_blue . s:ft_bold exec 'hi purescriptLet' . s:fg_blue . s:ft_bold exec 'hi purescriptFunction' . s:fg_green . s:ft_bold exec 'hi purescriptDelimiter' . s:fg_aqua . s:ft_bold exec 'hi purescriptStatement' . s:fg_purple . s:ft_bold exec 'hi purescriptConstructor' . s:fg_pink exec 'hi purescriptWhere' . s:fg_purple . s:ft_bold " F# highlighting exec 'hi fsharpTypeName' . s:fg_pink exec 'hi fsharpCoreClass' . s:fg_pink exec 'hi fsharpType' . s:fg_pink exec 'hi fsharpKeyword' . s:fg_blue . s:ft_bold exec 'hi fsharpOperator' . s:fg_aqua . s:ft_bold exec 'hi fsharpBoolean' . s:fg_green . s:ft_bold exec 'hi fsharpFormat' . s:fg_foreground exec 'hi fsharpLinq' . s:fg_blue exec 'hi fsharpKeyChar' . s:fg_aqua . s:ft_bold exec 'hi fsharpOption' . s:fg_orange exec 'hi fsharpCoreMethod' . s:fg_purple exec 'hi fsharpAttrib' . s:fg_orange exec 'hi fsharpModifier' . s:fg_aqua exec 'hi fsharpOpen' . s:fg_red " ASN.1 highlighting exec 'hi asnExternal' . s:fg_green . s:ft_bold exec 'hi asnTagModifier' . s:fg_purple exec 'hi asnBraces' . s:fg_aqua . s:ft_bold exec 'hi asnDefinition' . s:fg_foreground exec 'hi asnStructure' . s:fg_blue exec 'hi asnType' . s:fg_pink exec 'hi asnTypeInfo' . s:fg_aqua . s:ft_bold exec 'hi asnFieldOption' . s:fg_purple " }}} " Plugin: Netrw exec 'hi netrwVersion' . s:fg_red exec 'hi netrwList' . s:fg_pink exec 'hi netrwHidePat' . s:fg_olive exec 'hi netrwQuickHelp' . s:fg_blue exec 'hi netrwHelpCmd' . s:fg_blue exec 'hi netrwDir' . s:fg_aqua . s:ft_bold exec 'hi netrwClassify' . s:fg_pink exec 'hi netrwExe' . s:fg_green exec 'hi netrwSuffixes' . s:fg_comment exec 'hi netrwTreeBar' . s:fg_linenumber_fg " Plugin: NERDTree exec 'hi NERDTreeUp' . s:fg_comment exec 'hi NERDTreeHelpCommand' . s:fg_pink exec 'hi NERDTreeHelpTitle' . s:fg_blue . s:ft_bold exec 'hi NERDTreeHelpKey' . s:fg_pink exec 'hi NERDTreeHelp' . s:fg_foreground exec 'hi NERDTreeToggleOff' . s:fg_red exec 'hi NERDTreeToggleOn' . s:fg_green exec 'hi NERDTreeDir' . s:fg_blue . s:ft_bold exec 'hi NERDTreeDirSlash' . s:fg_pink exec 'hi NERDTreeFile' . s:fg_foreground exec 'hi NERDTreeExecFile' . s:fg_green exec 'hi NERDTreeOpenable' . s:fg_aqua . s:ft_bold exec 'hi NERDTreeClosable' . s:fg_pink " Plugin: Tagbar exec 'hi TagbarHelpTitle' . s:fg_blue . s:ft_bold exec 'hi TagbarHelp' . s:fg_foreground exec 'hi TagbarKind' . s:fg_pink exec 'hi TagbarSignature' . s:fg_aqua " Plugin: Vimdiff exec 'hi DiffAdd' . s:fg_diffadd_fg . s:bg_diffadd_bg . s:ft_none exec 'hi DiffChange' . s:fg_diffchange_fg . s:bg_diffchange_bg . s:ft_none exec 'hi DiffDelete' . s:fg_diffdelete_fg . s:bg_diffdelete_bg . s:ft_none exec 'hi DiffText' . s:fg_difftext_fg . s:bg_difftext_bg . s:ft_none " Plugin: AGit exec 'hi agitHead' . s:fg_green . s:ft_bold exec 'hi agitHeader' . s:fg_olive exec 'hi agitStatAdded' . s:fg_diffadd_fg exec 'hi agitStatRemoved' . s:fg_diffdelete_fg exec 'hi agitDiffAdd' . s:fg_diffadd_fg exec 'hi agitDiffRemove' . s:fg_diffdelete_fg exec 'hi agitDiffHeader' . s:fg_pink exec 'hi agitDiff' . s:fg_foreground exec 'hi agitDiffIndex' . s:fg_purple exec 'hi agitDiffFileName' . s:fg_aqua exec 'hi agitLog' . s:fg_foreground exec 'hi agitAuthorMark' . s:fg_olive exec 'hi agitDateMark' . s:fg_comment exec 'hi agitHeaderLabel' . s:fg_aqua exec 'hi agitDate' . s:fg_aqua exec 'hi agitTree' . s:fg_pink exec 'hi agitRef' . s:fg_blue . s:ft_bold exec 'hi agitRemote' . s:fg_purple . s:ft_bold exec 'hi agitTag' . s:fg_orange . s:ft_bold " Plugin: Spell Checking exec 'hi SpellBad' . s:fg_foreground . s:bg_spellbad exec 'hi SpellCap' . s:fg_foreground . s:bg_spellcap exec 'hi SpellRare' . s:fg_foreground . s:bg_spellrare exec 'hi SpellLocal' . s:fg_foreground . s:bg_spelllocal " Plugin: Indent Guides exec 'hi IndentGuidesOdd' . s:bg_background exec 'hi IndentGuidesEven' . s:bg_cursorline " Plugin: Startify exec 'hi StartifyFile' . s:fg_blue . s:ft_bold exec 'hi StartifyNumber' . s:fg_orange exec 'hi StartifyHeader' . s:fg_comment exec 'hi StartifySection' . s:fg_pink exec 'hi StartifyPath' . s:fg_foreground exec 'hi StartifySlash' . s:fg_navy exec 'hi StartifyBracket' . s:fg_aqua exec 'hi StartifySpecial' . s:fg_aqua " Plugin: Signify exec 'hi SignifyLineChange' . s:fg_diffchange_fg exec 'hi SignifySignChange' . s:fg_diffchange_fg exec 'hi SignifyLineAdd' . s:fg_diffadd_fg exec 'hi SignifySignAdd' . s:fg_diffadd_fg exec 'hi SignifyLineDelete' . s:fg_diffdelete_fg exec 'hi SignifySignDelete' . s:fg_diffdelete_fg " Git commit message exec 'hi gitcommitSummary' . s:fg_blue exec 'hi gitcommitHeader' . s:fg_green . s:ft_bold exec 'hi gitcommitSelectedType' . s:fg_blue exec 'hi gitcommitSelectedFile' . s:fg_pink exec 'hi gitcommitUntrackedFile' . s:fg_diffdelete_fg exec 'hi gitcommitBranch' . s:fg_aqua . s:ft_bold exec 'hi gitcommitDiscardedType' . s:fg_diffdelete_fg exec 'hi gitcommitDiff' . s:fg_comment exec 'hi diffFile' . s:fg_blue exec 'hi diffSubname' . s:fg_comment exec 'hi diffIndexLine' . s:fg_comment exec 'hi diffAdded' . s:fg_diffadd_fg exec 'hi diffRemoved' . s:fg_diffdelete_fg exec 'hi diffLine' . s:fg_orange exec 'hi diffBDiffer' . s:fg_orange exec 'hi diffNewFile' . s:fg_comment " Pluging: CoC exec 'hi CocFloating' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi CocErrorFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi CocWarningFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi CocInfoFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi CocHintFloat' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none exec 'hi CocErrorHighlight' . s:fg_foreground . s:bg_spellbad exec 'hi CocWarningHighlight' . s:fg_foreground . s:bg_spellcap exec 'hi CocInfoHighlight' . s:fg_foreground . s:bg_spellcap exec 'hi CocHintHighlight' . s:fg_foreground . s:bg_spellcap exec 'hi CocErrorSign' . s:fg_error_fg . s:bg_error_bg exec 'hi CocWarningSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi CocInfoSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold exec 'hi CocHintSign' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold " Debug Adapter Protocol (DAP) - Plugin: rcarriga/nvim-dap-ui if has('nvim') exec 'hi DapUIDecoration' . s:fg_blue " DAP Scopes window hi! link DapUIType Type hi! link DapUIVariable Identifier exec 'hi DapUIScope' . s:fg_red . s:ft_bold hi! link DapUIValue Number exec 'hi DapUIModifiedValue' . s:fg_orange . s:ft_bold . s:bg_error_bg " DAP Breakpoints window hi! link DapUILineNumber LineNr hi! link DapUIBreakpointsDisabledLine LineNr exec 'hi DapUIBreakpointsCurrentLine' . s:fg_linenumber_fg . s:ft_bold . s:bg_error_bg exec 'hi DapUIBreakpointsInfo' . s:fg_green exec 'hi DapUIBreakpointsPath' . s:fg_olive . s:ft_bold " DAP Stacks window exec 'hi DapUIFrameName' . s:fg_blue exec 'hi DapUIThread' . s:fg_pink . s:ft_bold exec 'hi DapUIStoppedThread' . s:fg_pink " DAP Watches window exec 'hi DapUIWatchesEmpty' . s:fg_pink . s:ft_bold hi! link DapUIWatchesError DapUIWatchesEmpty hi! link DapUIWatchesValue Number " DAP Breakpoints window exec 'hi DapUISource' . s:fg_olive " DAP Floating window exec 'hi DapUIFloatBorder' . s:fg_blue endif " Plugin: hrsh7th/nvim-cmp if has('nvim') hi! link CmpItemKindValue Number hi! link CmpItemKindVariable Identifier hi! link CmpItemKindKeyword Keyword hi! link CmpItemKindField CmpItemKindVariable exec 'hi CmpItemKindFunction' . s:fg_blue hi! link CmpItemKindMethod CmpItemKindFunction hi! link CmpItemKindConstructor CmpItemKindFunction hi! link CmpItemKindClass Structure hi! link CmpItemKindInterface Structure exec 'hi CmpItemKindSnippet' . s:fg_orange exec 'hi CmpItemKindFile' . s:fg_orange hi! link CmpItemKindFolder CmpItemKindFile exec 'hi CmpItemAbbrMatch' . s:fg_blue . s:ft_bold exec 'hi CmpItemAbbrMatchFuzzy' . s:fg_blue . s:ft_bold exec 'hi CmpItemAbbrDeprecated' . s:fg_foreground . ' gui=strikethrough' endif endfun " }}} " ================================== MISC ===================================== " Command to show theme information {{{ fun! g:PaperColor() echom 'PaperColor Theme Framework' echom ' version ' . s:version echom ' by Nikyle Nguyen et al.' echom ' at https://github.com/NLKNguyen/papercolor-theme/' echom ' ' echom 'Current theme: ' . s:theme_name echom ' ' . s:selected_theme['description'] echom ' by ' . s:selected_theme['maintainer'] echom ' at ' . s:selected_theme['source'] " TODO: add diff display for theme color names between 'default' and current " theme if it is a custom theme, i.e. child theme. endfun " @brief command alias for g:PaperColor() command! -nargs=0 PaperColor :call g:PaperColor() " }}} " =============================== MAIN ======================================== hi clear syntax reset let g:colors_name = "PaperColor" call s:acquire_theme_data() call s:identify_color_mode() call s:generate_theme_option_variables() call s:generate_language_option_variables() call s:set_format_attributes() call s:set_overriding_colors() call s:convert_colors() call s:set_color_variables() call s:apply_syntax_highlightings() " ============================================================================= " Cheers! " vim: fdm=marker ff=unix