From 832a5860a0ab4bc2bf2c380aa969df81e87054fc Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Sat, 15 Feb 2025 17:52:52 -0500 Subject: [PATCH 1/7] Add vim config (not neovim) --- homes/ngogober/home.nix | 6 + homes/ngogober/vim/.vimrc | 151 ++++++++++ homes/ngogober/vim/colors/dark-meadow.vim | 156 ++++++++++ homes/ngogober/vim/colors/dracula.vim | 351 ++++++++++++++++++++++ homes/ngogober/vim/common.vim | 48 +++ homes/ngogober/vim/nvim_init.vim | 10 + homes/ngogober/vim/plugins.vim | 85 ++++++ 7 files changed, 807 insertions(+) create mode 100644 homes/ngogober/vim/.vimrc create mode 100644 homes/ngogober/vim/colors/dark-meadow.vim create mode 100644 homes/ngogober/vim/colors/dracula.vim create mode 100644 homes/ngogober/vim/common.vim create mode 100644 homes/ngogober/vim/nvim_init.vim create mode 100644 homes/ngogober/vim/plugins.vim diff --git a/homes/ngogober/home.nix b/homes/ngogober/home.nix index 37f5e66..fda53bf 100644 --- a/homes/ngogober/home.nix +++ b/homes/ngogober/home.nix @@ -16,5 +16,11 @@ zsh-powerlevel10k meslo-lgs-nf ]; + + file = { + ".vimrc".source = ./vim/.vimrc; + ".vim/plugins.vim".source = ./vim/plugins.vim; + ".vim/common.vim".source = ./vim/common.vim; + }; }; } diff --git a/homes/ngogober/vim/.vimrc b/homes/ngogober/vim/.vimrc new file mode 100644 index 0000000..c91a881 --- /dev/null +++ b/homes/ngogober/vim/.vimrc @@ -0,0 +1,151 @@ +source ~/.vim/common.vim + +" ':set' vs 'set' +" https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading + +" `zo` to open a single fold under the cursor +" `zc` to close the fold under the cursor +" `zR` to open all folds +" `zM` to close all folds +" `:help folding` for more info + +" General Settings -------------------------------------------------------- {{{ + +" mouse mode on +set mouse=a + +" Disable compatibility with vi which can cause unexpected issues. +set nocompatible + +" Enable type file detection. Vim will be able to try to detect the type of file in use. +filetype on + +" Enable plugins and load plugin for the detected file type. +filetype plugin on + +" Load an indent file for the detected file type. +filetype indent on +" automatically indent on new line to match above line indent +set autoindent + +" tab settings +" tab size 2, fine tune to 2, normal mode tab insert at 2, use spaces +set tabstop=2 softtabstop=2 shiftwidth=2 expandtab + +" Do not wrap lines. Allow long lines to extend as far as the line goes. +set nowrap + +" Turn on hybrid line numbering +" https://jeffkreeftmeijer.com/vim-number/ +set number relativenumber +" +" hybrid numbers in Normal mode only +" define an autonumber group named 'numbertoggle' +augroup numbertoggle + " clear existing autocommands in group + autocmd! + " enable relative numbers in Normal mode + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + " disable relative numbers in insert mode & when losing focus (e.g. + " switching windows) + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber +augroup END + +" fix backspace not working problem +set backspace=2 + +" yank to clipboard +if has('clipboard') + set clipboard=unnamed " copy to the system clipboard +endif + +" }}} + + +" Visual Settings -------------------------------------------------------- {{{ + +" Set a colorscheme $VIMRUNTIME/colors for color schemes shipped with vim +" ~/vim/colors for any of your own +if has('nvim') + colorscheme vim +endif +"colorscheme elflord +"colorscheme dark-meadow +"colorscheme default +" needed for default vim colorscheme +set notermguicolors +" +" turn syntax highlighting on. +syntax on +" +" visual mode highlight color +" run "hi" command for all color groups +hi Visual ctermfg=238 ctermbg=117 +" +" highlight 81st column +set colorcolumn=81 +" +" set appropriate color for column highlight +highlight ColorColumn ctermbg=0 +" +" set highlight color +hi Search ctermfg=238 ctermbg=117 + +" }}} + + +" MAPPINGS --------------------------------------------------------------- {{{ + +" Source the vimrc file after saving it +" shortcut to show vimrc file in new tab +nmap v :tabedit $MYVIMRC + +" copy paste to clipboard +" copy from visual mode +vmap "*y +" paste when in insert mode +imap "*p + +" show tabs, spaces and trailing spaces +" hellowo r l d +" +"map ]t :set list:set listchars=space:.,tab:▸·,trail:· +map ]t :set list:set listchars=space:.,trail:+,tab:>- +" +" unshow tabs and trailing spaces +map [t :set nolist + + +" }}} + + +" VIMSCRIPT -------------------------------------------------------------- {{{ + +" This will enable code folding. +" Use the marker method of folding. +augroup filetype_vim + autocmd! + autocmd FileType vim setlocal foldmethod=marker +augroup END + +" }}} + + +" MISC ------------------------------------------------------------------- {{{ + +" Misc stuff. + +" set syntax for various custom filetypes +" https://stackoverflow.com/questions/11666170/persistent-set-syntax-for-a-given-filetype +" when opening a file in vim, can do :setlocal syntax? to see what filetype it +" detected + +au BufRead,BufNewFile *.zshrc.managed set filetype=zsh +au BufRead,BufNewFile *.bashrc.managed set filetype=bash +au BufRead,BufNewFile *.inputrc.managed set filetype=readline +au BufRead,BufNewFile *.vimrc.managed set filetype=vim +au BufRead,BufNewFile *init.vim.managed set filetype=vim + +" }}} + +source ~/.vim/plugins.vim diff --git a/homes/ngogober/vim/colors/dark-meadow.vim b/homes/ngogober/vim/colors/dark-meadow.vim new file mode 100644 index 0000000..c521078 --- /dev/null +++ b/homes/ngogober/vim/colors/dark-meadow.vim @@ -0,0 +1,156 @@ +" Name: dark-meadow +" Author: jliu2179 +" Maintainer: jliu2179 +" License: MIT + +highlight clear + +if exists('syntax_on') + syntax reset +endif + +let g:colors_name = 'dark-meadow' +set background=dark + +" Color palette +let s:clear = ['NONE', 'NONE' ] +let s:DeepSkyBlue3 = ['31' , '#0087af'] +let s:Purple4 = ['55' , '#5f00af'] +let s:Purple3 = ['56' , '#5f00ff'] +let s:SteelBlue1 = ['81' , '#5fd7ff'] +let s:DarkMagenta = ['90' , '#870087'] +let s:SkyBlue1 = ['117' , '#87afff'] +let s:DarkViolet = ['128' , '#af00d7'] +let s:Magenta2 = ['165' , '#d700ff'] +let s:Red1 = ['196' , '#ff0000'] +let s:Magenta1 = ['201' , '#ff00ff'] +let s:HotPink = ['206' , '#ff5fd7'] +let s:MediumOrchid1 = ['207' , '#ff5faf'] +let s:Yellow1 = ['226' , '#ffff00'] +let s:MistyRose1 = ['224' , '#ffd7ff'] +let s:Grey7 = ['233' , '#121212'] +let s:Grey42 = ['242' , '#6c6c6c'] +let s:Grey54 = ['245' , '#8a8a8a'] +let s:Grey66 = ['248' , '#a8a8a8'] + + +" Text style +let s:italic = 'italic' +let s:bold = 'bold' +let s:underline = 'underline' +let s:none = 'NONE' + +" Helper function to set up highlight executions +function! s:highlight(group, fg, bg, style) + exec "highlight " . a:group + \ . " ctermfg=" . a:fg[0] + \ . " ctermbg=" . a:bg[0] + \ . " cterm=" . a:style + \ . " guifg=" . a:fg[1] + \ . " guibg=" . a:bg[1] + \ . " gui=" . a:style +endfunction + +" Syntax highlighting groups +" +" For reference on what each group does, please refer to this: +" vimdoc.sourceforge.net/htmldoc/syntax.html +" +call s:highlight('Comment', s:DeepSkyBlue3, s:clear, s:italic ) +call s:highlight('Constant', s:DarkViolet, s:clear, s:none ) +call s:highlight('String', s:DarkMagenta, s:clear, s:none ) +call s:highlight('Character', s:MediumOrchid1, s:clear, s:none ) +call s:highlight('Number', s:SteelBlue1, s:clear, s:none ) +call s:highlight('Boolean', s:Yellow1, s:clear, s:none ) +call s:highlight('Float', s:SteelBlue1, s:clear, s:none ) +call s:highlight('Identifier', s:MistyRose1, s:clear, s:none ) +call s:highlight('Function', s:Purple4, s:clear, s:none ) +call s:highlight('Statement', s:MediumOrchid1, s:clear, s:bold ) +call s:highlight('Conditional', s:SkyBlue1, s:clear, s:bold ) +call s:highlight('Repeat', s:Magenta1, s:clear, s:bold ) +call s:highlight('Label', s:SkyBlue1, s:clear, s:bold ) +call s:highlight('Operator', s:Purple3, s:clear, s:none ) +call s:highlight('Keyword', s:Purple3, s:clear, s:none ) +call s:highlight('Exception', s:Magenta1, s:clear, s:italic ) +call s:highlight('PreProc', s:Grey54, s:clear, s:italic ) +call s:highlight('Include', s:Purple4, s:clear, s:italic ) +call s:highlight('Define', s:Magenta2, s:clear, s:italic ) +call s:highlight('Macro', s:HotPink, s:clear, s:italic ) +call s:highlight('PreCondit', s:Purple4, s:clear, s:italic ) +call s:highlight('Type', s:MediumOrchid1, s:clear, s:bold ) +call s:highlight('StorageClass', s:Purple3, s:clear, s:bold ) +call s:highlight('Structure', s:Purple3, s:clear, s:bold ) +call s:highlight('Typedef', s:Purple3, s:clear, s:bold ) +call s:highlight('Special', s:Grey66, s:clear, s:none ) +call s:highlight('SpecialChar', s:MediumOrchid1, s:clear, s:none ) +call s:highlight('Delimiter', s:DeepSkyBlue3, s:clear, s:none ) +call s:highlight('SpecialComment', s:Grey54, s:clear, s:none ) +call s:highlight('Debug', s:Red1, s:clear, s:none ) +call s:highlight('Underlined', s:Grey54, s:clear, s:underline ) +call s:highlight('Error', s:Red1, s:clear, s:underline ) +call s:highlight('Todo', s:Yellow1, s:clear, s:none ) +" Nodar changes +call s:highlight('ColorColumn', s:clear, s:DeepSkyBlue3, s:none ) + + +" Interface highlighting +call s:highlight('Normal', s:clear, s:Grey7, s:none ) +call s:highlight('Visual', s:clear, s:Grey42, s:none ) +call s:highlight('Cursor', s:Grey66, s:clear, s:none ) +call s:highlight('LineNr', s:MistyRose1, s:clear, s:none ) +call s:highlight('CursorLineNr', s:DarkMagenta, s:clear, s:italic ) + + +" Java syntax highlighting +call s:highlight('javaParen', s:DarkMagenta, s:clear, s:none ) +call s:highlight('javaCommentTitle', s:DeepSkyBlue3, s:clear, s:none ) +call s:highlight('javaDocParam', s:DeepSkyBlue3, s:clear, s:none ) +call s:highlight('javaDocTags', s:DeepSkyBlue3, s:clear, s:none ) +call s:highlight('javaScopeDecl', s:Grey66, s:clear, s:none ) +call s:highlight('javaStorageClass', s:MediumOrchid1, s:clear, s:none ) + + +" Python syntax highlighting +call s:highlight('pythonFunction', s:Grey66, s:clear, s:none ) +call s:highlight('pythonBuiltin', s:Grey66, s:clear, s:italic ) + + +" Vimscript syntax highlighting +call s:highlight('vimOption', s:DarkViolet, s:clear, s:none ) + + +" *NOTE* +" +" The following groups are plug specific and would require the following plugs +" from github in order for the groups to work. +" + +" Elm syntax highlighting +" Requires plug: ElmCast/Magenta2-vim +" +call s:highlight('elmTypeDef', s:MediumOrchid1, s:clear, s:bold ) +call s:highlight('elmAlias', s:Grey66, s:clear, s:none ) +call s:highlight('elmTopLevelDecl', s:SkyBlue1, s:clear, s:bold ) +call s:highlight('elmBraces', s:DarkMagenta, s:clear, s:none ) + + +" Elixir syntax highlighting +" Requires plug: elixir-editors/vim-elixir +" +call s:highlight('elixirAlias', s:Magenta2, s:clear, s:italic ) +call s:highlight('elixirDefine', s:MediumOrchid1, s:clear, s:none ) +call s:highlight('elixirBlockDefinition', s:MediumOrchid1, s:clear, s:none ) +call s:highlight('elixirFunctionDeclaration', s:Grey66, s:clear, s:none ) + + +" GOLang syntax highlighting +" Requires plug: fatih/vim-go +" +call s:highlight('goPackage', s:Magenta2, s:clear, s:italic ) +call s:highlight('goImport', s:Purple4, s:clear, s:italic ) + + +" Rust syntax highlighting +" Requires plug: rust-lang/rust.vim +" +call s:highlight('rustMacro', s:MediumOrchid1, s:clear, s:none ) diff --git a/homes/ngogober/vim/colors/dracula.vim b/homes/ngogober/vim/colors/dracula.vim new file mode 100644 index 0000000..82e3cb2 --- /dev/null +++ b/homes/ngogober/vim/colors/dracula.vim @@ -0,0 +1,351 @@ +" Dracula Theme: {{{ +" +" https://github.com/zenorocha/dracula-theme +" +" Copyright 2016, All rights reserved +" +" Code licensed under the MIT license +" http://zenorocha.mit-license.org +" +" @author Trevor Heins <@heinst> +" @author Éverton Ribeiro +" @author Derek Sifford +" @author Zeno Rocha +scriptencoding utf8 +" }}} + +" Configuration: {{{ + +if v:version > 580 + highlight clear + if exists('syntax_on') + syntax reset + endif +endif + +let g:colors_name = 'dracula' + +if !(has('termguicolors') && &termguicolors) && !has('gui_running') && &t_Co != 256 + finish +endif + +" Palette: {{{2 + +let s:fg = ['#F8F8F2', 255] + +let s:bglighter = ['#424450', 238] +let s:bglight = ['#343746', 237] +let s:bg = ['#282A36', 236] +let s:bgdark = ['#21222C', 235] +let s:bgdarker = ['#191A21', 234] + +let s:subtle = ['#424450', 238] + +let s:selection = ['#44475A', 239] +let s:comment = ['#6272A4', 61] +let s:cyan = ['#8BE9FD', 117] +let s:green = ['#50FA7B', 84] +let s:orange = ['#FFB86C', 215] +let s:pink = ['#FF79C6', 212] +let s:purple = ['#BD93F9', 141] +let s:red = ['#FF5555', 203] +let s:yellow = ['#F1FA8C', 228] + +let s:none = ['NONE', 'NONE'] + +let g:dracula_palette = { + \ 'fg': s:fg, + \ 'bg': s:bg, + \ 'selection': s:selection, + \ 'comment': s:comment, + \ 'cyan': s:cyan, + \ 'green': s:green, + \ 'orange': s:orange, + \ 'pink': s:pink, + \ 'purple': s:purple, + \ 'red': s:red, + \ 'yellow': s:yellow, + \ + \ 'bglighter': s:bglighter, + \ 'bglight': s:bglight, + \ 'bgdark': s:bgdark, + \ 'bgdarker': s:bgdarker, + \ 'subtle': s:subtle, + \} + +if has('nvim') + let g:terminal_color_0 = '#21222C' + let g:terminal_color_1 = '#FF5555' + let g:terminal_color_2 = '#50FA7B' + let g:terminal_color_3 = '#F1FA8C' + let g:terminal_color_4 = '#BD93F9' + let g:terminal_color_5 = '#FF79C6' + let g:terminal_color_6 = '#8BE9FD' + let g:terminal_color_7 = '#F8F8F2' + let g:terminal_color_8 = '#6272A4' + let g:terminal_color_9 = '#FF6E6E' + let g:terminal_color_10 = '#69FF94' + let g:terminal_color_11 = '#FFFFA5' + let g:terminal_color_12 = '#D6ACFF' + let g:terminal_color_13 = '#FF92DF' + let g:terminal_color_14 = '#A4FFFF' + let g:terminal_color_15 = '#FFFFFF' +endif + +if has('terminal') + let g:terminal_ansi_colors = [ + \ '#21222C', '#FF5555', '#50FA7B', '#F1FA8C', + \ '#BD93F9', '#FF79C6', '#8BE9FD', '#F8F8F2', + \ '#6272A4', '#FF6E6E', '#69FF94', '#FFFFA5', + \ '#D6ACFF', '#FF92DF', '#A4FFFF', '#FFFFFF' + \] +endif + +" }}}2 +" User Configuration: {{{2 + +if !exists('g:dracula_bold') + let g:dracula_bold = 1 +endif + +if !exists('g:dracula_italic') + let g:dracula_italic = 1 +endif + +if !exists('g:dracula_underline') + let g:dracula_underline = 1 +endif + +if !exists('g:dracula_undercurl') && g:dracula_underline != 0 + let g:dracula_undercurl = 1 +endif + +if !exists('g:dracula_inverse') + let g:dracula_inverse = 1 +endif + +if !exists('g:dracula_colorterm') + let g:dracula_colorterm = 1 +endif + +"}}}2 +" Script Helpers: {{{2 + +let s:attrs = { + \ 'bold': g:dracula_bold == 1 ? 'bold' : 0, + \ 'italic': g:dracula_italic == 1 ? 'italic' : 0, + \ 'underline': g:dracula_underline == 1 ? 'underline' : 0, + \ 'undercurl': g:dracula_undercurl == 1 ? 'undercurl' : 0, + \ 'inverse': g:dracula_inverse == 1 ? 'inverse' : 0, + \} + +function! s:h(scope, fg, ...) " bg, attr_list, special + let l:fg = copy(a:fg) + let l:bg = get(a:, 1, ['NONE', 'NONE']) + + let l:attr_list = filter(get(a:, 2, ['NONE']), 'type(v:val) == 1') + let l:attrs = len(l:attr_list) > 0 ? join(l:attr_list, ',') : 'NONE' + + " Falls back to coloring foreground group on terminals because + " nearly all do not support undercurl + let l:special = get(a:, 3, ['NONE', 'NONE']) + if l:special[0] !=# 'NONE' && l:fg[0] ==# 'NONE' && !has('gui_running') + let l:fg[0] = l:special[0] + let l:fg[1] = l:special[1] + endif + + let l:hl_string = [ + \ 'highlight', a:scope, + \ 'guifg=' . l:fg[0], 'ctermfg=' . l:fg[1], + \ 'guibg=' . l:bg[0], 'ctermbg=' . l:bg[1], + \ 'gui=' . l:attrs, 'cterm=' . l:attrs, + \ 'guisp=' . l:special[0], + \] + + execute join(l:hl_string, ' ') +endfunction + +function! s:Background() + if g:dracula_colorterm || has('gui_running') + return s:bg + else + return s:none + endif +endfunction + +"}}}2 +" Dracula Highlight Groups: {{{2 + +call s:h('DraculaBgLight', s:none, s:bglight) +call s:h('DraculaBgLighter', s:none, s:bglighter) +call s:h('DraculaBgDark', s:none, s:bgdark) +call s:h('DraculaBgDarker', s:none, s:bgdarker) + +call s:h('DraculaFg', s:fg) +call s:h('DraculaFgUnderline', s:fg, s:none, [s:attrs.underline]) +call s:h('DraculaFgBold', s:fg, s:none, [s:attrs.bold]) + +call s:h('DraculaComment', s:comment) +call s:h('DraculaCommentBold', s:comment, s:none, [s:attrs.bold]) + +call s:h('DraculaSelection', s:none, s:selection) + +call s:h('DraculaSubtle', s:subtle) + +call s:h('DraculaCyan', s:cyan) +call s:h('DraculaCyanItalic', s:cyan, s:none, [s:attrs.italic]) + +call s:h('DraculaGreen', s:green) +call s:h('DraculaGreenBold', s:green, s:none, [s:attrs.bold]) +call s:h('DraculaGreenItalic', s:green, s:none, [s:attrs.italic]) +call s:h('DraculaGreenItalicUnderline', s:green, s:none, [s:attrs.italic, s:attrs.underline]) + +call s:h('DraculaOrange', s:orange) +call s:h('DraculaOrangeBold', s:orange, s:none, [s:attrs.bold]) +call s:h('DraculaOrangeItalic', s:orange, s:none, [s:attrs.italic]) +call s:h('DraculaOrangeBoldItalic', s:orange, s:none, [s:attrs.bold, s:attrs.italic]) +call s:h('DraculaOrangeInverse', s:bg, s:orange) + +call s:h('DraculaPink', s:pink) +call s:h('DraculaPinkItalic', s:pink, s:none, [s:attrs.italic]) + +call s:h('DraculaPurple', s:purple) +call s:h('DraculaPurpleBold', s:purple, s:none, [s:attrs.bold]) +call s:h('DraculaPurpleItalic', s:purple, s:none, [s:attrs.italic]) + +call s:h('DraculaRed', s:red) +call s:h('DraculaRedInverse', s:fg, s:red) + +call s:h('DraculaYellow', s:yellow) +call s:h('DraculaYellowItalic', s:yellow, s:none, [s:attrs.italic]) + +call s:h('DraculaError', s:red, s:none, [], s:red) + +call s:h('DraculaErrorLine', s:none, s:none, [s:attrs.undercurl], s:red) +call s:h('DraculaWarnLine', s:none, s:none, [s:attrs.undercurl], s:orange) +call s:h('DraculaInfoLine', s:none, s:none, [s:attrs.undercurl], s:cyan) + +call s:h('DraculaTodo', s:cyan, s:none, [s:attrs.bold, s:attrs.inverse]) +call s:h('DraculaSearch', s:green, s:none, [s:attrs.inverse]) +call s:h('DraculaBoundary', s:comment, s:bgdark) +call s:h('DraculaLink', s:cyan, s:none, [s:attrs.underline]) + +call s:h('DraculaDiffChange', s:orange, s:none) +call s:h('DraculaDiffText', s:bg, s:orange) +call s:h('DraculaDiffDelete', s:red, s:bgdark) + +" }}}2 + +" }}} +" User Interface: {{{ + +set background=dark + +" Required as some plugins will overwrite +call s:h('Normal', s:fg, s:Background()) +call s:h('StatusLine', s:none, s:bglighter, [s:attrs.bold]) +call s:h('StatusLineNC', s:none, s:bglight) +call s:h('StatusLineTerm', s:none, s:bglighter, [s:attrs.bold]) +call s:h('StatusLineTermNC', s:none, s:bglight) +call s:h('WildMenu', s:bg, s:purple, [s:attrs.bold]) +call s:h('CursorLine', s:none, s:subtle) + +hi! link ColorColumn DraculaBgDark +hi! link CursorColumn DraculaBgDark +hi! link CursorLineNr DraculaYellow +hi! link DiffAdd DraculaGreen +hi! link DiffAdded DiffAdd +hi! link DiffChange DraculaDiffChange +hi! link DiffDelete DraculaDiffDelete +hi! link DiffRemoved DiffDelete +hi! link DiffText DraculaDiffText +hi! link Directory DraculaPurpleBold +hi! link ErrorMsg DraculaRedInverse +hi! link FoldColumn DraculaSubtle +hi! link Folded DraculaBoundary +hi! link IncSearch DraculaOrangeInverse +hi! link LineNr DraculaComment +hi! link MoreMsg DraculaFgBold +hi! link NonText DraculaSubtle +hi! link Pmenu DraculaBgDark +hi! link PmenuSbar DraculaBgDark +hi! link PmenuSel DraculaSelection +hi! link PmenuThumb DraculaSelection +hi! link Question DraculaFgBold +hi! link Search DraculaSearch +hi! link SignColumn DraculaComment +hi! link TabLine DraculaBoundary +hi! link TabLineFill DraculaBgDarker +hi! link TabLineSel Normal +hi! link Title DraculaGreenBold +hi! link VertSplit DraculaBoundary +hi! link Visual DraculaSelection +hi! link VisualNOS Visual +hi! link WarningMsg DraculaOrangeInverse + +" }}} +" Syntax: {{{ + +" Required as some plugins will overwrite +call s:h('MatchParen', s:green, s:none, [s:attrs.underline]) +call s:h('Conceal', s:comment, s:bglight) + +" Neovim uses SpecialKey for escape characters only. Vim uses it for that, plus whitespace. +if has('nvim') + hi! link SpecialKey DraculaRed +else + hi! link SpecialKey DraculaSubtle +endif + +hi! link Comment DraculaComment +hi! link Underlined DraculaFgUnderline +hi! link Todo DraculaTodo + +hi! link Error DraculaError +hi! link SpellBad DraculaErrorLine +hi! link SpellLocal DraculaWarnLine +hi! link SpellCap DraculaInfoLine +hi! link SpellRare DraculaInfoLine + +hi! link Constant DraculaPurple +hi! link String DraculaYellow +hi! link Character DraculaPink +hi! link Number Constant +hi! link Boolean Constant +hi! link Float Constant + +hi! link Identifier DraculaFg +hi! link Function DraculaGreen + +hi! link Statement DraculaPink +hi! link Conditional DraculaPink +hi! link Repeat DraculaPink +hi! link Label DraculaPink +hi! link Operator DraculaPink +hi! link Keyword DraculaPink +hi! link Exception DraculaPink + +hi! link PreProc DraculaPink +hi! link Include DraculaPink +hi! link Define DraculaPink +hi! link Macro DraculaPink +hi! link PreCondit DraculaPink +hi! link StorageClass DraculaPink +hi! link Structure DraculaPink +hi! link Typedef DraculaPink + +hi! link Type DraculaCyanItalic + +hi! link Delimiter DraculaFg + +hi! link Special DraculaPink +hi! link SpecialComment DraculaCyanItalic +hi! link Tag DraculaCyan +hi! link helpHyperTextJump DraculaLink +hi! link helpCommand DraculaPurple +hi! link helpExample DraculaGreen +hi! link helpBacktick Special + +"}}} + +" vim: fdm=marker ts=2 sts=2 sw=2: diff --git a/homes/ngogober/vim/common.vim b/homes/ngogober/vim/common.vim new file mode 100644 index 0000000..21643e2 --- /dev/null +++ b/homes/ngogober/vim/common.vim @@ -0,0 +1,48 @@ +" common to vim (.vimrc) neovim (.config/nvim/init.vim), and VS Code's use of +" neovim + +" ':set' vs 'set' +" https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading + +" `zo` to open a single fold under the cursor +" `zc` to close the fold under the cursor +" `zR` to open all folds +" `zM` to close all folds +" `:help folding` for more info + +" Visual Settings -------------------------------------------------------- {{{ + +" turn off highlight of search terms by default +set nohls + +" }}} + + +" MAPPINGS --------------------------------------------------------------- {{{ + +" Mappings code goes here. + +map o o^DA +map O O^DA +map u o^Do.k0Dj$xA +map U O^DO.j0Dk$xA +" +" toggle on/off highlight of search terms +map \ :set hls! + +" change tab settings +map t :set expandtab!:set expandtab? +" +" increase tab size by 2 spaces +map ]T :set softtabstop+=2 tabstop+=2 shiftwidth+=2 +" +" decrease tab size by 2 spaces +map [T :set softtabstop-=2 tabstop-=2 shiftwidth-=2 + +" }}} + + +" VIMSCRIPT -------------------------------------------------------------- {{{ + +" }}} + diff --git a/homes/ngogober/vim/nvim_init.vim b/homes/ngogober/vim/nvim_init.vim new file mode 100644 index 0000000..281196a --- /dev/null +++ b/homes/ngogober/vim/nvim_init.vim @@ -0,0 +1,10 @@ +if exists('g:vscode') + source ~/superhome/config/vim/common.vimrc +else + " ordinary Neovim stuff + + set runtimepath^=~/.vim runtimepath+=~/.vim/after + let &packpath = &runtimepath + source ~/superhome/config/vim/.vimrc.managed +end + diff --git a/homes/ngogober/vim/plugins.vim b/homes/ngogober/vim/plugins.vim new file mode 100644 index 0000000..3142dbf --- /dev/null +++ b/homes/ngogober/vim/plugins.vim @@ -0,0 +1,85 @@ +" plugin installation, management, and configuration + +" `zo` to open a single fold under the cursor +" `zc` to close the fold under the cursor +" `zR` to open all folds +" `zM` to close all folds +" `:help folding` for more info + +" vim-plug setup ---------------------------------------------------------- {{{ + +" https://github.com/junegunn/vim-plug + +" download vim-plug if missing +" https://github.com/junegunn/vim-plug/wiki/tips#automatic-installation +let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' +if empty(glob(data_dir . '/autoload/plug.vim')) + silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' +endif + +" run PlugInstall if there are missing plugins +autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) + \| PlugInstall --sync | source $MYVIMRC +\| endif + +" declare plugins +silent! if plug#begin() + + " manually install with :PlugInstall + " (but automation above should handle it) + " update with :PlugUPdate + " clean unused with :PlugClean + + "Plug '/' + Plug 'preservim/nerdtree' + Plug 'itchyny/lightline.vim' + "Plug 'ctrlpvim/ctrlp.vim' + "Plug 'junegunn/vim-easy-align' + "Plug 'tpope/vim-commentary' + "Plug 'tpope/vim-eunuch' + "Plug 'tpope/vim-fugitive' + "Plug 'tpope/vim-repeat' + "Plug 'tpope/vim-surround' + "Plug 'tpope/vim-unimpaired' + + " do :echo v:version to see your version + " vim and nvim will be different + " + " ignore these on older versions of vim + "if v:version >= 703 + "Plug '/' + "endif + + call plug#end() +endif + +" }}} + +" NERDTree ---------------------------------------------------------------- {{{ + +" https://github.com/preservim/nerdtree + +" quick toggle NERDTree +map n :NERDTreeToggle +" show hidden files by default +let NERDTreeShowHidden=1 + +" }}} + +" light line -------------------------------------------------------------- {{{ + +" https://github.com/itchyny/lightline.vim + +" fixes status line not showing up +set laststatus=2 + +" -- insert -- not needed anymore since it's in the satus line +set noshowmode + +" colorscheme +let g:lightline = { + \ 'colorscheme': 'wombat', + \ } + +" }}} + From 904cadbc9cc74d293aeeb1ce27f0027656d10fed Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Sat, 15 Feb 2025 19:48:38 -0500 Subject: [PATCH 2/7] Set incsearch and showmatch --- homes/ngogober/vim/.vimrc | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/homes/ngogober/vim/.vimrc b/homes/ngogober/vim/.vimrc index c91a881..7a4a6b5 100644 --- a/homes/ngogober/vim/.vimrc +++ b/homes/ngogober/vim/.vimrc @@ -74,20 +74,26 @@ endif "colorscheme default " needed for default vim colorscheme set notermguicolors -" + +" when search hight pattern match +set incsearch + +" when inserting bracket, briefly jump to matching one +set showmatch + " turn syntax highlighting on. syntax on -" + " visual mode highlight color " run "hi" command for all color groups hi Visual ctermfg=238 ctermbg=117 -" + " highlight 81st column set colorcolumn=81 -" + " set appropriate color for column highlight highlight ColorColumn ctermbg=0 -" + " set highlight color hi Search ctermfg=238 ctermbg=117 From fb6a0a2181939a98ed1df1147ec4bd028b5966d8 Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Sat, 15 Feb 2025 20:06:18 -0500 Subject: [PATCH 3/7] Remove nvim_init --- homes/ngogober/vim/nvim_init.vim | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 homes/ngogober/vim/nvim_init.vim diff --git a/homes/ngogober/vim/nvim_init.vim b/homes/ngogober/vim/nvim_init.vim deleted file mode 100644 index 281196a..0000000 --- a/homes/ngogober/vim/nvim_init.vim +++ /dev/null @@ -1,10 +0,0 @@ -if exists('g:vscode') - source ~/superhome/config/vim/common.vimrc -else - " ordinary Neovim stuff - - set runtimepath^=~/.vim runtimepath+=~/.vim/after - let &packpath = &runtimepath - source ~/superhome/config/vim/.vimrc.managed -end - From a570754879359cf86ba1350090942f5f63946502 Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Sun, 16 Feb 2025 11:48:25 -0500 Subject: [PATCH 4/7] Enable basic oh-my-zsh --- homes/ngogober/zsh.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/homes/ngogober/zsh.nix b/homes/ngogober/zsh.nix index c2b51e9..7eff2d6 100644 --- a/homes/ngogober/zsh.nix +++ b/homes/ngogober/zsh.nix @@ -44,7 +44,13 @@ ttt = "eza --tree --all --classify=auto --icons=auto --level=3"; tttt = "eza --tree --all --classify=auto --icons=auto --level=4"; }; - oh-my-zsh.enable = lib.mkForce false; + # enable only to get tab completion file picker and highlighting + # everything else dont' want or handled directly by programs.zsh.plugins + oh-my-zsh = lib.mkForce { + enable = true; + theme = ""; + plugins = []; + }; }; programs.fzf = { enable = true; From 311f8f2ed25711d311493a2df69d1d90d60e55a9 Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Fri, 28 Mar 2025 13:34:42 -0400 Subject: [PATCH 5/7] Reconfigure vim --- homes/ngogober/vim/.vimrc | 146 +-- homes/ngogober/vim/base.vim | 61 ++ homes/ngogober/vim/colors/solarized.vim | 1118 +++++++++++++++++++++++ homes/ngogober/vim/common.vim | 174 +++- homes/ngogober/vim/nvim_init.vim | 12 + homes/ngogober/vim/plugins.vim | 85 -- homes/ngogober/vim/vim_plugins.vim | 207 +++++ 7 files changed, 1556 insertions(+), 247 deletions(-) create mode 100644 homes/ngogober/vim/base.vim create mode 100644 homes/ngogober/vim/colors/solarized.vim create mode 100644 homes/ngogober/vim/nvim_init.vim delete mode 100644 homes/ngogober/vim/plugins.vim create mode 100644 homes/ngogober/vim/vim_plugins.vim diff --git a/homes/ngogober/vim/.vimrc b/homes/ngogober/vim/.vimrc index 7a4a6b5..e3f1a36 100644 --- a/homes/ngogober/vim/.vimrc +++ b/homes/ngogober/vim/.vimrc @@ -1,4 +1,5 @@ -source ~/.vim/common.vim +" do `source ~/superhome/config/vim/.vimrc` in ~/.vimrc +source ~/superhome/config/vim/common.vim " ':set' vs 'set' " https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading @@ -9,149 +10,10 @@ source ~/.vim/common.vim " `zM` to close all folds " `:help folding` for more info -" General Settings -------------------------------------------------------- {{{ -" mouse mode on -set mouse=a +" Vim-specific Settings -------------------------------------------------------- {{{ -" Disable compatibility with vi which can cause unexpected issues. -set nocompatible - -" Enable type file detection. Vim will be able to try to detect the type of file in use. -filetype on - -" Enable plugins and load plugin for the detected file type. -filetype plugin on - -" Load an indent file for the detected file type. -filetype indent on -" automatically indent on new line to match above line indent -set autoindent - -" tab settings -" tab size 2, fine tune to 2, normal mode tab insert at 2, use spaces -set tabstop=2 softtabstop=2 shiftwidth=2 expandtab - -" Do not wrap lines. Allow long lines to extend as far as the line goes. -set nowrap - -" Turn on hybrid line numbering -" https://jeffkreeftmeijer.com/vim-number/ -set number relativenumber -" -" hybrid numbers in Normal mode only -" define an autonumber group named 'numbertoggle' -augroup numbertoggle - " clear existing autocommands in group - autocmd! - " enable relative numbers in Normal mode - autocmd BufEnter,FocusGained,InsertLeave * set relativenumber - " disable relative numbers in insert mode & when losing focus (e.g. - " switching windows) - autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber -augroup END - -" fix backspace not working problem -set backspace=2 - -" yank to clipboard -if has('clipboard') - set clipboard=unnamed " copy to the system clipboard -endif - -" }}} - - -" Visual Settings -------------------------------------------------------- {{{ - -" Set a colorscheme $VIMRUNTIME/colors for color schemes shipped with vim -" ~/vim/colors for any of your own -if has('nvim') - colorscheme vim -endif -"colorscheme elflord -"colorscheme dark-meadow -"colorscheme default -" needed for default vim colorscheme -set notermguicolors - -" when search hight pattern match -set incsearch - -" when inserting bracket, briefly jump to matching one -set showmatch - -" turn syntax highlighting on. -syntax on - -" visual mode highlight color -" run "hi" command for all color groups -hi Visual ctermfg=238 ctermbg=117 - -" highlight 81st column -set colorcolumn=81 - -" set appropriate color for column highlight -highlight ColorColumn ctermbg=0 - -" set highlight color -hi Search ctermfg=238 ctermbg=117 - -" }}} - - -" MAPPINGS --------------------------------------------------------------- {{{ - -" Source the vimrc file after saving it -" shortcut to show vimrc file in new tab -nmap v :tabedit $MYVIMRC - -" copy paste to clipboard -" copy from visual mode -vmap "*y -" paste when in insert mode -imap "*p - -" show tabs, spaces and trailing spaces -" hellowo r l d -" -"map ]t :set list:set listchars=space:.,tab:▸·,trail:· -map ]t :set list:set listchars=space:.,trail:+,tab:>- -" -" unshow tabs and trailing spaces -map [t :set nolist - - -" }}} - - -" VIMSCRIPT -------------------------------------------------------------- {{{ - -" This will enable code folding. -" Use the marker method of folding. -augroup filetype_vim - autocmd! - autocmd FileType vim setlocal foldmethod=marker -augroup END - -" }}} - - -" MISC ------------------------------------------------------------------- {{{ - -" Misc stuff. - -" set syntax for various custom filetypes -" https://stackoverflow.com/questions/11666170/persistent-set-syntax-for-a-given-filetype -" when opening a file in vim, can do :setlocal syntax? to see what filetype it -" detected - -au BufRead,BufNewFile *.zshrc.managed set filetype=zsh -au BufRead,BufNewFile *.bashrc.managed set filetype=bash -au BufRead,BufNewFile *.inputrc.managed set filetype=readline -au BufRead,BufNewFile *.vimrc.managed set filetype=vim -au BufRead,BufNewFile *init.vim.managed set filetype=vim +source ~/superhome/config/vim/vim_plugins.vim " }}} -source ~/.vim/plugins.vim diff --git a/homes/ngogober/vim/base.vim b/homes/ngogober/vim/base.vim new file mode 100644 index 0000000..2c45480 --- /dev/null +++ b/homes/ngogober/vim/base.vim @@ -0,0 +1,61 @@ +" common to vim (.vimrc) neovim (.config/nvim/init.vim), and VS Code's use of +" neovim + +" ':set' vs 'set' +" https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading + +" `zo` to open a single fold under the cursor +" `zc` to close the fold under the cursor +" `zR` to open all folds +" `zM` to close all folds +" `:help folding` for more info + +" General Settings -------------------------------------------------------- {{{ + +" yank to clipboard +if has('clipboard') + set clipboard=unnamed " copy to the system clipboard +endif + +" }}} + + +" Visual Settings -------------------------------------------------------- {{{ + +" turn off highlight of search terms by default +set nohls + +" }}} + + +" MAPPINGS --------------------------------------------------------------- {{{ + +" Mappings code goes here. + +let g:mapleader = " " +let g:maplocalleader = "," + +map \o o^DA +map \O O^DA +map \u o^Do.k0Dj$xA +map \U O^DO.j0Dk$xA +" +" toggle on/off highlight of search terms +map \\ :set hls! + +" change tab settings +map \t :set expandtab!:set expandtab? +" +" increase tab size by 2 spaces +map ]T :set softtabstop+=2 tabstop+=2 shiftwidth+=2 +" +" decrease tab size by 2 spaces +map [T :set softtabstop-=2 tabstop-=2 shiftwidth-=2 + +" }}} + + +" VIMSCRIPT -------------------------------------------------------------- {{{ + +" }}} + diff --git a/homes/ngogober/vim/colors/solarized.vim b/homes/ngogober/vim/colors/solarized.vim new file mode 100644 index 0000000..54a2e08 --- /dev/null +++ b/homes/ngogober/vim/colors/solarized.vim @@ -0,0 +1,1118 @@ +" Name: Solarized vim colorscheme +" Author: Ethan Schoonover +" URL: http://ethanschoonover.com/solarized +" (see this url for latest release & screenshots) +" License: OSI approved MIT license (see end of this file) +" Created: In the middle of the night +" Modified: 2011 May 05 +" +" Usage "{{{ +" +" --------------------------------------------------------------------- +" ABOUT: +" --------------------------------------------------------------------- +" Solarized is a carefully designed selective contrast colorscheme with dual +" light and dark modes that runs in both GUI, 256 and 16 color modes. +" +" See the homepage above for screenshots and details. +" +" --------------------------------------------------------------------- +" OPTIONS: +" --------------------------------------------------------------------- +" See the "solarized.txt" help file included with this colorscheme (in the +" "doc" subdirectory) for information on options, usage, the Toggle Background +" function and more. If you have already installed Solarized, this is available +" from the Solarized menu and command line as ":help solarized" +" +" --------------------------------------------------------------------- +" INSTALLATION: +" --------------------------------------------------------------------- +" Two options for installation: manual or pathogen +" +" MANUAL INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download the solarized distribution (available on the homepage above) +" and unarchive the file. +" 2. Move `solarized.vim` to your `.vim/colors` directory. +" 3. Move each of the files in each subdirectories to the corresponding .vim +" subdirectory (e.g. autoload/togglebg.vim goes into your .vim/autoload +" directory as .vim/autoload/togglebg.vim). +" +" RECOMMENDED PATHOGEN INSTALLATION OPTION: +" --------------------------------------------------------------------- +" +" 1. Download and install Tim Pope's Pathogen from: +" https://github.com/tpope/vim-pathogen +" +" 2. Next, move or clone the `vim-colors-solarized` directory so that it is +" a subdirectory of the `.vim/bundle` directory. +" +" a. **clone with git:** +" +" $ cd ~/.vim/bundle +" $ git clone git://github.com/altercation/vim-colors-solarized.git +" +" b. **or move manually into the pathogen bundle directory:** +" In the parent directory of vim-colors-solarized: +" +" $ mv vim-colors-solarized ~/.vim/bundle/ +" +" MODIFY VIMRC: +" +" After either Option 1 or Option 2 above, put the following two lines in your +" .vimrc: +" +" syntax enable +" set background=dark +" colorscheme solarized +" +" or, for the light background mode of Solarized: +" +" syntax enable +" set background=light +" colorscheme solarized +" +" I like to have a different background in GUI and terminal modes, so I can use +" the following if-then. However, I find vim's background autodetection to be +" pretty good and, at least with MacVim, I can leave this background value +" assignment out entirely and get the same results. +" +" if has('gui_running') +" set background=light +" else +" set background=dark +" endif +" +" See the Solarized homepage at http://ethanschoonover.com/solarized for +" screenshots which will help you select either the light or dark background. +" +" --------------------------------------------------------------------- +" COLOR VALUES +" --------------------------------------------------------------------- +" Download palettes and files from: http://ethanschoonover.com/solarized +" +" L\*a\*b values are canonical (White D65, Reference D50), other values are +" matched in sRGB space. +" +" SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B sRGB HSB +" --------- ------- ---- ------- ----------- ---------- ----------- ----------- +" base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +" base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +" base01 #586e75 10/7 brgreen 240 #4e4e4e 45 -07 -07 88 110 117 194 25 46 +" base00 #657b83 11/7 bryellow 241 #585858 50 -07 -07 101 123 131 195 23 51 +" base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +" base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +" base2 #eee8d5 7/7 white 254 #d7d7af 92 -00 10 238 232 213 44 11 93 +" base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +" yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +" orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +" red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +" magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +" violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +" blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +" cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +" green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 +" +" --------------------------------------------------------------------- +" COLORSCHEME HACKING +" --------------------------------------------------------------------- +" +" Useful commands for testing colorschemes: +" :source $VIMRUNTIME/syntax/hitest.vim +" :help highlight-groups +" :help cterm-colors +" :help group-name +" +" Useful links for developing colorschemes: +" http://www.vim.org/scripts/script.php?script_id=2937 +" http://vimcasts.org/episodes/creating-colorschemes-for-vim/ +" http://www.frexx.de/xterm-256-notes/" +" +" }}} +" Environment Specific Overrides "{{{ +" Allow or disallow certain features based on current terminal emulator or +" environment. + +" Terminals that support italics +let s:terms_italic=[ + \"rxvt", + \"gnome-terminal" + \] +" For reference only, terminals are known to be incomptible. +" Terminals that are in neither list need to be tested. +let s:terms_noitalic=[ + \"iTerm.app", + \"Apple_Terminal" + \] +if has("gui_running") + let s:terminal_italic=1 " TODO: could refactor to not require this at all +else + let s:terminal_italic=0 " terminals will be guilty until proven compatible + for term in s:terms_italic + if $TERM_PROGRAM =~ term + let s:terminal_italic=1 + endif + endfor +endif + +" }}} +" Default option values"{{{ +" --------------------------------------------------------------------- +" s:options_list is used to autogenerate a list of all non-default options +" using "call SolarizedOptions()" or with the "Generate .vimrc commands" +" Solarized menu option. See the "Menus" section below for the function itself. +let s:options_list=[ + \'" this block of commands has been autogenerated by solarized.vim and', + \'" includes the current, non-default Solarized option values.', + \'" To use, place these commands in your .vimrc file (replacing any', + \'" existing colorscheme commands). See also ":help solarized"', + \'', + \'" ------------------------------------------------------------------', + \'" Solarized Colorscheme Config', + \'" ------------------------------------------------------------------', + \] +let s:colorscheme_list=[ + \'syntax enable', + \'set background='.&background, + \'colorscheme solarized', + \] +let s:defaults_list=[ + \'" ------------------------------------------------------------------', + \'', + \'" The following items are available options, but do not need to be', + \'" included in your .vimrc as they are currently set to their defaults.', + \'' + \] +let s:lazycat_list=[ + \'" lazy method of appending this onto your .vimrc ":w! >> ~/.vimrc"', + \'" ------------------------------------------------------------------', + \] + +function! s:SetOption(name,default) + if type(a:default) == type(0) + let l:wrap='' + let l:ewrap='' + else + let l:wrap='"' + let l:ewrap='\"' + endif + if !exists("g:solarized_".a:name) || g:solarized_{a:name}==a:default + exe 'let g:solarized_'.a:name.'='.l:wrap.a:default.l:wrap.'"' + exe 'call add(s:defaults_list, "\" let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.'")' + else + exe 'call add(s:options_list, "let g:solarized_'.a:name.'='.l:ewrap.g:solarized_{a:name}.l:ewrap.' \"default value is '.a:default.'")' + endif +endfunction + +if ($TERM_PROGRAM ==? "apple_terminal" && &t_Co < 256) + let s:solarized_termtrans_default = 1 +else + let s:solarized_termtrans_default = 0 +endif +call s:SetOption("termtrans",s:solarized_termtrans_default) +call s:SetOption("degrade",0) +call s:SetOption("bold",1) +call s:SetOption("underline",1) +call s:SetOption("italic",1) " note that we need to override this later if the terminal doesn't support +call s:SetOption("termcolors",16) +call s:SetOption("contrast","normal") +call s:SetOption("visibility","normal") +call s:SetOption("diffmode","normal") +call s:SetOption("hitrail",0) +call s:SetOption("menu",1) + +"}}} +" Colorscheme initialization "{{{ +" --------------------------------------------------------------------- +hi clear +if exists("syntax_on") + syntax reset +endif +let colors_name = "solarized" + +"}}} +" GUI & CSApprox hexadecimal palettes"{{{ +" --------------------------------------------------------------------- +" +" Set both gui and terminal color values in separate conditional statements +" Due to possibility that CSApprox is running (though I suppose we could just +" leave the hex values out entirely in that case and include only cterm colors) +" We also check to see if user has set solarized (force use of the +" neutral gray monotone palette component) +if (has("gui_running") && g:solarized_degrade == 0) + let s:vmode = "gui" + let s:base03 = "#002b36" + let s:base02 = "#073642" + let s:base01 = "#586e75" + let s:base00 = "#657b83" + let s:base0 = "#839496" + let s:base1 = "#93a1a1" + let s:base2 = "#eee8d5" + let s:base3 = "#fdf6e3" + let s:yellow = "#b58900" + let s:orange = "#cb4b16" + let s:red = "#dc322f" + let s:magenta = "#d33682" + let s:violet = "#6c71c4" + let s:blue = "#268bd2" + let s:cyan = "#2aa198" + "let s:green = "#859900" "original + let s:green = "#719e07" "experimental +elseif (has("gui_running") && g:solarized_degrade == 1) + " These colors are identical to the 256 color mode. They may be viewed + " while in gui mode via "let g:solarized_degrade=1", though this is not + " recommened and is for testing only. + let s:vmode = "gui" + let s:base03 = "#1c1c1c" + let s:base02 = "#262626" + let s:base01 = "#4e4e4e" + let s:base00 = "#585858" + let s:base0 = "#808080" + let s:base1 = "#8a8a8a" + let s:base2 = "#d7d7af" + let s:base3 = "#ffffd7" + let s:yellow = "#af8700" + let s:orange = "#d75f00" + let s:red = "#af0000" + let s:magenta = "#af005f" + let s:violet = "#5f5faf" + let s:blue = "#0087ff" + let s:cyan = "#00afaf" + let s:green = "#5f8700" +elseif g:solarized_termcolors != 256 && &t_Co >= 16 + let s:vmode = "cterm" + let s:base03 = "8" + let s:base02 = "0" + let s:base01 = "10" + let s:base00 = "11" + let s:base0 = "12" + let s:base1 = "14" + let s:base2 = "7" + let s:base3 = "15" + let s:yellow = "3" + let s:orange = "9" + let s:red = "1" + let s:magenta = "5" + let s:violet = "13" + let s:blue = "4" + let s:cyan = "6" + let s:green = "2" +elseif g:solarized_termcolors == 256 + let s:vmode = "cterm" + let s:base03 = "234" + let s:base02 = "235" + let s:base01 = "239" + let s:base00 = "240" + let s:base0 = "244" + let s:base1 = "245" + let s:base2 = "187" + let s:base3 = "230" + let s:yellow = "136" + let s:orange = "166" + let s:red = "124" + let s:magenta = "125" + let s:violet = "61" + let s:blue = "33" + let s:cyan = "37" + let s:green = "64" +else + let s:vmode = "cterm" + let s:bright = "* term=bold cterm=bold" +" let s:base03 = "0".s:bright +" let s:base02 = "0" +" let s:base01 = "2".s:bright +" let s:base00 = "3".s:bright +" let s:base0 = "4".s:bright +" let s:base1 = "6".s:bright +" let s:base2 = "7" +" let s:base3 = "7".s:bright +" let s:yellow = "3" +" let s:orange = "1".s:bright +" let s:red = "1" +" let s:magenta = "5" +" let s:violet = "5".s:bright +" let s:blue = "4" +" let s:cyan = "6" +" let s:green = "2" + let s:base03 = "DarkGray" " 0* + let s:base02 = "Black" " 0 + let s:base01 = "LightGreen" " 2* + let s:base00 = "LightYellow" " 3* + let s:base0 = "LightBlue" " 4* + let s:base1 = "LightCyan" " 6* + let s:base2 = "LightGray" " 7 + let s:base3 = "White" " 7* + let s:yellow = "DarkYellow" " 3 + let s:orange = "LightRed" " 1* + let s:red = "DarkRed" " 1 + let s:magenta = "DarkMagenta" " 5 + let s:violet = "LightMagenta" " 5* + let s:blue = "DarkBlue" " 4 + let s:cyan = "DarkCyan" " 6 + let s:green = "DarkGreen" " 2 + +endif +"}}} +" Formatting options and null values for passthrough effect "{{{ +" --------------------------------------------------------------------- + let s:none = "NONE" + let s:none = "NONE" + let s:t_none = "NONE" + let s:n = "NONE" + let s:c = ",undercurl" + let s:r = ",reverse" + let s:s = ",standout" + let s:ou = "" + let s:ob = "" +"}}} +" Background value based on termtrans setting "{{{ +" --------------------------------------------------------------------- +if (has("gui_running") || g:solarized_termtrans == 0) + let s:back = s:base03 +else + let s:back = "NONE" +endif +"}}} +" Alternate light scheme "{{{ +" --------------------------------------------------------------------- +if &background == "light" + let s:temp03 = s:base03 + let s:temp02 = s:base02 + let s:temp01 = s:base01 + let s:temp00 = s:base00 + let s:base03 = s:base3 + let s:base02 = s:base2 + let s:base01 = s:base1 + let s:base00 = s:base0 + let s:base0 = s:temp00 + let s:base1 = s:temp01 + let s:base2 = s:temp02 + let s:base3 = s:temp03 + if (s:back != "NONE") + let s:back = s:base03 + endif +endif +"}}} +" Optional contrast schemes "{{{ +" --------------------------------------------------------------------- +if g:solarized_contrast == "high" + let s:base01 = s:base00 + let s:base00 = s:base0 + let s:base0 = s:base1 + let s:base1 = s:base2 + let s:base2 = s:base3 + let s:back = s:back +endif +if g:solarized_contrast == "low" + let s:back = s:base02 + let s:ou = ",underline" +endif +"}}} +" Overrides dependent on user specified values and environment "{{{ +" --------------------------------------------------------------------- +if (g:solarized_bold == 0 || &t_Co == 8 ) + let s:b = "" + let s:bb = ",bold" +else + let s:b = ",bold" + let s:bb = "" +endif + +if g:solarized_underline == 0 + let s:u = "" +else + let s:u = ",underline" +endif + +if g:solarized_italic == 0 || s:terminal_italic == 0 + let s:i = "" +else + let s:i = ",italic" +endif +"}}} +" Highlighting primitives"{{{ +" --------------------------------------------------------------------- + +exe "let s:bg_none = ' ".s:vmode."bg=".s:none ."'" +exe "let s:bg_back = ' ".s:vmode."bg=".s:back ."'" +exe "let s:bg_base03 = ' ".s:vmode."bg=".s:base03 ."'" +exe "let s:bg_base02 = ' ".s:vmode."bg=".s:base02 ."'" +exe "let s:bg_base01 = ' ".s:vmode."bg=".s:base01 ."'" +exe "let s:bg_base00 = ' ".s:vmode."bg=".s:base00 ."'" +exe "let s:bg_base0 = ' ".s:vmode."bg=".s:base0 ."'" +exe "let s:bg_base1 = ' ".s:vmode."bg=".s:base1 ."'" +exe "let s:bg_base2 = ' ".s:vmode."bg=".s:base2 ."'" +exe "let s:bg_base3 = ' ".s:vmode."bg=".s:base3 ."'" +exe "let s:bg_green = ' ".s:vmode."bg=".s:green ."'" +exe "let s:bg_yellow = ' ".s:vmode."bg=".s:yellow ."'" +exe "let s:bg_orange = ' ".s:vmode."bg=".s:orange ."'" +exe "let s:bg_red = ' ".s:vmode."bg=".s:red ."'" +exe "let s:bg_magenta = ' ".s:vmode."bg=".s:magenta."'" +exe "let s:bg_violet = ' ".s:vmode."bg=".s:violet ."'" +exe "let s:bg_blue = ' ".s:vmode."bg=".s:blue ."'" +exe "let s:bg_cyan = ' ".s:vmode."bg=".s:cyan ."'" + +exe "let s:fg_none = ' ".s:vmode."fg=".s:none ."'" +exe "let s:fg_back = ' ".s:vmode."fg=".s:back ."'" +exe "let s:fg_base03 = ' ".s:vmode."fg=".s:base03 ."'" +exe "let s:fg_base02 = ' ".s:vmode."fg=".s:base02 ."'" +exe "let s:fg_base01 = ' ".s:vmode."fg=".s:base01 ."'" +exe "let s:fg_base00 = ' ".s:vmode."fg=".s:base00 ."'" +exe "let s:fg_base0 = ' ".s:vmode."fg=".s:base0 ."'" +exe "let s:fg_base1 = ' ".s:vmode."fg=".s:base1 ."'" +exe "let s:fg_base2 = ' ".s:vmode."fg=".s:base2 ."'" +exe "let s:fg_base3 = ' ".s:vmode."fg=".s:base3 ."'" +exe "let s:fg_green = ' ".s:vmode."fg=".s:green ."'" +exe "let s:fg_yellow = ' ".s:vmode."fg=".s:yellow ."'" +exe "let s:fg_orange = ' ".s:vmode."fg=".s:orange ."'" +exe "let s:fg_red = ' ".s:vmode."fg=".s:red ."'" +exe "let s:fg_magenta = ' ".s:vmode."fg=".s:magenta."'" +exe "let s:fg_violet = ' ".s:vmode."fg=".s:violet ."'" +exe "let s:fg_blue = ' ".s:vmode."fg=".s:blue ."'" +exe "let s:fg_cyan = ' ".s:vmode."fg=".s:cyan ."'" + +exe "let s:fmt_none = ' ".s:vmode."=NONE". " term=NONE". "'" +exe "let s:fmt_bold = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_bldi = ' ".s:vmode."=NONE".s:b. " term=NONE".s:b."'" +exe "let s:fmt_undr = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_undb = ' ".s:vmode."=NONE".s:u.s:b. " term=NONE".s:u.s:b."'" +exe "let s:fmt_undi = ' ".s:vmode."=NONE".s:u. " term=NONE".s:u."'" +exe "let s:fmt_uopt = ' ".s:vmode."=NONE".s:ou. " term=NONE".s:ou."'" +exe "let s:fmt_curl = ' ".s:vmode."=NONE".s:c. " term=NONE".s:c."'" +exe "let s:fmt_ital = ' ".s:vmode."=NONE".s:i. " term=NONE".s:i."'" +exe "let s:fmt_stnd = ' ".s:vmode."=NONE".s:s. " term=NONE".s:s."'" +exe "let s:fmt_revr = ' ".s:vmode."=NONE".s:r. " term=NONE".s:r."'" +exe "let s:fmt_revb = ' ".s:vmode."=NONE".s:r.s:b. " term=NONE".s:r.s:b."'" +" revbb (reverse bold for bright colors) is only set to actual bold in low +" color terminals (t_co=8, such as OS X Terminal.app) and should only be used +" with colors 8-15. +exe "let s:fmt_revbb = ' ".s:vmode."=NONE".s:r.s:bb. " term=NONE".s:r.s:bb."'" +exe "let s:fmt_revbbu = ' ".s:vmode."=NONE".s:r.s:bb.s:u." term=NONE".s:r.s:bb.s:u."'" + +if has("gui_running") + exe "let s:sp_none = ' guisp=".s:none ."'" + exe "let s:sp_back = ' guisp=".s:back ."'" + exe "let s:sp_base03 = ' guisp=".s:base03 ."'" + exe "let s:sp_base02 = ' guisp=".s:base02 ."'" + exe "let s:sp_base01 = ' guisp=".s:base01 ."'" + exe "let s:sp_base00 = ' guisp=".s:base00 ."'" + exe "let s:sp_base0 = ' guisp=".s:base0 ."'" + exe "let s:sp_base1 = ' guisp=".s:base1 ."'" + exe "let s:sp_base2 = ' guisp=".s:base2 ."'" + exe "let s:sp_base3 = ' guisp=".s:base3 ."'" + exe "let s:sp_green = ' guisp=".s:green ."'" + exe "let s:sp_yellow = ' guisp=".s:yellow ."'" + exe "let s:sp_orange = ' guisp=".s:orange ."'" + exe "let s:sp_red = ' guisp=".s:red ."'" + exe "let s:sp_magenta = ' guisp=".s:magenta."'" + exe "let s:sp_violet = ' guisp=".s:violet ."'" + exe "let s:sp_blue = ' guisp=".s:blue ."'" + exe "let s:sp_cyan = ' guisp=".s:cyan ."'" +else + let s:sp_none = "" + let s:sp_back = "" + let s:sp_base03 = "" + let s:sp_base02 = "" + let s:sp_base01 = "" + let s:sp_base00 = "" + let s:sp_base0 = "" + let s:sp_base1 = "" + let s:sp_base2 = "" + let s:sp_base3 = "" + let s:sp_green = "" + let s:sp_yellow = "" + let s:sp_orange = "" + let s:sp_red = "" + let s:sp_magenta = "" + let s:sp_violet = "" + let s:sp_blue = "" + let s:sp_cyan = "" +endif + +"}}} +" Basic highlighting"{{{ +" --------------------------------------------------------------------- +" note that link syntax to avoid duplicate configuration doesn't work with the +" exe compiled formats + +exe "hi! Normal" .s:fmt_none .s:fg_base0 .s:bg_back + +exe "hi! Comment" .s:fmt_ital .s:fg_base01 .s:bg_none +" *Comment any comment + +exe "hi! Constant" .s:fmt_none .s:fg_cyan .s:bg_none +" *Constant any constant +" String a string constant: "this is a string" +" Character a character constant: 'c', '\n' +" Number a number constant: 234, 0xff +" Boolean a boolean constant: TRUE, false +" Float a floating point constant: 2.3e10 + +exe "hi! Identifier" .s:fmt_none .s:fg_blue .s:bg_none +" *Identifier any variable name +" Function function name (also: methods for classes) +" +exe "hi! Statement" .s:fmt_none .s:fg_green .s:bg_none +" *Statement any statement +" Conditional if, then, else, endif, switch, etc. +" Repeat for, do, while, etc. +" Label case, default, etc. +" Operator "sizeof", "+", "*", etc. +" Keyword any other keyword +" Exception try, catch, throw + +exe "hi! PreProc" .s:fmt_none .s:fg_orange .s:bg_none +" *PreProc generic Preprocessor +" Include preprocessor #include +" Define preprocessor #define +" Macro same as Define +" PreCondit preprocessor #if, #else, #endif, etc. + +exe "hi! Type" .s:fmt_none .s:fg_yellow .s:bg_none +" *Type int, long, char, etc. +" StorageClass static, register, volatile, etc. +" Structure struct, union, enum, etc. +" Typedef A typedef + +exe "hi! Special" .s:fmt_none .s:fg_red .s:bg_none +" *Special any special symbol +" SpecialChar special character in a constant +" Tag you can use CTRL-] on this +" Delimiter character that needs attention +" SpecialComment special things inside a comment +" Debug debugging statements + +exe "hi! Underlined" .s:fmt_none .s:fg_violet .s:bg_none +" *Underlined text that stands out, HTML links + +exe "hi! Ignore" .s:fmt_none .s:fg_none .s:bg_none +" *Ignore left blank, hidden |hl-Ignore| + +exe "hi! Error" .s:fmt_bold .s:fg_red .s:bg_none +" *Error any erroneous construct + +exe "hi! Todo" .s:fmt_bold .s:fg_magenta.s:bg_none +" *Todo anything that needs extra attention; mostly the +" keywords TODO FIXME and XXX +" +"}}} +" Extended highlighting "{{{ +" --------------------------------------------------------------------- +if (g:solarized_visibility=="high") + exe "hi! SpecialKey" .s:fmt_revr .s:fg_red .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_red .s:bg_none +elseif (g:solarized_visibility=="low") + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base02 .s:bg_none + exe "hi! NonText" .s:fmt_bold .s:fg_base02 .s:bg_none +else + exe "hi! SpecialKey" .s:fmt_bold .s:fg_base00 .s:bg_base02 + exe "hi! NonText" .s:fmt_bold .s:fg_base00 .s:bg_none +endif +exe "hi! StatusLine" .s:fmt_none .s:fg_base1 .s:bg_base02 .s:fmt_revbb +exe "hi! StatusLineNC" .s:fmt_none .s:fg_base00 .s:bg_base02 .s:fmt_revbb +exe "hi! Visual" .s:fmt_none .s:fg_base01 .s:bg_base03 .s:fmt_revbb +exe "hi! Directory" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ErrorMsg" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! IncSearch" .s:fmt_stnd .s:fg_orange .s:bg_none +exe "hi! Search" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! MoreMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! ModeMsg" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! LineNr" .s:fmt_none .s:fg_base01 .s:bg_base02 +exe "hi! Question" .s:fmt_bold .s:fg_cyan .s:bg_none +if ( has("gui_running") || &t_Co > 8 ) + exe "hi! VertSplit" .s:fmt_none .s:fg_base00 .s:bg_base00 +else + exe "hi! VertSplit" .s:fmt_revbb .s:fg_base00 .s:bg_base02 +endif +exe "hi! Title" .s:fmt_bold .s:fg_orange .s:bg_none +exe "hi! VisualNOS" .s:fmt_stnd .s:fg_none .s:bg_base02 .s:fmt_revbb +exe "hi! WarningMsg" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! WildMenu" .s:fmt_none .s:fg_base2 .s:bg_base02 .s:fmt_revbb +exe "hi! Folded" .s:fmt_undb .s:fg_base0 .s:bg_base02 .s:sp_base03 +exe "hi! FoldColumn" .s:fmt_none .s:fg_base0 .s:bg_base02 +if (g:solarized_diffmode=="high") +exe "hi! DiffAdd" .s:fmt_revr .s:fg_green .s:bg_none +exe "hi! DiffChange" .s:fmt_revr .s:fg_yellow .s:bg_none +exe "hi! DiffDelete" .s:fmt_revr .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_revr .s:fg_blue .s:bg_none +elseif (g:solarized_diffmode=="low") +exe "hi! DiffAdd" .s:fmt_undr .s:fg_green .s:bg_none .s:sp_green +exe "hi! DiffChange" .s:fmt_undr .s:fg_yellow .s:bg_none .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_none +exe "hi! DiffText" .s:fmt_undr .s:fg_blue .s:bg_none .s:sp_blue +else " normal + if has("gui_running") +exe "hi! DiffAdd" .s:fmt_bold .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_bold .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_bold .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_bold .s:fg_blue .s:bg_base02 .s:sp_blue + else +exe "hi! DiffAdd" .s:fmt_none .s:fg_green .s:bg_base02 .s:sp_green +exe "hi! DiffChange" .s:fmt_none .s:fg_yellow .s:bg_base02 .s:sp_yellow +exe "hi! DiffDelete" .s:fmt_none .s:fg_red .s:bg_base02 +exe "hi! DiffText" .s:fmt_none .s:fg_blue .s:bg_base02 .s:sp_blue + endif +endif +exe "hi! SignColumn" .s:fmt_none .s:fg_base0 +exe "hi! Conceal" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! SpellBad" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_red +exe "hi! SpellCap" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_violet +exe "hi! SpellRare" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_cyan +exe "hi! SpellLocal" .s:fmt_curl .s:fg_none .s:bg_none .s:sp_yellow +exe "hi! Pmenu" .s:fmt_none .s:fg_base0 .s:bg_base02 .s:fmt_revbb +exe "hi! PmenuSel" .s:fmt_none .s:fg_base01 .s:bg_base2 .s:fmt_revbb +exe "hi! PmenuSbar" .s:fmt_none .s:fg_base2 .s:bg_base0 .s:fmt_revbb +exe "hi! PmenuThumb" .s:fmt_none .s:fg_base0 .s:bg_base03 .s:fmt_revbb +exe "hi! TabLine" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineFill" .s:fmt_undr .s:fg_base0 .s:bg_base02 .s:sp_base0 +exe "hi! TabLineSel" .s:fmt_undr .s:fg_base01 .s:bg_base2 .s:sp_base0 .s:fmt_revbbu +exe "hi! CursorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! CursorLine" .s:fmt_uopt .s:fg_none .s:bg_base02 .s:sp_base1 +exe "hi! ColorColumn" .s:fmt_none .s:fg_none .s:bg_base02 +exe "hi! Cursor" .s:fmt_none .s:fg_base03 .s:bg_base0 +hi! link lCursor Cursor +exe "hi! MatchParen" .s:fmt_bold .s:fg_red .s:bg_base01 + +"}}} +" vim syntax highlighting "{{{ +" --------------------------------------------------------------------- +"exe "hi! vimLineComment" . s:fg_base01 .s:bg_none .s:fmt_ital +"hi! link vimComment Comment +"hi! link vimLineComment Comment +hi! link vimVar Identifier +hi! link vimFunc Function +hi! link vimUserFunc Function +hi! link helpSpecial Special +hi! link vimSet Normal +hi! link vimSetEqual Normal +exe "hi! vimCommentString" .s:fmt_none .s:fg_violet .s:bg_none +exe "hi! vimCommand" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimCmdSep" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! helpExample" .s:fmt_none .s:fg_base1 .s:bg_none +exe "hi! helpOption" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! helpNote" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpVim" .s:fmt_none .s:fg_magenta.s:bg_none +exe "hi! helpHyperTextJump" .s:fmt_undr .s:fg_blue .s:bg_none +exe "hi! helpHyperTextEntry".s:fmt_none .s:fg_green .s:bg_none +exe "hi! vimIsCommand" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! vimSynMtchOpt" .s:fmt_none .s:fg_yellow .s:bg_none +exe "hi! vimSynType" .s:fmt_none .s:fg_cyan .s:bg_none +exe "hi! vimHiLink" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimHiGroup" .s:fmt_none .s:fg_blue .s:bg_none +exe "hi! vimGroup" .s:fmt_undb .s:fg_blue .s:bg_none +"}}} +" diff highlighting "{{{ +" --------------------------------------------------------------------- +hi! link diffAdded Statement +hi! link diffLine Identifier +"}}} +" git & gitcommit highlighting "{{{ +"git +"exe "hi! gitDateHeader" +"exe "hi! gitIdentityHeader" +"exe "hi! gitIdentityKeyword" +"exe "hi! gitNotesHeader" +"exe "hi! gitReflogHeader" +"exe "hi! gitKeyword" +"exe "hi! gitIdentity" +"exe "hi! gitEmailDelimiter" +"exe "hi! gitEmail" +"exe "hi! gitDate" +"exe "hi! gitMode" +"exe "hi! gitHashAbbrev" +"exe "hi! gitHash" +"exe "hi! gitReflogMiddle" +"exe "hi! gitReference" +"exe "hi! gitStage" +"exe "hi! gitType" +"exe "hi! gitDiffAdded" +"exe "hi! gitDiffRemoved" +"gitcommit +"exe "hi! gitcommitSummary" +exe "hi! gitcommitComment" .s:fmt_ital .s:fg_base01 .s:bg_none +hi! link gitcommitUntracked gitcommitComment +hi! link gitcommitDiscarded gitcommitComment +hi! link gitcommitSelected gitcommitComment +exe "hi! gitcommitUnmerged" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitOnBranch" .s:fmt_bold .s:fg_base01 .s:bg_none +exe "hi! gitcommitBranch" .s:fmt_bold .s:fg_magenta .s:bg_none +hi! link gitcommitNoBranch gitcommitBranch +exe "hi! gitcommitDiscardedType".s:fmt_none .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedType" .s:fmt_none .s:fg_green .s:bg_none +"exe "hi! gitcommitUnmergedType" +"exe "hi! gitcommitType" +"exe "hi! gitcommitNoChanges" +"exe "hi! gitcommitHeader" +exe "hi! gitcommitHeader" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! gitcommitUntrackedFile".s:fmt_bold .s:fg_cyan .s:bg_none +exe "hi! gitcommitDiscardedFile".s:fmt_bold .s:fg_red .s:bg_none +exe "hi! gitcommitSelectedFile" .s:fmt_bold .s:fg_green .s:bg_none +exe "hi! gitcommitUnmergedFile" .s:fmt_bold .s:fg_yellow .s:bg_none +exe "hi! gitcommitFile" .s:fmt_bold .s:fg_base0 .s:bg_none +hi! link gitcommitDiscardedArrow gitcommitDiscardedFile +hi! link gitcommitSelectedArrow gitcommitSelectedFile +hi! link gitcommitUnmergedArrow gitcommitUnmergedFile +"exe "hi! gitcommitArrow" +"exe "hi! gitcommitOverflow" +"exe "hi! gitcommitBlank" +" }}} +" html highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! htmlTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlEndTag" .s:fmt_none .s:fg_base01 .s:bg_none +exe "hi! htmlTagN" .s:fmt_bold .s:fg_base1 .s:bg_none +exe "hi! htmlTagName" .s:fmt_bold .s:fg_blue .s:bg_none +exe "hi! htmlSpecialTagName".s:fmt_ital .s:fg_blue .s:bg_none +exe "hi! htmlArg" .s:fmt_none .s:fg_base00 .s:bg_none +exe "hi! javaScript" .s:fmt_none .s:fg_yellow .s:bg_none +"}}} +" perl highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! perlHereDoc" . s:fg_base1 .s:bg_back .s:fmt_none +exe "hi! perlVarPlain" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! perlStatementFileDesc". s:fg_cyan.s:bg_back.s:fmt_none + +"}}} +" tex highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! texStatement" . s:fg_cyan .s:bg_back .s:fmt_none +exe "hi! texMathZoneX" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texMathMatcher" . s:fg_yellow .s:bg_back .s:fmt_none +exe "hi! texRefLabel" . s:fg_yellow .s:bg_back .s:fmt_none +"}}} +" ruby highlighting "{{{ +" --------------------------------------------------------------------- +exe "hi! rubyDefine" . s:fg_base1 .s:bg_back .s:fmt_bold +"rubyInclude +"rubySharpBang +"rubyAccess +"rubyPredefinedVariable +"rubyBoolean +"rubyClassVariable +"rubyBeginEnd +"rubyRepeatModifier +"hi! link rubyArrayDelimiter Special " [ , , ] +"rubyCurlyBlock { , , } + +"hi! link rubyClass Keyword +"hi! link rubyModule Keyword +"hi! link rubyKeyword Keyword +"hi! link rubyOperator Operator +"hi! link rubyIdentifier Identifier +"hi! link rubyInstanceVariable Identifier +"hi! link rubyGlobalVariable Identifier +"hi! link rubyClassVariable Identifier +"hi! link rubyConstant Type +"}}} +" haskell syntax highlighting"{{{ +" --------------------------------------------------------------------- +" For use with syntax/haskell.vim : Haskell Syntax File +" http://www.vim.org/scripts/script.php?script_id=3034 +" See also Steffen Siering's github repository: +" http://github.com/urso/dotrc/blob/master/vim/syntax/haskell.vim +" --------------------------------------------------------------------- +" +" Treat True and False specially, see the plugin referenced above +let hs_highlight_boolean=1 +" highlight delims, see the plugin referenced above +let hs_highlight_delimiters=1 + +exe "hi! cPreCondit". s:fg_orange.s:bg_none .s:fmt_none + +exe "hi! VarId" . s:fg_blue .s:bg_none .s:fmt_none +exe "hi! ConId" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsImport" . s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! hsString" . s:fg_base00 .s:bg_none .s:fmt_none + +exe "hi! hsStructure" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_hlFunctionName" . s:fg_blue .s:bg_none +exe "hi! hsStatement" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsImportLabel" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hs_OpFunctionName" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hs_DeclareFunction" . s:fg_orange .s:bg_none .s:fmt_none +exe "hi! hsVarSym" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsType" . s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! hsTypedef" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsModuleName" . s:fg_green .s:bg_none .s:fmt_undr +exe "hi! hsModuleStartLabel" . s:fg_magenta.s:bg_none .s:fmt_none +hi! link hsImportParams Delimiter +hi! link hsDelimTypeExport Delimiter +hi! link hsModuleStartLabel hsStructure +hi! link hsModuleWhereLabel hsModuleStartLabel + +" following is for the haskell-conceal plugin +" the first two items don't have an impact, but better safe +exe "hi! hsNiceOperator" . s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! hsniceoperator" . s:fg_cyan .s:bg_none .s:fmt_none + +"}}} +" pandoc markdown syntax highlighting "{{{ +" --------------------------------------------------------------------- + +"PandocHiLink pandocNormalBlock +exe "hi! pandocTitleBlock" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocTitleBlockTitle" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocTitleComment" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocComment" .s:fg_base01 .s:bg_none .s:fmt_ital +exe "hi! pandocVerbatimBlock" .s:fg_yellow .s:bg_none .s:fmt_none +hi! link pandocVerbatimBlockDeep pandocVerbatimBlock +hi! link pandocCodeBlock pandocVerbatimBlock +hi! link pandocCodeBlockDelim pandocVerbatimBlock +exe "hi! pandocBlockQuote" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader1" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader2" .s:fg_cyan .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader3" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader4" .s:fg_red .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader5" .s:fg_base0 .s:bg_none .s:fmt_none +exe "hi! pandocBlockQuoteLeader6" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocListMarker" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocListReference" .s:fg_magenta.s:bg_none .s:fmt_undr + +" Definitions +" --------------------------------------------------------------------- +let s:fg_pdef = s:fg_violet +exe "hi! pandocDefinitionBlock" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocDefinitionTerm" .s:fg_pdef .s:bg_none .s:fmt_stnd +exe "hi! pandocDefinitionIndctr" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedDefinition" .s:fg_pdef .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisDefinition" .s:fg_pdef .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisDefinition" .s:fg_pdef.s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutDefinition" .s:fg_pdef .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none +exe "hi! pandocSubscriptDefinition" .s:fg_pdef .s:bg_none .s:fmt_none + +" Tables +" --------------------------------------------------------------------- +let s:fg_ptable = s:fg_blue +exe "hi! pandocTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocTableStructure" .s:fg_ptable.s:bg_none .s:fmt_none +hi! link pandocTableStructureTop pandocTableStructre +hi! link pandocTableStructureEnd pandocTableStructre +exe "hi! pandocTableZebraLight" .s:fg_ptable.s:bg_base03.s:fmt_none +exe "hi! pandocTableZebraDark" .s:fg_ptable.s:bg_base02.s:fmt_none +exe "hi! pandocEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNestedTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisTable" .s:fg_ptable.s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeoutTable" .s:fg_ptable.s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInlineTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSuperscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none +exe "hi! pandocSubscriptTable" .s:fg_ptable.s:bg_none .s:fmt_none + +" Headings +" --------------------------------------------------------------------- +let s:fg_phead = s:fg_orange +exe "hi! pandocHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocHeadingMarker" .s:fg_yellow.s:bg_none.s:fmt_bold +exe "hi! pandocEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocStrongEmphasisNestedHeading" .s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasisHeading".s:fg_phead .s:bg_none.s:fmt_bldi +exe "hi! pandocStrikeoutHeading" .s:fg_phead .s:bg_none.s:fmt_revr +exe "hi! pandocVerbatimInlineHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSuperscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold +exe "hi! pandocSubscriptHeading" .s:fg_phead .s:bg_none.s:fmt_bold + +" Links +" --------------------------------------------------------------------- +exe "hi! pandocLinkDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocLinkLabel" .s:fg_blue .s:bg_none .s:fmt_undr +exe "hi! pandocLinkText" .s:fg_blue .s:bg_none .s:fmt_undb +exe "hi! pandocLinkURL" .s:fg_base00 .s:bg_none .s:fmt_undr +exe "hi! pandocLinkTitle" .s:fg_base00 .s:bg_none .s:fmt_undi +exe "hi! pandocLinkTitleDelim" .s:fg_base01 .s:bg_none .s:fmt_undi .s:sp_base00 +exe "hi! pandocLinkDefinition" .s:fg_cyan .s:bg_none .s:fmt_undr .s:sp_base00 +exe "hi! pandocLinkDefinitionID" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocImageCaption" .s:fg_violet .s:bg_none .s:fmt_undb +exe "hi! pandocFootnoteLink" .s:fg_green .s:bg_none .s:fmt_undr +exe "hi! pandocFootnoteDefLink" .s:fg_green .s:bg_none .s:fmt_bold +exe "hi! pandocFootnoteInline" .s:fg_green .s:bg_none .s:fmt_undb +exe "hi! pandocFootnote" .s:fg_green .s:bg_none .s:fmt_none +exe "hi! pandocCitationDelim" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitation" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocCitationID" .s:fg_magenta.s:bg_none .s:fmt_undr +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none + +" Main Styles +" --------------------------------------------------------------------- +exe "hi! pandocStyleDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocEmphasis" .s:fg_base0 .s:bg_none .s:fmt_ital +exe "hi! pandocEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bold +exe "hi! pandocStrongEmphasisNested" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrongEmphasisEmphasis" .s:fg_base0 .s:bg_none .s:fmt_bldi +exe "hi! pandocStrikeout" .s:fg_base01 .s:bg_none .s:fmt_revr +exe "hi! pandocVerbatimInline" .s:fg_yellow .s:bg_none .s:fmt_none +exe "hi! pandocSuperscript" .s:fg_violet .s:bg_none .s:fmt_none +exe "hi! pandocSubscript" .s:fg_violet .s:bg_none .s:fmt_none + +exe "hi! pandocRule" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocRuleLine" .s:fg_blue .s:bg_none .s:fmt_bold +exe "hi! pandocEscapePair" .s:fg_red .s:bg_none .s:fmt_bold +exe "hi! pandocCitationRef" .s:fg_magenta.s:bg_none .s:fmt_none +exe "hi! pandocNonBreakingSpace" . s:fg_red .s:bg_none .s:fmt_revr +hi! link pandocEscapedCharacter pandocEscapePair +hi! link pandocLineBreak pandocEscapePair + +" Embedded Code +" --------------------------------------------------------------------- +exe "hi! pandocMetadataDelim" .s:fg_base01 .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadataKey" .s:fg_blue .s:bg_none .s:fmt_none +exe "hi! pandocMetadata" .s:fg_blue .s:bg_none .s:fmt_bold +hi! link pandocMetadataTitle pandocMetadata + +"}}} +" Utility autocommand "{{{ +" --------------------------------------------------------------------- +" In cases where Solarized is initialized inside a terminal vim session and +" then transferred to a gui session via the command `:gui`, the gui vim process +" does not re-read the colorscheme (or .vimrc for that matter) so any `has_gui` +" related code that sets gui specific values isn't executed. +" +" Currently, Solarized sets only the cterm or gui values for the colorscheme +" depending on gui or terminal mode. It's possible that, if the following +" autocommand method is deemed excessively poor form, that approach will be +" used again and the autocommand below will be dropped. +" +" However it seems relatively benign in this case to include the autocommand +" here. It fires only in cases where vim is transferring from terminal to gui +" mode (detected with the script scope s:vmode variable). It also allows for +" other potential terminal customizations that might make gui mode suboptimal. +" +autocmd GUIEnter * if (s:vmode != "gui") | exe "colorscheme " . g:colors_name | endif +"}}} +" Highlight Trailing Space {{{ +" Experimental: Different highlight when on cursorline +function! s:SolarizedHiTrail() + if g:solarized_hitrail==0 + hi! clear solarizedTrailingSpace + else + syn match solarizedTrailingSpace "\s*$" + exe "hi! solarizedTrailingSpace " .s:fmt_undr .s:fg_red .s:bg_none .s:sp_red + endif +endfunction +augroup SolarizedHiTrail + autocmd! + if g:solarized_hitrail==1 + autocmd! Syntax * call s:SolarizedHiTrail() + autocmd! ColorScheme * if g:colors_name == "solarized" | call s:SolarizedHiTrail() | else | augroup! s:SolarizedHiTrail | endif + endif +augroup END +" }}} +" Menus "{{{ +" --------------------------------------------------------------------- +" Turn off Solarized menu by including the following assignment in your .vimrc: +" +" let g:solarized_menu=0 + +function! s:SolarizedOptions() + new "new buffer + setf vim "vim filetype + let failed = append(0, s:defaults_list) + let failed = append(0, s:colorscheme_list) + let failed = append(0, s:options_list) + let failed = append(0, s:lazycat_list) + 0 "jump back to the top +endfunction +if !exists(":SolarizedOptions") + command SolarizedOptions :call s:SolarizedOptions() +endif + +function! SolarizedMenu() + if exists("g:loaded_solarized_menu") + try + silent! aunmenu Solarized + endtry + endif + let g:loaded_solarized_menu = 1 + + if g:colors_name == "solarized" && g:solarized_menu != 0 + + amenu &Solarized.&Contrast.&Low\ Contrast :let g:solarized_contrast="low" \| colorscheme solarized + amenu &Solarized.&Contrast.&Normal\ Contrast :let g:solarized_contrast="normal" \| colorscheme solarized + amenu &Solarized.&Contrast.&High\ Contrast :let g:solarized_contrast="high" \| colorscheme solarized + an &Solarized.&Contrast.-sep- + amenu &Solarized.&Contrast.&Help:\ Contrast :help 'solarized_contrast' + + amenu &Solarized.&Visibility.&Low\ Visibility :let g:solarized_visibility="low" \| colorscheme solarized + amenu &Solarized.&Visibility.&Normal\ Visibility :let g:solarized_visibility="normal" \| colorscheme solarized + amenu &Solarized.&Visibility.&High\ Visibility :let g:solarized_visibility="high" \| colorscheme solarized + an &Solarized.&Visibility.-sep- + amenu &Solarized.&Visibility.&Help:\ Visibility :help 'solarized_visibility' + + amenu &Solarized.&Background.&Toggle\ Background :ToggleBG + amenu &Solarized.&Background.&Dark\ Background :set background=dark \| colorscheme solarized + amenu &Solarized.&Background.&Light\ Background :set background=light \| colorscheme solarized + an &Solarized.&Background.-sep- + amenu &Solarized.&Background.&Help:\ ToggleBG :help togglebg + + if g:solarized_bold==0 | let l:boldswitch="On" | else | let l:boldswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Bold\\ ".l:boldswitch." :let g:solarized_bold=(abs(g:solarized_bold-1)) \\| colorscheme solarized" + if g:solarized_italic==0 | let l:italicswitch="On" | else | let l:italicswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Italic\\ ".l:italicswitch." :let g:solarized_italic=(abs(g:solarized_italic-1)) \\| colorscheme solarized" + if g:solarized_underline==0 | let l:underlineswitch="On" | else | let l:underlineswitch="Off" | endif + exe "amenu &Solarized.&Styling.&Turn\\ Underline\\ ".l:underlineswitch." :let g:solarized_underline=(abs(g:solarized_underline-1)) \\| colorscheme solarized" + + amenu &Solarized.&Diff\ Mode.&Low\ Diff\ Mode :let g:solarized_diffmode="low" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&Normal\ Diff\ Mode :let g:solarized_diffmode="normal" \| colorscheme solarized + amenu &Solarized.&Diff\ Mode.&High\ Diff\ Mode :let g:solarized_diffmode="high" \| colorscheme solarized + + if g:solarized_hitrail==0 | let l:hitrailswitch="On" | else | let l:hitrailswitch="Off" | endif + exe "amenu &Solarized.&Experimental.&Turn\\ Highlight\\ Trailing\\ Spaces\\ ".l:hitrailswitch." :let g:solarized_hitrail=(abs(g:solarized_hitrail-1)) \\| colorscheme solarized" + an &Solarized.&Experimental.-sep- + amenu &Solarized.&Experimental.&Help:\ HiTrail :help 'solarized_hitrail' + + an &Solarized.-sep1- + + amenu &Solarized.&Autogenerate\ options :SolarizedOptions + + an &Solarized.-sep2- + + amenu &Solarized.&Help.&Solarized\ Help :help solarized + amenu &Solarized.&Help.&Toggle\ Background\ Help :help togglebg + amenu &Solarized.&Help.&Removing\ This\ Menu :help solarized-menu + + an 9999.77 &Help.&Solarized\ Colorscheme :help solarized + an 9999.78 &Help.&Toggle\ Background :help togglebg + an 9999.79 &Help.-sep3- + + endif +endfunction + +autocmd ColorScheme * if g:colors_name != "solarized" | silent! aunmenu Solarized | else | call SolarizedMenu() | endif + +"}}} +" License "{{{ +" --------------------------------------------------------------------- +" +" Copyright (c) 2011 Ethan Schoonover +" +" Permission is hereby granted, free of charge, to any person obtaining a copy +" of this software and associated documentation files (the "Software"), to deal +" in the Software without restriction, including without limitation the rights +" to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +" copies of the Software, and to permit persons to whom the Software is +" furnished to do so, subject to the following conditions: +" +" The above copyright notice and this permission notice shall be included in +" all copies or substantial portions of the Software. +" +" THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +" IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +" FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +" AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +" LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +" OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +" THE SOFTWARE. +" +" vim:foldmethod=marker:foldlevel=0 +"}}} + diff --git a/homes/ngogober/vim/common.vim b/homes/ngogober/vim/common.vim index 21643e2..64129e9 100644 --- a/homes/ngogober/vim/common.vim +++ b/homes/ngogober/vim/common.vim @@ -1,5 +1,6 @@ -" common to vim (.vimrc) neovim (.config/nvim/init.vim), and VS Code's use of -" neovim +" common to vim (~/.vimrc vi .vimrc) neovim (~/.config/nvim/init.vim via +" nvim_init.vim) +source ~/superhome/config/vim/base.vim " ':set' vs 'set' " https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading @@ -10,39 +11,172 @@ " `zM` to close all folds " `:help folding` for more info -" Visual Settings -------------------------------------------------------- {{{ +" General Settings -------------------------------------------------------- {{{ + +" mouse mode on +set mouse=a + +set encoding=utf-8 + +" Disable compatibility with vi which can cause unexpected issues. +set nocompatible + +" Enable type file detection. Vim will be able to try to detect the type of file in use. +filetype on + +" Enable plugins and load plugin for the detected file type. +filetype plugin on + +" Load an indent file for the detected file type. +filetype indent on +" automatically indent on new line to match above line indent +set autoindent + +" tab settings +" tab size 2, fine tune to 2, normal mode tab insert at 2, use spaces +set tabstop=2 softtabstop=2 shiftwidth=2 expandtab + +" Do not wrap lines. Allow long lines to extend as far as the line goes. +set nowrap + +" Turn on hybrid line numbering +" https://jeffkreeftmeijer.com/vim-number/ +set number relativenumber +" +" hybrid numbers in Normal mode only +" define an autonumber group named 'numbertoggle' +augroup numbertoggle + " clear existing autocommands in group + autocmd! + " enable relative numbers in Normal mode + autocmd BufEnter,FocusGained,InsertLeave * set relativenumber + " disable relative numbers in insert mode & when losing focus (e.g. + " switching windows) + autocmd BufLeave,FocusLost,InsertEnter * set norelativenumber +augroup END -" turn off highlight of search terms by default -set nohls +" fix backspace not working problem +set backspace=2 " }}} +" Visual Settings -------------------------------------------------------- {{{ + +" Set a colorscheme $VIMRUNTIME/colors for color schemes shipped with vim +" $HOME/.vim/colors for any of your own +" ln -s $SUPERHOME/config/vim/colors $HOME/.vim/colors +" run "hi" command for all color groups +if has('nvim') + "colorscheme vim + + set termguicolors + + "highlight Normal guifg=NONE guibg=NONE + + "highlight SignColumn ctermbg=0 + "highlight clear SignColumn + + " visual mode highlight color + " run "hi" command for all color groups + "highlight Visual guifg=#444444 guibg=#87d7ff + + " set appropriate color for column highlight + "highlight ColorColumn guibg=#000000 + + " set highlight color + "highlight Search guifg=#444444 guibg=#87d7ff +else + set background=dark + "colorscheme elflord + "colorscheme dark-meadow + "colorscheme default + "colorscheme solarized + + " needed for default vim colorscheme + set notermguicolors + + " clears the gutter to prevent it from being gray for whatever reason + highlight clear SignColumn + + " column highlight to none + highlight ColorColumn ctermbg=0 + + " sets visual mode and search to cyan, for some unknown reason + highlight Visual ctermfg=238 ctermbg=117 + highlight Search ctermfg=238 ctermbg=117 +endif + +" when search hight pattern match +set incsearch + +" when inserting bracket, briefly jump to matching one +set showmatch + +" turn syntax highlighting on. +syntax on + +" vim gutter - always on +" auto is annoying with coc, which uses the gutter often +set signcolumn=yes + +" highlight 161st column +set colorcolumn=161 + + +" }}} " MAPPINGS --------------------------------------------------------------- {{{ -" Mappings code goes here. +" Move focus to the left window +nmap +" Move focus to the right window +nmap +" Move focus to the lower window +nmap +" Move focus to the upper window +nmap -map o o^DA -map O O^DA -map u o^Do.k0Dj$xA -map U O^DO.j0Dk$xA -" -" toggle on/off highlight of search terms -map \ :set hls! +" copy paste to clipboard +" copy from visual mode +vmap "*y +" paste when in insert mode +imap "*p -" change tab settings -map t :set expandtab!:set expandtab? +" show tabs, spaces and trailing spaces +" hellowo r l d " -" increase tab size by 2 spaces -map ]T :set softtabstop+=2 tabstop+=2 shiftwidth+=2 +"map ]t :set list:set listchars=space:.,tab:▸·,trail:· +map ]t :set list:set listchars=space:.,trail:+,tab:>- " -" decrease tab size by 2 spaces -map [T :set softtabstop-=2 tabstop-=2 shiftwidth-=2 +" unshow tabs and trailing spaces +map [t :set nolist -" }}} +" }}} " VIMSCRIPT -------------------------------------------------------------- {{{ +" This will enable code folding. +" Use the marker method of folding. +augroup filetype_vim + autocmd! + autocmd FileType vim setlocal foldmethod=marker +augroup END + +" }}} + +" MISC ------------------------------------------------------------------- {{{ + +" Misc stuff. + +" set syntax for various custom filetypes +" https://stackoverflow.com/questions/11666170/persistent-set-syntax-for-a-given-filetype +" when opening a file in vim, can do :setlocal syntax? to see what filetype it +" detected + +" no longer needed +" au BufRead,BufNewFile *.zshrcmanaged set filetype=zsh + +" " }}} diff --git a/homes/ngogober/vim/nvim_init.vim b/homes/ngogober/vim/nvim_init.vim new file mode 100644 index 0000000..86faabc --- /dev/null +++ b/homes/ngogober/vim/nvim_init.vim @@ -0,0 +1,12 @@ +" do `source ~/superhome/config/vim/nvim_init.vim` in ~/.config/nvim/init.vim + +if exists('g:vscode') + source ~/superhome/config/vim/base.vim +else + " ordinary Neovim stuff + + set runtimepath^=~/.vim runtimepath+=~/.vim/after + let &packpath = &runtimepath + source ~/superhome/config/vim/common.vim +end + diff --git a/homes/ngogober/vim/plugins.vim b/homes/ngogober/vim/plugins.vim deleted file mode 100644 index 3142dbf..0000000 --- a/homes/ngogober/vim/plugins.vim +++ /dev/null @@ -1,85 +0,0 @@ -" plugin installation, management, and configuration - -" `zo` to open a single fold under the cursor -" `zc` to close the fold under the cursor -" `zR` to open all folds -" `zM` to close all folds -" `:help folding` for more info - -" vim-plug setup ---------------------------------------------------------- {{{ - -" https://github.com/junegunn/vim-plug - -" download vim-plug if missing -" https://github.com/junegunn/vim-plug/wiki/tips#automatic-installation -let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' -if empty(glob(data_dir . '/autoload/plug.vim')) - silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' -endif - -" run PlugInstall if there are missing plugins -autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) - \| PlugInstall --sync | source $MYVIMRC -\| endif - -" declare plugins -silent! if plug#begin() - - " manually install with :PlugInstall - " (but automation above should handle it) - " update with :PlugUPdate - " clean unused with :PlugClean - - "Plug '/' - Plug 'preservim/nerdtree' - Plug 'itchyny/lightline.vim' - "Plug 'ctrlpvim/ctrlp.vim' - "Plug 'junegunn/vim-easy-align' - "Plug 'tpope/vim-commentary' - "Plug 'tpope/vim-eunuch' - "Plug 'tpope/vim-fugitive' - "Plug 'tpope/vim-repeat' - "Plug 'tpope/vim-surround' - "Plug 'tpope/vim-unimpaired' - - " do :echo v:version to see your version - " vim and nvim will be different - " - " ignore these on older versions of vim - "if v:version >= 703 - "Plug '/' - "endif - - call plug#end() -endif - -" }}} - -" NERDTree ---------------------------------------------------------------- {{{ - -" https://github.com/preservim/nerdtree - -" quick toggle NERDTree -map n :NERDTreeToggle -" show hidden files by default -let NERDTreeShowHidden=1 - -" }}} - -" light line -------------------------------------------------------------- {{{ - -" https://github.com/itchyny/lightline.vim - -" fixes status line not showing up -set laststatus=2 - -" -- insert -- not needed anymore since it's in the satus line -set noshowmode - -" colorscheme -let g:lightline = { - \ 'colorscheme': 'wombat', - \ } - -" }}} - diff --git a/homes/ngogober/vim/vim_plugins.vim b/homes/ngogober/vim/vim_plugins.vim new file mode 100644 index 0000000..486333f --- /dev/null +++ b/homes/ngogober/vim/vim_plugins.vim @@ -0,0 +1,207 @@ +" plugin installation, management, and configuration + +" `zo` to open a single fold under the cursor +" `zc` to close the fold under the cursor +" `zR` to open all folds +" `zM` to close all folds +" `:help folding` for more info + +" vim-plug setup ---------------------------------------------------------- {{{ + +" https://github.com/junegunn/vim-plug + +" download vim-plug if missing +" https://github.com/junegunn/vim-plug/wiki/tips#automatic-installation +let data_dir = has('nvim') ? stdpath('data') . '/site' : '~/.vim' +if empty(glob(data_dir . '/autoload/plug.vim')) + silent execute '!curl -fLo '.data_dir.'/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim' +endif + +" run PlugInstall if there are missing plugins +autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) + \| PlugInstall --sync | source $MYVIMRC +\| endif + +" declare plugins +silent! if plug#begin() + + " manually install with :PlugInstall + " (but automation above should handle it) + " update with :PlugUPdate + " clean unused with :PlugClean + + "Plug '/' + Plug 'preservim/nerdtree' + Plug 'itchyny/lightline.vim' + "Plug 'ctrlpvim/ctrlp.vim' + "Plug 'junegunn/vim-easy-align' + "Plug 'tpope/vim-commentary' + "Plug 'tpope/vim-eunuch' + "Plug 'tpope/vim-fugitive' + "Plug 'tpope/vim-repeat' + Plug 'tpope/vim-surround' + "Plug 'tpope/vim-unimpaired' + Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } + Plug 'junegunn/fzf.vim' + Plug 'neoclide/coc.nvim', {'branch': 'release'} + Plug 'puremourning/vimspector' + "Plug 'tpope/vim-sleuth' + + " do :echo v:version to see your version + " vim and nvim will be different + " + " ignore these on older versions of vim + "if v:version >= 703 + "Plug '/' + "endif + + call plug#end() +endif + +" }}} + +" NERDTree ---------------------------------------------------------------- {{{ + +" https://github.com/preservim/nerdtree + +" quick toggle NERDTree +nmap n :NERDTreeToggle +nmap g :NERDTreeFind +" show hidden files by default +let NERDTreeShowHidden=1 + +" }}} + +" light line -------------------------------------------------------------- {{{ + +" https://github.com/itchyny/lightline.vim + +" fixes status line not showing up +set laststatus=2 + +" -- insert -- not needed anymore since it's in the satus line +set noshowmode + +" colorscheme +let g:lightline = { + \ 'colorscheme': 'wombat', + \ } + +" }}} + +" fzf --------------------------------------------------------------------- {{{ +" https://github.com/junegunn/fzf.vim + +" :Files [PATH] - $FZF_DEFAULT_COMMAND +" :GFiles [OPTS] - git files (git ls-files) +" :GFiles? = git files (git status) +" :Buffers - open buffers +" :Colors - color schemes +" :Ag [PATTERN] - ag (aka the_silver_search, ack alt); ALT-A to select all, ALT-D to deselect all +" :Rg [PATTERN] - rg (aka ripgrep, grep alt); ALT-A to select all, ALT-D to deselect all +" :RG [PATTERN] - rg; but relaunch ripgrep on every keystroke +" :Lines [QUERY] - lines in loaded buffers +" :Blines [QUERY] - lines in current buffer +" :Marks - marks +" :Jumps - jumps +" :Windows - windows +" :History: - command history +" :History/ - search history +" :Maps - normal mode mappings +" :Helptags - help tags +" :Filetypes - file types +" +" CTRL-T / CTRL-X / CTRL-V to open in new tab, (horizontal) split, vertical split + +" overwrite the default Files command - using 'opener' as preview +" https://github.com/junegunn/fzf.vim?tab=readme-ov-file#example-customizing-files-command +command! -bang -nargs=? -complete=dir Files + \ call fzf#vim#files(, {'options': ['--layout=reverse', '--preview', 'opener {}']}, 0) +" ! means fullscreen +" files +nnoremap ff :Files +nnoremap fF :Files! +" files in [PATH] +nnoremap fo :Files +" git ls-files +nnoremap fg :GFiles +" git status +nnoremap fs :GFiles? +" open buffers +nnoremap fb :Buffers +" regex [PATTERN] +nnoremap fr :Rg + +" }}} + +" coc --------------------------------------------------------------------- {{{ +" https://github.com/neoclide/coc.nvim + +let g:coc_global_extensions = [ + \"coc-json", + \"coc-docker", + \"coc-markdownlint", + \"coc-yaml", + \"coc-sh", + \"coc-pyright", + \"coc-lua", + \"coc-html", + \"coc-css", + \"coc-tsserver", + \"coc-eslint", + \"coc-prettier", + \] + +" get definition under cursor +nnoremap ,z :call CocActionAsync('definitionHover') +" accept completion item +inoremap coc#pum#visible() ? coc#pum#confirm() + \: "\u\\=coc#on_enter()\" +" GoTo code navigation +nmap gd (coc-definition) +nmap gy (coc-type-definition) +nmap gi (coc-implementation) +nmap gr (coc-references) +noremap gb + +" Use K to show documentation in preview window +nnoremap K :call ShowDocumentation() + +function! ShowDocumentation() + if CocAction('hasProvider', 'hover') + call CocActionAsync('doHover') + else + call feedkeys('K', 'in') + endif +endfunction + +" }}} + +" vimspector --------------------------------------------------------------------- {{{ + +" NOTE: in theory vscode-js-debug should in theory subsume vscode-firefox-debug, debugger-for-chrome +" but that seems not to be the case, haven't checked but probably version +" needs updating within vimspector codebase itself +let g:vimspector_install_gadgets = [ 'debugpy', "vscode-js-debug", "debugger-for-chrome" ] + +" standard mappings +" (https://github.com/puremourning/vimspector?tab=readme-ov-file#human-mode) +let g:vimspector_enable_mappings = 'HUMAN' + +" VimspectorContinue will start if not paused. +nmap dp VimspectorContinue +nmap dx VimspectorStop +nmap dr VimspectorRestart +nmap db VimspectorToggleBreakpoint +nmap d\ VimspectorStepOver +nmap d] VimspectorStepInto +nmap d[ VimspectorStepOut +nmap di VimspectorBalloonEval +"xmap di VimspectorBalloonEval +nmap d, VimspectorUpFrame +nmap d. VimspectorDownFrame +nmap db VimspectorBreakpoints +nmap dp VimspectorContinue +nmap ,d VimspectorLaunch +" }}} + From 93c141f95c1a2b5445d5ee5294245a94d25ecd8a Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Fri, 28 Mar 2025 14:06:46 -0400 Subject: [PATCH 6/7] Change vim file names --- homes/ngogober/home.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/homes/ngogober/home.nix b/homes/ngogober/home.nix index fda53bf..e6004db 100644 --- a/homes/ngogober/home.nix +++ b/homes/ngogober/home.nix @@ -19,8 +19,9 @@ file = { ".vimrc".source = ./vim/.vimrc; - ".vim/plugins.vim".source = ./vim/plugins.vim; + ".vim/vim_plugins.vim".source = ./vim/vim_plugins.vim; ".vim/common.vim".source = ./vim/common.vim; + ".vim/base.vim".source = ./vim/base.vim; }; }; } From cd543c9b75c57d2b4c9c79cffd521b90a204c901 Mon Sep 17 00:00:00 2001 From: Nodar Gogoberidze Date: Fri, 28 Mar 2025 15:42:45 -0400 Subject: [PATCH 7/7] Fix it --- homes/ngogober/vim/.vimrc | 4 ++-- homes/ngogober/vim/common.vim | 2 +- homes/ngogober/vim/nvim_init.vim | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/homes/ngogober/vim/.vimrc b/homes/ngogober/vim/.vimrc index e3f1a36..23457c1 100644 --- a/homes/ngogober/vim/.vimrc +++ b/homes/ngogober/vim/.vimrc @@ -1,5 +1,5 @@ " do `source ~/superhome/config/vim/.vimrc` in ~/.vimrc -source ~/superhome/config/vim/common.vim +source ~/.vim/common.vim " ':set' vs 'set' " https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading @@ -13,7 +13,7 @@ source ~/superhome/config/vim/common.vim " Vim-specific Settings -------------------------------------------------------- {{{ -source ~/superhome/config/vim/vim_plugins.vim +source ~/.vim/vim_plugins.vim " }}} diff --git a/homes/ngogober/vim/common.vim b/homes/ngogober/vim/common.vim index 64129e9..3168b27 100644 --- a/homes/ngogober/vim/common.vim +++ b/homes/ngogober/vim/common.vim @@ -1,6 +1,6 @@ " common to vim (~/.vimrc vi .vimrc) neovim (~/.config/nvim/init.vim via " nvim_init.vim) -source ~/superhome/config/vim/base.vim +source ~/.vim/base.vim " ':set' vs 'set' " https://vi.stackexchange.com/questions/6778/what-is-the-difference-between-set-and-set-commands-with-or-without-a-leading diff --git a/homes/ngogober/vim/nvim_init.vim b/homes/ngogober/vim/nvim_init.vim index 86faabc..a98d8b8 100644 --- a/homes/ngogober/vim/nvim_init.vim +++ b/homes/ngogober/vim/nvim_init.vim @@ -1,12 +1,12 @@ " do `source ~/superhome/config/vim/nvim_init.vim` in ~/.config/nvim/init.vim if exists('g:vscode') - source ~/superhome/config/vim/base.vim + source ~/.vim/base.vim else " ordinary Neovim stuff set runtimepath^=~/.vim runtimepath+=~/.vim/after let &packpath = &runtimepath - source ~/superhome/config/vim/common.vim + source ~/.vim/common.vim end