<% information = { author: "Ray Elliott", email: "vim@rayelliott.dev", name: "paper-custom", description: "", background: "light", webpage: "https://rayelliott.dev" } bg_cursorline = ["#eeeeee", 250, "white"] bg_colorcolumn = ["#f7f2f2", 250, "white"] bg_cursorcolumn = ["#eeeeee", 250, "white"] bg = ["#ffffff", 234, "black"] bg_cursorline_input = ["#dddddd", 17, "darkblue"] fg_weak = ["#9d9d9d", 238, "gray"] fg = ["#8c8c8c", 243, "gray"] fg_strong = ["#777777", 232, "gray"] # color_primary_weak = ["#76799d", 124, "red"] # color_primary = ["#5d5f7b", 88, "darkred"] # color_primary_strong = ["#444762", 52, "darkred"] color_primary_weak = ["#e846ac", 164, "magenta"] color_primary = ["#d70087", 164, "magenta"] color_primary_strong = ["#ad006d", 164, "magenta"] color_2_weak = ["#5e955e", 28, "darkgreen"] color_2 = ["#008700", 22, "darkgreen"] color_2_strong = ["#005a00", 22, "darkgreen"] color_3_weak = ["#2d78b7", 20, "blue"] color_3 = ["#005faf", 19, "blue"] color_3_strong = ["#004f92", 17, "darkblue"] color_4_weak = ["#78b7d5", 20, "blue"] color_4 = ["#56acd7", 19, "blue"] color_4_strong = ["#1596d7", 17, "darkblue"] color_5_weak = ["#898fcb", 20, "blue"] color_5 = ["#7e84c6", 19, "darkblue"] color_5_strong = ["#5c6191", 17, "darkblue"] fg_error = ["#d70000", 196, "red"] fg_spellcap = ["#d75f00", 166, "yellow"] fg_spellrare = ["#d7813e", 247, "darkyellow"] fg_spelllocal = fg_spellrare bg_whitespace_error = ["#efe6e6", 196, "red"] fg_todo = ["#d70000", 196, "red"] ui_bg = ["#efefef", 238, "gray"] ui_fg_weak = ["#bbbbbb", 240, "gray"] ui_fg = ["#929292", 243, "gray"] ui_fg_strong = ["#555555", 255, "white"] ui_search = ["#dce5ed", 17, "darkblue"] ui_incsearch = ["#beced5", 17, "darkblue"] ui_match_bg = ["#a3e0ff", 17, "darkblue"] ui_visual_bg = ["#ced8e0", 17, "darkblue"] ui_visualnos_bg = ["#e0d4ce", 52, "darkred"] ui_fg_error = ["#d70000", 196, "red"] ui_fg_warning = ["#d75f00", 166, "yellow"] ui_fg_question = ["#56acd7", 247, "darkgray"] # Step 3: highlights highlights = [ [ "DiffAdd", ["#e0ece0", 22, "darkgreen"], "NONE", "NONE" ], [ "DiffChange", ["#e0e0ec", 17, "darkblue"], "NONE", "NONE" ], [ "DiffDelete", ["#ece0e0", 52, "darkred"], "NONE", "NONE" ], [ "DiffText", ["#e0e0ec", 17, "darkblue"], ["#656a7c", 21, "white"], "NONE" ], [ "GitGutterDelete", "NONE", ["#725454", 124, "red"], "bold"], [ "GitGutterChange", "NONE", ["#596171", 19, "blue"], "bold"], [ "GitGutterAdd", "NONE", ["#496349", 34, "green"], "bold"], [ "GitGutterChangeDelete", "NONE", ["#5c4a5a", 126, "magenta"], "bold"], [ "Normal", bg, fg, "NONE" ], [ "Special", "NONE", color_primary_strong, "bold" ], [ "NonText", "NONE", color_primary_strong, "NONE" ], [ "Tag", color_primary_weak, "NONE", "NONE" ], [ "Identifier", "NONE", color_primary, "bold" ], [ "Function", "NONE", color_primary, "NONE" ], [ "Type", "NONE", color_primary_weak, "bold" ], [ "StorageClass", "NONE", color_primary_weak, "NONE" ], [ "Structure", "StorageClass"], [ "TypeDef", "StorageClass"], [ "Constant", "NONE", fg_strong, "italic" ], [ "String", "NONE", fg_strong, "italic" ], [ "Character", "String" ], [ "Number", "String" ], [ "Boolean", "String" ], [ "Float", "String" ], [ "Folded", "NONE", fg_strong, "bold" ], [ "Statement", "NONE", fg, "NONE" ], [ "Conditional", "NONE", fg_strong, "NONE" ], [ "Repeat", "NONE", fg_strong, "NONE" ], [ "Label", "NONE", fg_strong, "bold" ], [ "Operator", "NONE", fg_weak, "NONE" ], [ "Keyword", "NONE", fg_strong, "NONE" ], [ "Exception", "NONE", color_primary_weak, "bold" ], [ "PreProc", "NONE", fg_weak, "bold" ], [ "Include", "NONE", fg_weak, "NONE" ], [ "Comment", "NONE", fg_weak, "bold,italic" ], [ "SpecialComment", "NONE", fg_strong, "italic"], [ "Todo", "NONE", fg_todo, "bold,italic" ], [ "Ignore", "NONE", bg, "NONE" ], [ "Conceal", "NONE", "NONE", "NONE" ], [ "Error", "NONE", fg_error, "bold" ], [ "Underlined", "NONE", "NONE", "underline" ], [ "StatusLine", ui_bg, ui_fg_strong, "italic" ], [ "StatusLineNC", ui_bg, ui_fg, "italic" ], [ "TabLine", "StatusLineNc" ], [ "TabLineSel", "StatusLine" ], [ "TabLineNumSel", "StatusLine"], # used in init.tabline.vim [ "TabLineFill", ui_bg, ui_bg, "italic" ], [ "TabLineItem", ui_bg, ui_fg, "italic" ], [ "TabLineItemSel", ui_bg, ui_fg_strong, "italic" ], [ "VertSplit", bg, ui_bg, "NONE" ], [ "FoldColumn", bg, fg_weak, "NONE" ], [ "ColorColumn", bg_colorcolumn, "NONE", "NONE" ], [ "SignColumn", bg, ui_fg_strong, "NONE" ], [ "CursorLine", bg_cursorline, "NONE", "NONE" ], [ "Title", "NONE", fg_strong, "bold,italic" ], [ "LineNr", bg, fg_weak, "NONE" ], [ "CursorLineNr", bg, fg_weak, "bold" ], [ "Pmenu", ui_bg, ui_fg, "NONE" ], [ "PmenuSbar", ui_bg, ui_fg, "NONE" ], [ "PmenuSel", ui_bg, ui_fg_strong, "bold" ], [ "PmenuThumb", ui_bg, ui_fg, "NONE" ], [ "SpecialKey", "NONE", color_primary_strong, "NONE" ], [ "IncSearch", ui_incsearch, bg, "NONE" ], [ "Search", ui_search, ui_fg_strong, "NONE" ], [ "Visual", ui_visual_bg, "NONE", "NONE" ], [ "VisualNOS", ui_visualnos_bg, "NONE", "NONE" ], [ "Directory", "NONE", ui_fg_strong, "NONE" ], [ "MatchParen", ui_match_bg, "NONE", "bold" ], [ "SpellBad", "NONE", fg_error, "NONE", fg_error ], [ "SpellCap", "NONE", fg_spellcap, "NONE", fg_spellcap ], [ "SpellLocal", "NONE", fg_spelllocal, "NONE", fg_spellcap ], [ "SpellRare", "NONE", fg_spellrare, "NONE", fg_spellcap ], [ "WildMenu", ui_bg, ui_fg_strong, "bold" ], [ "ErrorMsg", "NONE", ui_fg_error, "italic" ], [ "ModeMsg", "NONE", ui_fg_strong, "italic" ], [ "MoreMsg", "NONE", ui_fg_strong, "italic" ], [ "Question", "NONE", ui_fg_question, "italic" ], [ "WarningMsg", "NONE", ui_fg_warning, "italic" ], [ "CursorColumn", bg_cursorcolumn, "NONE", "NONE" ], [ "EndOfBuffer", bg, bg, "NONE" ], [ "Noise", "NONE", ui_fg_weak, "NONE"], [ "QuickScopePrimary", "IncSearch" ], [ "QuickScopeSecondary", "Pmenu" ], # css, scss [ "cssIdentifier", "NONE", color_2, "bold" ], [ "cssClass", "NONE", color_2_weak, "NONE" ], [ "cssFunction", "Keyword" ], [ "cssProp", "NONE", fg_weak, "NONE" ], [ "scssVariable", "NONE", color_2_strong, "bold" ], [ "cssAttr", "String"], [ "cssIdentifierAttr", "Noise" ], [ "cssClassAttr", "cssIdentifierAttr" ], [ "cssAttrNoise", "Noise" ], [ "atKeyword", "PreProc" ], [ "cssIdentifier", "cssIdentifier" ], [ "cssClassName", "cssClass" ], [ "cssClassNameDot", "cssClass" ], [ "cssTagName", "htmlTagName" ], [ "cssPseudoClassId", "cssClassName" ], [ "cssKeyFrameSelector", "Label" ], [ "cssFunctionName", "cssFunction" ], [ "cssBraces", "Noise" ], [ "cssUnitDecorators", "NONE", fg_strong, "NONE" ], [ "cssSelectorOp", "Conditional" ], [ "scssSelector", "cssClass" ], [ "scssSelectorName", "scssSelector" ], [ "scssSelectorChar", "cssIdentifier" ], [ "scssFunctionName", "cssFunctionName" ], [ "scssMixin", "keyword" ], [ "scssMixinName", "cssFunction" ], [ "scssampersand", "scssSelectorName" ], [ "scssSemicolon", "Noise" ], [ "scssAtRoot", "atKeyword" ], [ "vue_scss", "cssIdentifier" ], #html ["htmlTagName", "NONE", color_3_weak, "NONE"], ["htmlSpecialTagName", "NONE", color_3, "bold"], ["htmlLink", "NONE", fg_strong, "italic,underline"], [ "htmlNormal", "Normal" ], [ "htmlTitle", "Title" ], [ "htmlH1", "htmlTitle" ], [ "htmlTag", "Noise" ], [ "htmlEndTag", "htmlTag" ], [ "htmlArg", "PreProc" ], [ "htmlValue", "String" ], [ "htmlSpecialChar", "Special" ], [ "htmlPreStmt", "PreProc" ], [ "htmlPreError", "Error" ], [ "htmlPreProc", "PreProc" ], [ "htmlPreAttr", "String" ], [ "htmlPreProcAttrName", "PreProc" ], [ "htmlPreProcAttrError", "Error" ], [ "htmlSpecial", "Special" ], [ "htmlSpecialChar", "Special" ], [ "htmlString", "String" ], [ "htmlStatement", "Statement" ], [ "htmlComment", "Comment" ], [ "htmlCommentPart", "Comment" ], [ "htmlValue", "String" ], [ "htmlCommentError", "htmlError" ], [ "htmlTagError", "htmlError" ], [ "htmlEvent", "javaScript" ], [ "htmlError", "Error" ], [ "javaScript", "Special" ], [ "javaScriptExpression", "javaScript" ], [ "htmlCssStyleComment", "Comment" ], [ "htmlCssDefinition", "Special" ], [ "htmlImgArg", "htmlArg" ], [ "htmlSrcValue", "String" ], [ "htmlSrcsetValue", "htmlSrcValue" ], [ "htmlAltValue", "String" ], [ "htmlDataArg", "htmlTagName" ], [ "htmlDataValue", "Constant" ], [ "htmlHrefArg", "htmlArg" ], [ "htmlHrefValue", "htmlSrcValue" ], # vue [ "vueSpecial", "NONE", color_4_strong, "bold" ], [ "vueTagSpecial", "NONE", color_4, "bold" ], [ "vueTagComponentName", "NONE", color_4_weak, "NONE" ], [ "vueDynamicComponent", "NONE", color_4_weak, "bold" ], [ "vueSlotName", "Constant" ], [ "vueComponentName", "vueTagComponentName" ], [ "vueTransitionComponent", "vueDynamicComponent" ], [ "vueTransitionName", "vueSlotName" ], [ "vueTransitionMode", "String" ], [ "vueDirective", "Identifier" ], [ "vueEvent", "Function" ], [ "vueConditional", "vueSpecial" ], [ "vueFor", "vueConditional" ], [ "vueRef", "vueSpecial" ], [ "vueSlot", "Noise" ], [ "vueDirectiveValue", "Type" ], [ "vueEventValue", "vueDirectiveValue" ], [ "vueConditionalValue", "vueDirectiveValue" ], [ "vueForValue", "vueConditionalValue" ], [ "vueRefValue", "Constant" ], [ "vueSlotValue", "vueSlotName" ], [ "vueObjectKey", "cssClass" ], [ "vueObjectValue", "vueDirectiveValue" ], [ "vueDirectiveClass", "Noise" ], [ "vueMustache", "Type" ], # javascript [ "jsFunctionKey", "Function" ], [ "jsFuncCall", "Function" ], [ "jsFuncCall", "Identifier" ], [ "jsOperator", "Operator" ], [ "jsVariableDef", "Identifier" ], [ "jsGlobalObjects", "Keyqord" ], [ "jsGlobalNodeObjects", "jsGlobalObjects" ], [ "jsExceptions", "Exception" ], [ "jsBuiltins", "jsGlobalObjects" ], [ "jsStorageClass", "Include" ], [ "jsObjectKey", "Identifier" ], [ "jsObjectProp", "Type" ], [ "jsObjectValue", "StorageClass" ], [ "jsModuleKeyword", "Type" ], [ "jsOperatorKeyword", "Label" ], [ "jsThis", "jsGlobalObjects" ], [ "jsArrowFunction", "Function" ], # python [ "pythonBuiltin", "Type" ], [ "pythonBuiltinObj", "Special" ], [ "pythonDottedName", "Identifier" ], [ "pythonBrackets", "Noise" ], [ "pythonQuotes", "Noise" ], [ "pythonDot", "Noise" ], [ "pythonNoise", "Noise" ], [ "pythonExtraOperator", "Operator" ], [ "pythonDocString", "SpecialComment" ], [ "pythonSelf", "NONE", fg_weak, "bold" ], [ "JinjaVarBlock", "Noise" ], [ "JinjaTagBlock", "JinjaVarBlock" ], [ "jinjaSpecial", "NONE", color_5_strong, "bold"], [ "jinjaRaw", "NONE", color_5_strong, "NONE"], [ "jinjaStatement", "NONE", color_5, "NONE"], [ "jinjaFilter", "NONE", color_5_weak, "NONE"], [ "jinjaBlockName", "NONE", color_5_weak, "NONE"], [ "jinjaVariable", "NONE", color_5, "NONE"], [ "jinjaString", "String"], [ "jinjaNumber", "Number"], [ "jinjaOperator", "Noise"], [ "jinjaComment", "Comment"], # sql [ "sqlOperator", "Operator" ], # vim [ "vimFoldMarker", "NONE", fg_weak, "NONE"], [ "vimMap", "Noise" ], [ "vimAbb", "vimMap" ], [ "VimCommand", "Statement" ], [ "VimOption", "String" ], [ "vimFunction", "Function" ], [ "vimFuncKey", "Special" ], [ "vimHighlight", "Noise" ], [ "vimAuGroupKey", "Noise" ], [ "vimGroupName", "Special" ], [ "vimAutoCmd", "Noise" ], [ "vimSynMtchGrp", "Type" ], [ "vimSynContains", "Type" ], [ "vimSynRegOpt", "Type" ], [ "vimHiTerm", "Include" ], [ "vimHiAttrib", "Number" ], [ "VimIsCommand", "Type" ], [ "vimNotation", "StorageClass" ], [ "vimMapLhs", "Special" ], [ "vimMapRhs", "Label" ], [ "vimNotFunc", "Conditional" ], [ "vimSep", "Noise" ], [ "vimParenSep", "vimSep" ], [ "vimContinue", "vimSep" ], [ "vimBracket", "vimSep" ], [ "vimOperParen", "Normal" ], [ "vimUserFunc", "Identifier" ], [ "vimFoldMarker", "Noise" ], # yaml ["yamlKeyValueDelimiter", "Noise" ], ["yamlFowIndicator", "Noise" ], # config highlighting [ "confComment", "Comment" ], # markdown ["markdownDelimiter", "NONE", fg_weak, "bold"], ["markdownHeadingDelimiter", "markdownDelimiter"], ["markdownListMarker", "NONE", fg_strong, "bold"], ["markdownCodeDelimiter", "markdownDelimiter"], ["markdownCode", "Type"], ["markdownItalic", "NONE", fg, "italic"], ["markdownItalicDelimiter", "markdownDelimiter"], ["markdownBold", "NONE", fg, "bold"], ["markdownBoldDelimiter", "markdownDelimiter"], ["markdownIdDeclaration", "Conditional"], ["markdownId", "markdownIdDeclaration"], ["markdownLinkText", "NONE", fg_strong, "underline"], # extra whitespace [ "ExtraWhitespace", bg_whitespace_error ,"NONE", "NONE" ], # php [ "phpRegion", "Normal" ], [ "phpComparison", "Operator" ], [ "phpMethod", "Function" ], [ "phpParent", "Normal" ], [ "phpMemberSelector", "StorageClass" ], [ "phpVarSelector", "StorageClass" ], # quickfix [ "QuickfixLine", "NONE", ui_fg_strong, "bold" ], [ "qfLineNr", "NONE", ui_fg_weak, "italic"], [ "qfFilename", "NONE", ui_fg, "bold" ], [ "qfSeparator", "Ignore" ], [ "qfError", "ErrorMsg" ], # json [ "jsonKeyword", "Identifier" ], [ "jsonValue", "String" ], [ "jsonQuote", "Noise" ], # octobercms [ "octobercmsSectionDelimiter", "Noise" ], # plugins [ "CocErrorSign", "ErrorMsg" ], [ "CocWarningSign", "WarningMsg" ], [ "CocInfoSign", "Question" ], [ "CocHintSign", "Question" ], [ "CocHighlightText", "IncSearch" ], [ "CocUnderline", "NONE", fg_error, "NONE" ], [ "LspErrorText", "ErrorMsg" ], [ "LspWarningText", "WarningMsg" ], [ "LspInformationText", "Question" ], [ "LspHintText", "Question" ], [ "ALEError", "CocUnderline" ], [ "ALEErrorSign", "ErrorMsg" ], [ "ALEErrorSign", "ErrorMsg" ], [ "mkdCodeStart", "Comment" ], [ "mkdListItem", "Conditional" ], # netrw [ "netrwTreeBar", "Noise" ], [ "netrwClassify", "Noise" ], [ "netrwExe", "Identifier" ], [ "netrwDir", "String" ], [ "netrwPlain", "Statement" ], [ "netrwHelpCmd", "Type" ], [ "netrwCmdNote", "function" ], [ "netrwQuickHelp", "netrwCmdNote" ], [ "netrwCmdSep", "Noise" ], [ "netrwVersion", "StorageClass" ], [ "netrwList", "String" ], [ "netrwHidePat", "Identifier" ], # i3config [ "Variable", "Function" ], # shell [ "shDerefSimple", "StorageClass" ], [ "shHereDoc01", "Special" ], [ "shHereDoc02", "shHereDoc01" ], [ "shHereDoc05", "shHereDoc01" ], [ "shHereDoc", "Label" ], #various [ "RubyStringDelimiter", "Noise" ] ] # Step 4: generation # # From a separate shell: # # $ erb -T - bar.erb > bar.vim # # From Vim: # # :!erb -T - % > %:r.vim # These online resources can help you design your colorscheme: # # * http://upload.wikimedia.org/wikipedia/en/1/15/Xterm_256color_chart.svg # the xterm palette # * http://whatcolor.herokuapp.com/ # play with hexadecimal colors right in the address bar (currently down) # * http://color.hailpixel.com/ # similar concept, fuzzier implementation # * http://colourco.de/ # similar concept, fancier implementation # * http://www.colr.org/ # extract a palette from an image # * http://colores.manugarri.com/ # search for 'word', get images and color palettes # * http://www.colourlovers.com/palettes # user-created palettes # * http://www.perbang.dk/color+scheme/ # a no-nonsense colorscheme generator # * https://color.adobe.com/ # Adobe's fancy colorscheme generator # * http://paletton.com/ # The classic 'Color Scheme Designer', rebranded # * http://vrl.cs.brown.edu/color # A very smart palette generator # * https://cmcenroe.me/2018/04/03/colour-scheme.html # "I Made My Own Colour Scheme and You Can Too!" # A few general advices: # # * The Windows console is limited to the 16 so-called "ANSI" colors but it has # a few of them interverted which makes numbers impractical. Use color names # instead of numbers: :help cterm-colors # * The Windows console (yeah…) doesn't do italics, underlines or bolded text; # it is limited to normal and reverse. Keep that in mind if you want # your colorscheme to be usable in as many environments as possible by as many # people as possible. # * All of the terminal emulators in use these days allow their users to # change the 16 so-called "ANSI" colors. It is also possible on some platforms # to change some or all of the 256 colors in the xterm palette. Don't take # anything for granted. # * When used against a light background, strong colors work better than muted # ones. Light or dark doesn't really matters. Also, it is harder to discriminate # between two similar colors on a light background. # * Both strong and muted colors work well against a dark background. It is also # easier to work with similar colors, but dark colors don't work at all. # * Use as many text samples as possible. String-heavy languages may look completely # different than keyword-heavy ones. This can have an impact on the usability # of your colorscheme. # * Most terminal emulators and terminal multiplexers currently in use on unix-like # systems support 256 colors but they almost always default to a '$TERM' that tells # Vim otherwise. Your users will need to make sure their terminal emulator/multiplexer # is correctly set up if they want to enjoy the best possible experience. # Many thanks to Barry Arthur (https://github.com/dahu) for the original idea. # You don't need to edit anything beyond this line. -%> " <%= information[:name] %>.vim -- Vim color scheme. " Author: <%= information[:author] %> (<%= information[:email] %>) " Webpage: <%= information[:webpage] %> " Description: <%= information[:description] %> hi clear if exists("syntax_on") syntax reset endif let colors_name = "<%= information[:name] %>" if ($TERM =~ '256' || &t_Co >= 256) || has("gui_running") <% for highlight in highlights -%> <% if highlight.length == 2 -%> hi link <%= highlight[0] %> <%= highlight[1] %> <% elsif highlight.length == 4 -%> hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][1] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][1] %> cterm=<%= highlight[3] %> guibg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][0] %> guifg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][0] %> gui=<%= highlight[3] %> <% if highlight[0] == "Normal" -%> set background=<%= information[:background] %> <% end -%> <% else -%> hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][1] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][1] %> cterm=<%= highlight[3] %> guibg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][0] %> guifg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][0] %> gui=<%= highlight[3] %> guisp=<%= highlight[4].kind_of?(String) ? highlight[4] : highlight[4][0] %> <% end -%> <% end -%> elseif &t_Co == 8 || $TERM !~# '^linux' || &t_Co == 16 set t_Co=16 <% for highlight in highlights -%> <% if highlight.length == 2 -%> hi link <%= highlight[0] %> <%= highlight[1] %> <% else -%> hi <%= highlight[0] %> ctermbg=<%= highlight[1].kind_of?(String) ? highlight[1] : highlight[1][2] %> ctermfg=<%= highlight[2].kind_of?(String) ? highlight[2] : highlight[2][2] %> cterm=<%= highlight[3] %> <% if highlight[0] == "Normal" -%> set background=<%= information[:background] %> <% end -%> <% end -%> <% end -%> endif augroup cursorlinebg au! au InsertEnter * hi CursorLine ctermbg=<%= bg_cursorline_input[1] %> ctermfg=NONE cterm=NONE guibg=<%= bg_cursorline_input[0] %> guifg=NONE au InsertLeave * hi CursorLine ctermbg=<%= bg_cursorline[1] %> ctermfg=NONE cterm=NONE guibg=<%= bg_cursorline[0] %> guifg=NONE augroup END