monokai.vim 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. " File: monokai.vim
  2. " Maintainer: Crusoe Xia (crusoexia)
  3. " URL: https://github.com/crusoexia/vim-monokai
  4. " License: MIT
  5. "
  6. " The colour palette is from http://www.colourlovers.com/
  7. " The original code is from https://github.com/w0ng/vim-hybrid
  8. " Initialisation
  9. " --------------
  10. if !has("gui_running") && &t_Co < 256
  11. finish
  12. endif
  13. if ! exists("g:monokai_gui_italic")
  14. let g:monokai_gui_italic = 1
  15. endif
  16. if ! exists("g:monokai_term_italic")
  17. let g:monokai_term_italic = 0
  18. endif
  19. let g:monokai_termcolors = 256 " does not support 16 color term right now.
  20. set background=dark
  21. hi clear
  22. if exists("syntax_on")
  23. syntax reset
  24. endif
  25. let colors_name = "monokai"
  26. function! s:h(group, style)
  27. let s:ctermformat = "NONE"
  28. let s:guiformat = "NONE"
  29. if has_key(a:style, "format")
  30. let s:ctermformat = a:style.format
  31. let s:guiformat = a:style.format
  32. endif
  33. if g:monokai_term_italic == 0
  34. let s:ctermformat = substitute(s:ctermformat, ",italic", "", "")
  35. let s:ctermformat = substitute(s:ctermformat, "italic,", "", "")
  36. let s:ctermformat = substitute(s:ctermformat, "italic", "", "")
  37. endif
  38. if g:monokai_gui_italic == 0
  39. let s:guiformat = substitute(s:guiformat, ",italic", "", "")
  40. let s:guiformat = substitute(s:guiformat, "italic,", "", "")
  41. let s:guiformat = substitute(s:guiformat, "italic", "", "")
  42. endif
  43. if g:monokai_termcolors == 16
  44. let l:ctermfg = (has_key(a:style, "fg") ? a:style.fg.cterm16 : "NONE")
  45. let l:ctermbg = (has_key(a:style, "bg") ? a:style.bg.cterm16 : "NONE")
  46. else
  47. let l:ctermfg = (has_key(a:style, "fg") ? a:style.fg.cterm : "NONE")
  48. let l:ctermbg = (has_key(a:style, "bg") ? a:style.bg.cterm : "NONE")
  49. end
  50. execute "highlight" a:group
  51. \ "guifg=" (has_key(a:style, "fg") ? a:style.fg.gui : "NONE")
  52. \ "guibg=" (has_key(a:style, "bg") ? a:style.bg.gui : "NONE")
  53. \ "guisp=" (has_key(a:style, "sp") ? a:style.sp.gui : "NONE")
  54. \ "gui=" (!empty(s:guiformat) ? s:guiformat : "NONE")
  55. \ "ctermfg=" . l:ctermfg
  56. \ "ctermbg=" . l:ctermbg
  57. \ "cterm=" (!empty(s:ctermformat) ? s:ctermformat : "NONE")
  58. endfunction
  59. " Palettes
  60. " --------
  61. let s:white = { "gui": "#E8E8E3", "cterm": "252" }
  62. let s:black = { "gui": "#272822", "cterm": "234" }
  63. let s:lightblack = { "gui": "#2D2E27", "cterm": "235" }
  64. let s:lightblack2 = { "gui": "#383a3e", "cterm": "236" }
  65. let s:darkblack = { "gui": "#211F1C", "cterm": "233" }
  66. let s:grey = { "gui": "#8F908A", "cterm": "243" }
  67. let s:lightgrey = { "gui": "#575b61", "cterm": "237" }
  68. let s:darkgrey = { "gui": "#64645e", "cterm": "239" }
  69. let s:warmgrey = { "gui": "#75715E", "cterm": "59" }
  70. let s:pink = { "gui": "#F92772", "cterm": "197" }
  71. let s:green = { "gui": "#A6E22D", "cterm": "148" }
  72. let s:aqua = { "gui": "#66d9ef", "cterm": "81" }
  73. let s:yellow = { "gui": "#E6DB74", "cterm": "186" }
  74. let s:orange = { "gui": "#FD9720", "cterm": "208" }
  75. let s:purple = { "gui": "#ae81ff", "cterm": "141" }
  76. let s:red = { "gui": "#e73c50", "cterm": "196" }
  77. let s:darkred = { "gui": "#5f0000", "cterm": "52" }
  78. let s:addfg = { "gui": "#d7ffaf", "cterm": "193" }
  79. let s:addbg = { "gui": "#5f875f", "cterm": "65" }
  80. let s:delbg = { "gui": "#f75f5f", "cterm": "167" }
  81. let s:changefg = { "gui": "#d7d7ff", "cterm": "189" }
  82. let s:changebg = { "gui": "#5f5f87", "cterm": "60" }
  83. " Highlighting
  84. " ------------
  85. " editor
  86. call s:h("Normal", { "fg": s:white, "bg": s:black })
  87. call s:h("ColorColumn", { "bg": s:lightblack })
  88. call s:h("CursorColumn", { "bg": s:lightblack2 })
  89. call s:h("CursorLine", { "bg": s:lightblack2 })
  90. call s:h("NonText", { "fg": s:lightgrey })
  91. call s:h("StatusLine", { "fg": s:warmgrey, "bg": s:black, "format": "reverse" })
  92. call s:h("StatusLineNC", { "fg": s:darkgrey, "bg": s:warmgrey, "format": "reverse" })
  93. call s:h("TabLine", { "fg": s:white, "bg": s:darkblack, "format": "reverse" })
  94. call s:h("Visual", { "bg": s:lightgrey })
  95. call s:h("Search", { "fg": s:black, "bg": s:yellow })
  96. call s:h("MatchParen", { "fg": s:black, "bg": s:purple })
  97. call s:h("Question", { "fg": s:yellow })
  98. call s:h("ModeMsg", { "fg": s:yellow })
  99. call s:h("MoreMsg", { "fg": s:yellow })
  100. call s:h("ErrorMsg", { "fg": s:black, "bg": s:red, "format": "standout" })
  101. call s:h("WarningMsg", { "fg": s:red })
  102. call s:h("VertSplit", { "fg": s:darkgrey, "bg": s:darkblack })
  103. call s:h("LineNr", { "fg": s:grey, "bg": s:lightblack })
  104. call s:h("CursorLineNr", { "fg": s:orange, "bg": s:lightblack })
  105. call s:h("SignColumn", { "bg": s:lightblack })
  106. " misc
  107. call s:h("SpecialKey", { "fg": s:pink })
  108. call s:h("Title", { "fg": s:yellow })
  109. call s:h("Directory", { "fg": s:aqua })
  110. " diff
  111. call s:h("DiffAdd", { "fg": s:addfg, "bg": s:addbg })
  112. call s:h("DiffDelete", { "fg": s:black, "bg": s:delbg })
  113. call s:h("DiffChange", { "fg": s:changefg, "bg": s:changebg })
  114. call s:h("DiffText", { "fg": s:black, "bg": s:aqua })
  115. " fold
  116. call s:h("Folded", { "fg": s:warmgrey, "bg": s:darkblack })
  117. call s:h("FoldColumn", { "bg": s:darkblack })
  118. " Incsearch"
  119. " popup menu
  120. call s:h("Pmenu", { "fg": s:lightblack, "bg": s:white })
  121. call s:h("PmenuSel", { "fg": s:aqua, "bg": s:black, "format": "reverse,bold" })
  122. call s:h("PmenuThumb", { "fg": s:lightblack, "bg": s:grey })
  123. " PmenuSbar"
  124. " Generic Syntax Highlighting
  125. " ---------------------------
  126. call s:h("Constant", { "fg": s:purple })
  127. call s:h("Number", { "fg": s:purple })
  128. call s:h("Float", { "fg": s:purple })
  129. call s:h("Boolean", { "fg": s:purple })
  130. call s:h("Character", { "fg": s:yellow })
  131. call s:h("String", { "fg": s:yellow })
  132. call s:h("Type", { "fg": s:aqua })
  133. call s:h("Structure", { "fg": s:aqua })
  134. call s:h("StorageClass", { "fg": s:aqua })
  135. call s:h("Typedef", { "fg": s:aqua })
  136. call s:h("Identifier", { "fg": s:green })
  137. call s:h("Function", { "fg": s:green })
  138. call s:h("Statement", { "fg": s:pink })
  139. call s:h("Operator", { "fg": s:pink })
  140. call s:h("Label", { "fg": s:pink })
  141. call s:h("Keyword", { "fg": s:aqua })
  142. " Conditional"
  143. " Repeat"
  144. " Exception"
  145. call s:h("PreProc", { "fg": s:green })
  146. call s:h("Include", { "fg": s:pink })
  147. call s:h("Define", { "fg": s:pink })
  148. call s:h("Macro", { "fg": s:green })
  149. call s:h("PreCondit", { "fg": s:green })
  150. call s:h("Special", { "fg": s:purple })
  151. call s:h("SpecialChar", { "fg": s:pink })
  152. call s:h("Delimiter", { "fg": s:pink })
  153. call s:h("SpecialComment",{ "fg": s:aqua })
  154. call s:h("Tag", { "fg": s:pink })
  155. " Debug"
  156. call s:h("Todo", { "fg": s:orange, "format": "bold" })
  157. call s:h("Comment", { "fg": s:warmgrey, "format": "" })
  158. call s:h("Underlined", { "fg": s:green })
  159. call s:h("Ignore", {})
  160. call s:h("Error", { "fg": s:red, "bg": s:darkred })
  161. " NerdTree
  162. " --------
  163. call s:h("NERDTreeOpenable", { "fg": s:yellow })
  164. call s:h("NERDTreeClosable", { "fg": s:yellow })
  165. call s:h("NERDTreeHelp", { "fg": s:yellow })
  166. call s:h("NERDTreeBookmarksHeader", { "fg": s:pink })
  167. call s:h("NERDTreeBookmarksLeader", { "fg": s:black })
  168. call s:h("NERDTreeBookmarkName", { "fg": s:yellow })
  169. call s:h("NERDTreeCWD", { "fg": s:pink })
  170. call s:h("NERDTreeUp", { "fg": s:white })
  171. call s:h("NERDTreeDirSlash", { "fg": s:grey })
  172. call s:h("NERDTreeDir", { "fg": s:grey })
  173. " Syntastic
  174. " ---------
  175. hi! link SyntasticErrorSign Error
  176. call s:h("SyntasticWarningSign", { "fg": s:lightblack, "bg": s:orange })
  177. " Language highlight
  178. " ------------------
  179. " Java properties
  180. call s:h("jpropertiesIdentifier", { "fg": s:pink })
  181. " Vim command
  182. call s:h("vimCommand", { "fg": s:pink })
  183. " Javascript
  184. call s:h("jsFuncName", { "fg": s:green })
  185. call s:h("jsThis", { "fg": s:pink })
  186. call s:h("jsFunctionKey", { "fg": s:green })
  187. call s:h("jsPrototype", { "fg": s:aqua })
  188. call s:h("jsExceptions", { "fg": s:aqua })
  189. call s:h("jsFutureKeys", { "fg": s:aqua })
  190. call s:h("jsBuiltins", { "fg": s:aqua })
  191. call s:h("jsArgsObj", { "fg": s:aqua })
  192. call s:h("jsStatic", { "fg": s:aqua })
  193. call s:h("jsSuper", { "fg": s:aqua })
  194. call s:h("jsFuncArgRest", { "fg": s:purple, "format": "italic" })
  195. call s:h("jsFuncArgs", { "fg": s:orange, "format": "italic" })
  196. call s:h("jsStorageClass", { "fg": s:aqua })
  197. call s:h("jsDocTags", { "fg": s:aqua, "format": "italic" })
  198. " Html
  199. call s:h("htmlTag", { "fg": s:white })
  200. call s:h("htmlEndTag", { "fg": s:white })
  201. call s:h("htmlTagName", { "fg": s:pink })
  202. call s:h("htmlArg", { "fg": s:green })
  203. call s:h("htmlSpecialChar", { "fg": s:purple })
  204. " Xml
  205. call s:h("xmlTag", { "fg": s:pink })
  206. call s:h("xmlEndTag", { "fg": s:pink })
  207. call s:h("xmlTagName", { "fg": s:orange })
  208. call s:h("xmlAttrib", { "fg": s:green })
  209. " CSS
  210. call s:h("cssProp", { "fg": s:yellow })
  211. call s:h("cssUIAttr", { "fg": s:yellow })
  212. call s:h("cssFunctionName", { "fg": s:aqua })
  213. call s:h("cssColor", { "fg": s:purple })
  214. call s:h("cssPseudoClassId", { "fg": s:purple })
  215. call s:h("cssClassName", { "fg": s:green })
  216. call s:h("cssValueLength", { "fg": s:purple })
  217. call s:h("cssCommonAttr", { "fg": s:pink })
  218. call s:h("cssBraces" , { "fg": s:white })
  219. call s:h("cssClassNameDot", { "fg": s:pink })
  220. call s:h("cssURL", { "fg": s:orange, "format": "underline,italic" })
  221. " LESS
  222. call s:h("lessVariable", { "fg": s:green })
  223. " ruby
  224. call s:h("rubyInterpolationDelimiter", {})
  225. call s:h("rubyInstanceVariable", {})
  226. call s:h("rubyGlobalVariable", {})
  227. call s:h("rubyClassVariable", {})
  228. call s:h("rubyPseudoVariable", {})
  229. call s:h("rubyFunction", { "fg": s:green })
  230. call s:h("rubyStringDelimiter", { "fg": s:yellow })
  231. call s:h("rubyRegexp", { "fg": s:yellow })
  232. call s:h("rubyRegexpDelimiter", { "fg": s:yellow })
  233. call s:h("rubySymbol", { "fg": s:purple })
  234. call s:h("rubyEscape", { "fg": s:purple })
  235. call s:h("rubyInclude", { "fg": s:pink })
  236. call s:h("rubyOperator", { "fg": s:pink })
  237. call s:h("rubyControl", { "fg": s:pink })
  238. call s:h("rubyClass", { "fg": s:pink })
  239. call s:h("rubyDefine", { "fg": s:pink })
  240. call s:h("rubyException", { "fg": s:pink })
  241. call s:h("rubyRailsARAssociationMethod",{ "fg": s:orange })
  242. call s:h("rubyRailsARMethod", { "fg": s:orange })
  243. call s:h("rubyRailsRenderMethod", { "fg": s:orange })
  244. call s:h("rubyRailsMethod", { "fg": s:orange })
  245. call s:h("rubyConstant", { "fg": s:aqua })
  246. call s:h("rubyBlockArgument", { "fg": s:orange })
  247. call s:h("rubyBlockParameter", { "fg": s:orange })
  248. " eruby
  249. call s:h("erubyDelimiter", {})
  250. call s:h("erubyRailsMethod", { "fg": s:aqua })
  251. " c
  252. call s:h("cLabel", { "fg": s:pink })
  253. call s:h("cStructure", { "fg": s:pink })
  254. call s:h("cStorageClass", { "fg": s:pink })
  255. call s:h("cInclude", { "fg": s:green })
  256. call s:h("cDefine", { "fg": s:green })