diff --git a/.gitignore b/.gitignore index 28ecd8b..5b47485 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ plugged/ dotfiles/.config/tmux/serious +library/ diff --git a/dotfiles/.config/fish/conf.d/fish-fastdir_init.fish b/dotfiles/.config/fish/conf.d/fish-fastdir_init.fish new file mode 100644 index 0000000..fc12942 --- /dev/null +++ b/dotfiles/.config/fish/conf.d/fish-fastdir_init.fish @@ -0,0 +1,17 @@ +function ..; cd ..; end +function ...; cd ../..; end +function ....; cd ../../..; end +function .....; cd ../../../..; end + +function d; __fastdir_dirhist -l -n; end +abbr -- - 'cd -' + +function 1; __fastdir_cd_num 1; end +function 2; __fastdir_cd_num 2; end +function 3; __fastdir_cd_num 3; end +function 4; __fastdir_cd_num 4; end +function 5; __fastdir_cd_num 5; end +function 6; __fastdir_cd_num 6; end +function 7; __fastdir_cd_num 7; end +function 8; __fastdir_cd_num 8; end +function 9; __fastdir_cd_num 9; end diff --git a/dotfiles/.config/fish/config.fish b/dotfiles/.config/fish/config.fish index 4613c8e..f8c8113 100644 --- a/dotfiles/.config/fish/config.fish +++ b/dotfiles/.config/fish/config.fish @@ -29,6 +29,19 @@ if type rg &> /dev/null # Use Ripgrep (Faster than Grep) set FZF_DEFAULT_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/"' set FZF_CTRL_T_COMMAND 'rg --files --hidden --follow --glob "!.git/" --glob "!plugged/" $dir' end +# Alt-c for directory history +if type d &> /dev/null # Use to fuzzy search directory history + set FZF_CTRL_J_COMMAND "__fastdir_dirhist -l -n | awk -v OFS='%s' '{print \$2}' | awk '!x[\$0]++' | fzf-tmux " +end +# Alt-c for autojump database +set FZF_CTRL_O_COMMAND "bat ~/.local/share/autojump/autojump.txt | sort -nr | fzf-tmux +s | awk -F '\t' '{printf \$2}'" +set FZF_PREVIEW_FILE_CMD "bat" +set FZF_PREVIEW_DIR_CMD "tree" + +bind \cj eval $FZF_CTRL_J_COMMAND +bind \co eval $FZF_CTRL_O_COMMAND + +command -v blsd > /dev/null && export FZF_ALT_C_COMMAND='blsd' #------------------------------------------------------------------------------- # Autojump -> Faster filesystem navigation diff --git a/dotfiles/.config/fish/fisher/fish-fzf/d.fish b/dotfiles/.config/fish/fisher/fish-fzf/d.fish new file mode 100644 index 0000000..68985c1 --- /dev/null +++ b/dotfiles/.config/fish/fisher/fish-fzf/d.fish @@ -0,0 +1,5 @@ +# Defined in /tmp/fish.sM92eA/d.fish @ line 2 +function d + __fastdir_dirhist -l -n | awk -v OFS='%s' '{print $2}' | awk '!x[$0]++' | fzf-tmux +end +#test diff --git a/dotfiles/.config/fish/fishfile b/dotfiles/.config/fish/fishfile index dcda27c..8148c1a 100644 --- a/dotfiles/.config/fish/fishfile +++ b/dotfiles/.config/fish/fishfile @@ -4,3 +4,4 @@ tuvistavie/fish-completion-helpers ~/.config/fish/fisher/fish-utils ~/.config/fish/fisher/fish-audio ~/.config/fish/fisher/fish-fzf +danhper/fish-fastdir diff --git a/dotfiles/.config/fish/functions/__fastdir_cd_num.fish b/dotfiles/.config/fish/functions/__fastdir_cd_num.fish new file mode 100755 index 0000000..be42beb --- /dev/null +++ b/dotfiles/.config/fish/functions/__fastdir_cd_num.fish @@ -0,0 +1,24 @@ +function __fastdir_cd_num + if not count $argv > /dev/null + echo "need directory name" + return 1 + end + + set -l current_dir_num (math (count $dirprev) + 1) + set -l dir_diff (math $argv[1] - $current_dir_num) + + if test $dir_diff -gt 0 + if test $dir_diff -gt (count $dirnext) + set dir_diff (count $dirnext) + end + return (nextd $dir_diff) + else if test $dir_diff -lt 0 + set dir_diff (math 0 - $dir_diff) + if test $dir_diff -gt (count $dirprev) + set dir_diff (count $dirprev) + end + return (prevd $dir_diff) + end + + return 0 +end diff --git a/dotfiles/.config/fish/functions/__fastdir_dirhist.fish b/dotfiles/.config/fish/functions/__fastdir_dirhist.fish new file mode 100644 index 0000000..2ee857b --- /dev/null +++ b/dotfiles/.config/fish/functions/__fastdir_dirhist.fish @@ -0,0 +1,71 @@ +function __fastdir_dirhist --description "Print the current directory history (the back- and fwd- lists)" + if count $argv > /dev/null + switch $argv[1] + case -h --h --he --hel --help + __fish_print_help dirh + return 0 + end + end + + # Avoid set comment + set -l current (command pwd) + set -l separator " " + set -l line_len (math (count $dirprev) + (echo $dirprev $current $dirnext | wc -m) ) + set -l line_num false + if test $line_len -gt $COLUMNS + # Print one entry per line if history is long + set separator "\n" + end + + if count $argv > /dev/null + for i in (seq (count $argv)) + switch $argv[$i] + case '-l' --l --lo --lon --long + set separator "\n" + continue + case '-n' --n --nu --num --numb --numbe --number + set line_num true + continue + case '-*' + printf (_ "%s: Unknown option %s\n" ) nextd $argv[$i] + return 1 + end + end + end + + set -l current_line 0 + + # BSD seq 0 outputs '1 0' instead of nothing + if count $dirprev > /dev/null + for i in (seq (count $dirprev)) + if test $line_num = true + echo -n "$i " + end + echo -n -e $dirprev[$i]$separator + set current_line $i + end + end + + set_color $fish_color_history_current + if test $line_num = true + set current_line (math $current_line + 1) + echo -n "$current_line " + end + echo -n -e $current$separator + set_color normal + + # BSD seq 0 outputs '1 0' instead of nothing + if count $dirnext > /dev/null + for i in (seq (echo (count $dirnext)) -1 1) + if test $line_num = true + set -l line (math (count $dirnext) - $i + $current_line + 1) + echo -n "$line " + end + echo -n -e $dirnext[$i]$separator + end + end + + if test $separator != "\n" + echo + end +end diff --git a/dotfiles/.config/fish/functions/d.fish b/dotfiles/.config/fish/functions/d.fish new file mode 120000 index 0000000..de39a74 --- /dev/null +++ b/dotfiles/.config/fish/functions/d.fish @@ -0,0 +1 @@ +/home/ygg/.config/fish/fisher/fish-fzf/d.fish \ No newline at end of file diff --git a/dotfiles/.config/fish/functions/fish_prompt.fish b/dotfiles/.config/fish/functions/fish_prompt.fish index 06e2ce6..bf6673c 120000 --- a/dotfiles/.config/fish/functions/fish_prompt.fish +++ b/dotfiles/.config/fish/functions/fish_prompt.fish @@ -1 +1 @@ -/home/ygg/.local/share/omf/themes/serious/fish_prompt.fish \ No newline at end of file +/home/ygg/.local/share/omf/themes/gentoo/fish_prompt.fish \ No newline at end of file diff --git a/dotfiles/.config/fish/functions/fzf-tmux b/dotfiles/.config/fish/functions/fzf-tmux new file mode 100644 index 0000000..e69de29 diff --git a/dotfiles/.config/nvim/.gitignore b/dotfiles/.config/nvim/.gitignore new file mode 100644 index 0000000..06c50a6 --- /dev/null +++ b/dotfiles/.config/nvim/.gitignore @@ -0,0 +1,2 @@ +.netrwhist +remote/ diff --git a/dotfiles/.config/nvim/after b/dotfiles/.config/nvim/after new file mode 120000 index 0000000..a216d70 --- /dev/null +++ b/dotfiles/.config/nvim/after @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/after \ No newline at end of file diff --git a/dotfiles/.config/nvim/after/syntax/c.vim b/dotfiles/.config/nvim/after/syntax/c.vim deleted file mode 100644 index 6e99ae0..0000000 --- a/dotfiles/.config/nvim/after/syntax/c.vim +++ /dev/null @@ -1,284 +0,0 @@ -" Vim syntax file -" Language: C Additions -" Maintainer: Mikhail Wolfson -" URL: http://web.mit.edu/wolfsonm -" Last Change: 2010 Dec. 3 -" Version: 0.4 -" -" Changelog: -" 0.4 - updates and fixes to cDelimiter to fix break with foldmethod=syntax, -" entirely suggested and solved by Ivan Freitas -" -" 0.3 - updates and fixes to cUserFunctionPointer, thanks to -" Alexei -" 0.2 - change [] to operator -" 0.1 - initial upload, modification from vimscript#1201, Extended c.vim - - -" Common ANSI-standard functions -syn keyword cAnsiFunction MULU_ DIVU_ MODU_ MUL_ DIV_ MOD_ -syn keyword cAnsiFunction main typeof -syn keyword cAnsiFunction open close read write lseek dup dup2 -syn keyword cAnsiFunction fcntl ioctl -syn keyword cAnsiFunction wctrans towctrans towupper -syn keyword cAnsiFunction towlower wctype iswctype -syn keyword cAnsiFunction iswxdigit iswupper iswspace -syn keyword cAnsiFunction iswpunct iswprint iswlower -syn keyword cAnsiFunction iswgraph iswdigit iswcntrl -syn keyword cAnsiFunction iswalpha iswalnum wcsrtombs -syn keyword cAnsiFunction mbsrtowcs wcrtomb mbrtowc -syn keyword cAnsiFunction mbrlen mbsinit wctob -syn keyword cAnsiFunction btowc wcsfxtime wcsftime -syn keyword cAnsiFunction wmemset wmemmove wmemcpy -syn keyword cAnsiFunction wmemcmp wmemchr wcstok -syn keyword cAnsiFunction wcsstr wcsspn wcsrchr -syn keyword cAnsiFunction wcspbrk wcslen wcscspn -syn keyword cAnsiFunction wcschr wcsxfrm wcsncmp -syn keyword cAnsiFunction wcscoll wcscmp wcsncat -syn keyword cAnsiFunction wcscat wcsncpy wcscpy -syn keyword cAnsiFunction wcstoull wcstoul wcstoll -syn keyword cAnsiFunction wcstol wcstold wcstof -syn keyword cAnsiFunction wcstod ungetwc putwchar -syn keyword cAnsiFunction putwc getwchar getwc -syn keyword cAnsiFunction fwide fputws fputwc -syn keyword cAnsiFunction fgetws fgetwc wscanf -syn keyword cAnsiFunction wprintf vwscanf vwprintf -syn keyword cAnsiFunction vswscanf vswprintf vfwscanf -syn keyword cAnsiFunction vfwprintf swscanf swprintf -syn keyword cAnsiFunction fwscanf fwprintf zonetime -syn keyword cAnsiFunction strfxtime strftime localtime -syn keyword cAnsiFunction gmtime ctime asctime -syn keyword cAnsiFunction time mkxtime mktime -syn keyword cAnsiFunction difftime clock strlen -syn keyword cAnsiFunction strerror memset strtok -syn keyword cAnsiFunction strstr strspn strrchr -syn keyword cAnsiFunction strpbrk strcspn strchr -syn keyword cAnsiFunction memchr strxfrm strncmp -syn keyword cAnsiFunction strcoll strcmp memcmp -syn keyword cAnsiFunction strncat strcat strncpy -syn keyword cAnsiFunction strcpy memmove memcpy -syn keyword cAnsiFunction wcstombs mbstowcs wctomb -syn keyword cAnsiFunction mbtowc mblen lldiv -syn keyword cAnsiFunction ldiv div llabs -syn keyword cAnsiFunction labs abs qsort -syn keyword cAnsiFunction bsearch system getenv -syn keyword cAnsiFunction exit atexit abort -syn keyword cAnsiFunction realloc malloc free -syn keyword cAnsiFunction calloc srand rand -syn keyword cAnsiFunction strtoull strtoul strtoll -syn keyword cAnsiFunction strtol strtold strtof -syn keyword cAnsiFunction strtod atoll atol -syn keyword cAnsiFunction atoi atof perror -syn keyword cAnsiFunction ferror feof clearerr -syn keyword cAnsiFunction rewind ftell fsetpos -syn keyword cAnsiFunction fseek fgetpos fwrite -syn keyword cAnsiFunction fread ungetc puts -syn keyword cAnsiFunction putchar putc gets -syn keyword cAnsiFunction getchar getc fputs -syn keyword cAnsiFunction fputc fgets fgetc -syn keyword cAnsiFunction vsscanf vsprintf vsnprintf -syn keyword cAnsiFunction vscanf vprintf vfscanf -syn keyword cAnsiFunction vfprintf sscanf sprintf -syn keyword cAnsiFunction snprintf scanf printf -syn keyword cAnsiFunction fscanf fprintf setvbuf -syn keyword cAnsiFunction setbuf freopen fopen -syn keyword cAnsiFunction fflush fclose tmpnam -syn keyword cAnsiFunction tmpfile rename remove -syn keyword cAnsiFunction offsetof va_start va_end -syn keyword cAnsiFunction va_copy va_arg raise signal -syn keyword cAnsiFunction longjmp setjmp isunordered -syn keyword cAnsiFunction islessgreater islessequal isless -syn keyword cAnsiFunction isgreaterequal isgreater fmal -syn keyword cAnsiFunction fmaf fma fminl -syn keyword cAnsiFunction fminf fmin fmaxl -syn keyword cAnsiFunction fmaxf fmax fdiml -syn keyword cAnsiFunction fdimf fdim nextafterxl -syn keyword cAnsiFunction nextafterxf nextafterx nextafterl -syn keyword cAnsiFunction nextafterf nextafter nanl -syn keyword cAnsiFunction nanf nan copysignl -syn keyword cAnsiFunction copysignf copysign remquol -syn keyword cAnsiFunction remquof remquo remainderl -syn keyword cAnsiFunction remainderf remainder fmodl -syn keyword cAnsiFunction fmodf fmod truncl -syn keyword cAnsiFunction truncf trunc llroundl -syn keyword cAnsiFunction llroundf llround lroundl -syn keyword cAnsiFunction lroundf lround roundl -syn keyword cAnsiFunction roundf round llrintl -syn keyword cAnsiFunction llrintf llrint lrintl -syn keyword cAnsiFunction lrintf lrint rintl -syn keyword cAnsiFunction rintf rint nearbyintl -syn keyword cAnsiFunction nearbyintf nearbyint floorl -syn keyword cAnsiFunction floorf floor ceill -syn keyword cAnsiFunction ceilf ceil tgammal -syn keyword cAnsiFunction tgammaf tgamma lgammal -syn keyword cAnsiFunction lgammaf lgamma erfcl -syn keyword cAnsiFunction erfcf erfc erfl -syn keyword cAnsiFunction erff erf sqrtl -syn keyword cAnsiFunction sqrtf sqrt powl -syn keyword cAnsiFunction powf pow hypotl -syn keyword cAnsiFunction hypotf hypot fabsl -syn keyword cAnsiFunction fabsf fabs cbrtl -syn keyword cAnsiFunction cbrtf cbrt scalblnl -syn keyword cAnsiFunction scalblnf scalbln scalbnl -syn keyword cAnsiFunction scalbnf scalbn modfl -syn keyword cAnsiFunction modff modf logbl -syn keyword cAnsiFunction logbf logb log2l -syn keyword cAnsiFunction log2f log2 log1pl -syn keyword cAnsiFunction log1pf log1p log10l -syn keyword cAnsiFunction log10f log10 logl -syn keyword cAnsiFunction logf log ldexpl -syn keyword cAnsiFunction ldexpf ldexp ilogbl -syn keyword cAnsiFunction ilogbf ilogb frexpl -syn keyword cAnsiFunction frexpf frexp expm1l -syn keyword cAnsiFunction expm1f expm1 exp2l -syn keyword cAnsiFunction exp2f exp2 expl -syn keyword cAnsiFunction expf exp tanhl -syn keyword cAnsiFunction tanhf tanh sinhl -syn keyword cAnsiFunction sinhf sinh coshl -syn keyword cAnsiFunction coshf cosh atanhl -syn keyword cAnsiFunction atanhf atanh asinhl -syn keyword cAnsiFunction asinhf asinh acoshl -syn keyword cAnsiFunction acoshf acosh tanl -syn keyword cAnsiFunction tanf tan sinl -syn keyword cAnsiFunction sinf sin cosl -syn keyword cAnsiFunction cosf cos atan2l -syn keyword cAnsiFunction atan2f atan2 atanl -syn keyword cAnsiFunction atanf atan asinl -syn keyword cAnsiFunction asinf asin acosl -syn keyword cAnsiFunction acosf acos signbit -syn keyword cAnsiFunction isnormal isnan isinf -syn keyword cAnsiFunction isfinite fpclassify localeconv -syn keyword cAnsiFunction setlocale wcstoumax wcstoimax -syn keyword cAnsiFunction strtoumax strtoimax feupdateenv -syn keyword cAnsiFunction fesetenv feholdexcept fegetenv -syn keyword cAnsiFunction fesetround fegetround fetestexcept -syn keyword cAnsiFunction fesetexceptflag feraiseexcept fegetexceptflag -syn keyword cAnsiFunction feclearexcept toupper tolower -syn keyword cAnsiFunction isxdigit isupper isspace -syn keyword cAnsiFunction ispunct isprint islower -syn keyword cAnsiFunction isgraph isdigit iscntrl -syn keyword cAnsiFunction isalpha isalnum creall -syn keyword cAnsiFunction crealf creal cprojl -syn keyword cAnsiFunction cprojf cproj conjl -syn keyword cAnsiFunction conjf conj cimagl -syn keyword cAnsiFunction cimagf cimag cargl -syn keyword cAnsiFunction cargf carg csqrtl -syn keyword cAnsiFunction csqrtf csqrt cpowl -syn keyword cAnsiFunction cpowf cpow cabsl -syn keyword cAnsiFunction cabsf cabs clogl -syn keyword cAnsiFunction clogf clog cexpl -syn keyword cAnsiFunction cexpf cexp ctanhl -syn keyword cAnsiFunction ctanhf ctanh csinhl -syn keyword cAnsiFunction csinhf csinh ccoshl -syn keyword cAnsiFunction ccoshf ccosh catanhl -syn keyword cAnsiFunction catanhf catanh casinhl -syn keyword cAnsiFunction casinhf casinh cacoshl -syn keyword cAnsiFunction cacoshf cacosh ctanl -syn keyword cAnsiFunction ctanf ctan csinl -syn keyword cAnsiFunction csinf csin ccosl -syn keyword cAnsiFunction ccosf ccos catanl -syn keyword cAnsiFunction catanf catan casinl -syn keyword cAnsiFunction casinf casin cacosl -syn keyword cAnsiFunction cacosf cacos assert -syn keyword cAnsiFunction UINTMAX_C INTMAX_C UINT64_C -syn keyword cAnsiFunction UINT32_C UINT16_C UINT8_C -syn keyword cAnsiFunction INT64_C INT32_C INT16_C INT8_C - -" Common ANSI-standard Names -syn keyword cAnsiName PRId8 PRIi16 PRIo32 PRIu64 -syn keyword cAnsiName PRId16 PRIi32 PRIo64 PRIuLEAST8 -syn keyword cAnsiName PRId32 PRIi64 PRIoLEAST8 PRIuLEAST16 -syn keyword cAnsiName PRId64 PRIiLEAST8 PRIoLEAST16 PRIuLEAST32 -syn keyword cAnsiName PRIdLEAST8 PRIiLEAST16 PRIoLEAST32 PRIuLEAST64 -syn keyword cAnsiName PRIdLEAST16 PRIiLEAST32 PRIoLEAST64 PRIuFAST8 -syn keyword cAnsiName PRIdLEAST32 PRIiLEAST64 PRIoFAST8 PRIuFAST16 -syn keyword cAnsiName PRIdLEAST64 PRIiFAST8 PRIoFAST16 PRIuFAST32 -syn keyword cAnsiName PRIdFAST8 PRIiFAST16 PRIoFAST32 PRIuFAST64 -syn keyword cAnsiName PRIdFAST16 PRIiFAST32 PRIoFAST64 PRIuMAX -syn keyword cAnsiName PRIdFAST32 PRIiFAST64 PRIoMAX PRIuPTR -syn keyword cAnsiName PRIdFAST64 PRIiMAX PRIoPTR PRIx8 -syn keyword cAnsiName PRIdMAX PRIiPTR PRIu8 PRIx16 -syn keyword cAnsiName PRIdPTR PRIo8 PRIu16 PRIx32 -syn keyword cAnsiName PRIi8 PRIo16 PRIu32 PRIx64 - -syn keyword cAnsiName PRIxLEAST8 SCNd8 SCNiFAST32 SCNuLEAST32 -syn keyword cAnsiName PRIxLEAST16 SCNd16 SCNiFAST64 SCNuLEAST64 -syn keyword cAnsiName PRIxLEAST32 SCNd32 SCNiMAX SCNuFAST8 -syn keyword cAnsiName PRIxLEAST64 SCNd64 SCNiPTR SCNuFAST16 -syn keyword cAnsiName PRIxFAST8 SCNdLEAST8 SCNo8 SCNuFAST32 -syn keyword cAnsiName PRIxFAST16 SCNdLEAST16 SCNo16 SCNuFAST64 -syn keyword cAnsiName PRIxFAST32 SCNdLEAST32 SCNo32 SCNuMAX -syn keyword cAnsiName PRIxFAST64 SCNdLEAST64 SCNo64 SCNuPTR -syn keyword cAnsiName PRIxMAX SCNdFAST8 SCNoLEAST8 SCNx8 -syn keyword cAnsiName PRIxPTR SCNdFAST16 SCNoLEAST16 SCNx16 -syn keyword cAnsiName PRIX8 SCNdFAST32 SCNoLEAST32 SCNx32 -syn keyword cAnsiName PRIX16 SCNdFAST64 SCNoLEAST64 SCNx64 -syn keyword cAnsiName PRIX32 SCNdMAX SCNoFAST8 SCNxLEAST8 -syn keyword cAnsiName PRIX64 SCNdPTR SCNoFAST16 SCNxLEAST16 -syn keyword cAnsiName PRIXLEAST8 SCNi8 SCNoFAST32 SCNxLEAST32 -syn keyword cAnsiName PRIXLEAST16 SCNi16 SCNoFAST64 SCNxLEAST64 -syn keyword cAnsiName PRIXLEAST32 SCNi32 SCNoMAX SCNxFAST8 -syn keyword cAnsiName PRIXLEAST64 SCNi64 SCNoPTR SCNxFAST16 -syn keyword cAnsiName PRIXFAST8 SCNiLEAST8 SCNu8 SCNxFAST32 -syn keyword cAnsiName PRIXFAST16 SCNiLEAST16 SCNu16 SCNxFAST64 -syn keyword cAnsiName PRIXFAST32 SCNiLEAST32 SCNu32 SCNxMAX -syn keyword cAnsiName PRIXFAST64 SCNiLEAST64 SCNu64 SCNxPTR -syn keyword cAnsiName PRIXMAX SCNiFAST8 SCNuLEAST8 -syn keyword cAnsiName PRIXPTR SCNiFAST16 SCNuLEAST16 - -syn keyword cAnsiName errno environ - -syn keyword cAnsiName STDC CX_LIMITED_RANGE -syn keyword cAnsiName STDC FENV_ACCESS -syn keyword cAnsiName STDC FP_CONTRACT - -syn keyword cAnsiName AF_INET SOCK_STREAM INADDR_ANY AF_INET -syn keyword cAnsiName SOL_SOCKET SO_REUSEPORT SO_REUSEADDR -syn keyword cAnsiName SO_RCVTIMEO IPPROTO_TCP TCP_NODELAY -syn keyword cAnsiName SOCK_DGRAM POLLIN - -syn keyword cAnsiName and bitor not_eq xor -syn keyword cAnsiName and_eq compl or xor_eq -syn keyword cAnsiName bitand not or_eq - -hi def link cAnsiFunction cFunction -hi def link cAnsiName cIdentifier - -" Operators -syn match cOperator "\(<<\|>>\|[-+*/%&^|<>!=]\)=" -syn match cOperator "<<\|>>\|&&\|||\|++\|--\|->" -syn match cOperator "[.!~*&%<>^|=,+-]" -syn match cOperator "/[^/*=]"me=e-1 -syn match cOperator "/$" -syn match cOperator "&&\|||" -syn match cOperator "[][]" - -" Preprocs -syn keyword cDefined defined contained containedin=cDefine -hi def link cDefined cDefine - -" Functions -syn match cUserFunction "\<\h\w*\>\(\s\|\n\)*("me=e-1 contains=cType,cDelimiter,cDefine -syn match cUserFunctionPointer "(\s*\*\s*\h\w*\s*)\(\s\|\n\)*(" contains=cDelimiter,cOperator - -hi def link cUserFunction cFunction -hi def link cUserFunctionPointer cFunction - -" Delimiters -syn match cDelimiter "[();\\]" -" foldmethod=syntax fix, courtesy of Ivan Freitas -syn match cBraces display "[{}]" - - -" Booleans -syn keyword cBoolean true false TRUE FALSE - - -" Links -hi def link cFunction Function -hi def link cIdentifier Identifier -hi def link cDelimiter Delimiter -" foldmethod=syntax fix, courtesy of Ivan Freitas -hi def link cBraces Delimiter -hi def link cBoolean Boolean - diff --git a/dotfiles/.config/nvim/after/syntax/cpp.vim b/dotfiles/.config/nvim/after/syntax/cpp.vim deleted file mode 100644 index 07d6ed4..0000000 --- a/dotfiles/.config/nvim/after/syntax/cpp.vim +++ /dev/null @@ -1,2092 +0,0 @@ -" Vim syntax file -" Language: C++ Additions -" Maintainer: Jon Haggblad -" URL: http://www.haeggblad.com -" Last Change: 1 Feb 2018 -" Version: 0.6 -" Changelog: -" 0.1 - initial version. -" 0.2 - C++14 -" 0.3 - Incorporate lastest changes from Mizuchi/STL-Syntax -" 0.4 - Add template function highlight -" 0.5 - Redo template function highlight to be more robust. Add options. -" 0.6 - more C++14, C++17, library concepts -" -" Additional Vim syntax highlighting for C++ (including C++11/14/17) -" -" This file contains additional syntax highlighting that I use for C++11/14 -" development in Vim. Compared to the standard syntax highlighting for C++ it -" adds highlighting of (user defined) functions and the containers and types -" in the standard library / boost. -" -" Based on: -" http://stackoverflow.com/q/736701 -" http://www.vim.org/scripts/script.php?script_id=4293 -" http://www.vim.org/scripts/script.php?script_id=2224 -" http://www.vim.org/scripts/script.php?script_id=1640 -" http://www.vim.org/scripts/script.php?script_id=3064 - - -" ----------------------------------------------------------------------------- -" Highlight Class and Function names. -" -" Based on the discussion in: http://stackoverflow.com/q/736701 -" ----------------------------------------------------------------------------- - -" Functions -if !exists('g:cpp_no_function_highlight') - syn match cCustomParen transparent "(" contains=cParen contains=cCppParen - syn match cCustomFunc "\w\+\s*(\@=" - hi def link cCustomFunc Function -endif - -" Class and namespace scope -if exists('g:cpp_class_scope_highlight') && g:cpp_class_scope_highlight - syn match cCustomScope "::" - syn match cCustomClass "\w\+\s*::" - \ contains=cCustomScope - hi def link cCustomClass Function -endif - -" Clear cppStructure and replace "class" and/or "template" with matches -" based on user configuration -let s:needs_cppstructure_match = 0 -if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight - let s:needs_cppstructure_match += 1 -endif -if exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_template_highlight - let s:needs_cppstructure_match += 2 -endif - -syn clear cppStructure -if s:needs_cppstructure_match == 0 - syn keyword cppStructure typename namespace template class -elseif s:needs_cppstructure_match == 1 - syn keyword cppStructure typename namespace template -elseif s:needs_cppstructure_match == 2 - syn keyword cppStructure typename namespace class -elseif s:needs_cppstructure_match == 3 - syn keyword cppStructure typename namespace -endif -unlet s:needs_cppstructure_match - - -" Class name declaration -if exists('g:cpp_class_decl_highlight') && g:cpp_class_decl_highlight - syn match cCustomClassKey "\" - hi def link cCustomClassKey cppStructure - - " Clear cppAccess entirely and redefine as matches - syn clear cppAccess - syn match cCustomAccessKey "\" - syn match cCustomAccessKey "\" - syn match cCustomAccessKey "\" - hi def link cCustomAccessKey cppAccess - - " Match the parts of a class declaration - syn match cCustomClassName "\" - \ contains=cCustomClassKey - syn match cCustomClassName "\" - \ contains=cCustomAccessKey - syn match cCustomClassName "\" - \ contains=cCustomAccessKey - syn match cCustomClassName "\" - \ contains=cCustomAccessKey - hi def link cCustomClassName Function -endif -" Template functions. -" Naive implementation that sorta works in most cases. Should correctly -" highlight everything in test/color2.cpp -if exists('g:cpp_experimental_simple_template_highlight') && g:cpp_experimental_simple_template_highlight - syn region cCustomAngleBrackets matchgroup=AngleBracketContents start="\v%(" contains=cCustomAngleBrackets - syn match cCustomTemplateFunc "\w\+\s*<.*>(\@=" contains=cCustomBrack,cCustomAngleBrackets - hi def link cCustomTemplateFunc Function - -" Template functions (alternative faster parsing). -" More sophisticated implementation that should be faster but doesn't always -" correctly highlight inside template arguments. Should correctly -" highlight everything in test/color.cpp -elseif exists('g:cpp_experimental_template_highlight') && g:cpp_experimental_template_highlight - - syn match cCustomAngleBracketStart "<\_[^;()]\{-}>" contained - \ contains=cCustomAngleBracketStart,cCustomAngleBracketEnd - hi def link cCustomAngleBracketStart cCustomAngleBracketContent - - syn match cCustomAngleBracketEnd ">\_[^<>;()]\{-}>" contained - \ contains=cCustomAngleBracketEnd - hi def link cCustomAngleBracketEnd cCustomAngleBracketContent - - syn match cCustomTemplateFunc "\<\l\w*\s*<\_[^;()]\{-}>(\@="hs=s,he=e-1 - \ contains=cCustomAngleBracketStart - hi def link cCustomTemplateFunc cCustomFunc - - syn match cCustomTemplateClass "\<\w\+\s*<\_[^;()]\{-}>" - \ contains=cCustomAngleBracketStart,cCustomTemplateFunc - hi def link cCustomTemplateClass cCustomClass - - syn match cCustomTemplate "\" - hi def link cCustomTemplate cppStructure - syn match cTemplateDeclare "\" - \ contains=cppStructure,cCustomTemplate,cCustomClassKey,cCustomAngleBracketStart - - " Remove 'operator' from cppOperator and use a custom match - syn clear cppOperator - syn keyword cppOperator typeid - syn keyword cppOperator and bitor or xor compl bitand and_eq or_eq xor_eq not not_eq - - syn match cCustomOperator "\" - hi def link cCustomOperator cppStructure - syn match cTemplateOperatorDeclare "\[<>]=\?" - \ contains=cppOperator,cCustomOperator,cCustomAngleBracketStart -endif - -" Alternative syntax that is used in: -" http://www.vim.org/scripts/script.php?script_id=3064 -"syn match cUserFunction "\<\h\w*\>\(\s\|\n\)*("me=e-1 contains=cType,cDelimiter,cDefine -"hi def link cCustomFunc Function - -" Cluster for all the stdlib functions defined below -syn cluster cppSTLgroup contains=cppSTLfunction,cppSTLfunctional,cppSTLconstant,cppSTLnamespace,cppSTLtype,cppSTLexception,cppSTLiterator,cppSTLiterator_tag,cppSTLenum,cppSTLios,cppSTLcast - - -" ----------------------------------------------------------------------------- -" Standard library types and functions. -" -" Mainly based on the excellent STL Syntax vim script by -" Mizuchi -" http://www.vim.org/scripts/script.php?script_id=4293 -" which in turn is based on the scripts -" http://www.vim.org/scripts/script.php?script_id=2224 -" http://www.vim.org/scripts/script.php?script_id=1640 -" ----------------------------------------------------------------------------- - -syntax keyword cppSTLconstant badbit -syntax keyword cppSTLconstant cerr -syntax keyword cppSTLconstant cin -syntax keyword cppSTLconstant clog -syntax keyword cppSTLconstant cout -syntax keyword cppSTLconstant digits -syntax keyword cppSTLconstant digits10 -syntax keyword cppSTLconstant eofbit -syntax keyword cppSTLconstant failbit -syntax keyword cppSTLconstant goodbit -syntax keyword cppSTLconstant has_denorm -syntax keyword cppSTLconstant has_denorm_loss -syntax keyword cppSTLconstant has_infinity -syntax keyword cppSTLconstant has_quiet_NaN -syntax keyword cppSTLconstant has_signaling_NaN -syntax keyword cppSTLconstant is_bounded -syntax keyword cppSTLconstant is_exact -syntax keyword cppSTLconstant is_iec559 -syntax keyword cppSTLconstant is_integer -syntax keyword cppSTLconstant is_modulo -syntax keyword cppSTLconstant is_signed -syntax keyword cppSTLconstant is_specialized -syntax keyword cppSTLconstant max_digits10 -syntax keyword cppSTLconstant max_exponent -syntax keyword cppSTLconstant max_exponent10 -syntax keyword cppSTLconstant min_exponent -syntax keyword cppSTLconstant min_exponent10 -syntax keyword cppSTLconstant nothrow -syntax keyword cppSTLconstant npos -syntax keyword cppSTLconstant radix -syntax keyword cppSTLconstant round_style -syntax keyword cppSTLconstant tinyness_before -syntax keyword cppSTLconstant traps -syntax keyword cppSTLconstant wcerr -syntax keyword cppSTLconstant wcin -syntax keyword cppSTLconstant wclog -syntax keyword cppSTLconstant wcout -syntax keyword cppSTLexception bad_alloc -syntax keyword cppSTLexception bad_array_new_length -syntax keyword cppSTLexception bad_exception -syntax keyword cppSTLexception bad_typeid bad_cast -syntax keyword cppSTLexception domain_error -syntax keyword cppSTLexception exception -syntax keyword cppSTLexception invalid_argument -syntax keyword cppSTLexception length_error -syntax keyword cppSTLexception logic_error -syntax keyword cppSTLexception out_of_range -syntax keyword cppSTLexception overflow_error -syntax keyword cppSTLexception range_error -syntax keyword cppSTLexception runtime_error -syntax keyword cppSTLexception underflow_error -syntax keyword cppSTLfunction abort -syntax keyword cppSTLfunction abs -syntax keyword cppSTLfunction accumulate -syntax keyword cppSTLfunction acos -syntax keyword cppSTLfunction adjacent_difference -syntax keyword cppSTLfunction adjacent_find -syntax keyword cppSTLfunction adjacent_find_if -syntax keyword cppSTLfunction advance -syntax keyword cppSTLfunctional binary_function -syntax keyword cppSTLfunctional binary_negate -syntax keyword cppSTLfunctional bit_and -syntax keyword cppSTLfunctional bit_not -syntax keyword cppSTLfunctional bit_or -syntax keyword cppSTLfunctional bit_xor -syntax keyword cppSTLfunctional divides -syntax keyword cppSTLfunctional equal_to -syntax keyword cppSTLfunctional greater -syntax keyword cppSTLfunctional greater_equal -syntax keyword cppSTLfunctional less -syntax keyword cppSTLfunctional less_equal -syntax keyword cppSTLfunctional logical_and -syntax keyword cppSTLfunctional logical_not -syntax keyword cppSTLfunctional logical_or -syntax keyword cppSTLfunctional minus -syntax keyword cppSTLfunctional modulus -syntax keyword cppSTLfunctional multiplies -syntax keyword cppSTLfunctional negate -syntax keyword cppSTLfunctional not_equal_to -syntax keyword cppSTLfunctional plus -syntax keyword cppSTLfunctional unary_function -syntax keyword cppSTLfunctional unary_negate -"syntax keyword cppSTLfunction any -syntax keyword cppSTLfunction append -syntax keyword cppSTLfunction arg -syntax keyword cppSTLfunction asctime -syntax keyword cppSTLfunction asin -syntax keyword cppSTLfunction assert -syntax keyword cppSTLfunction assign -syntax keyword cppSTLfunction at -syntax keyword cppSTLfunction atan -syntax keyword cppSTLfunction atan2 -syntax keyword cppSTLfunction atexit -syntax keyword cppSTLfunction atof -syntax keyword cppSTLfunction atoi -syntax keyword cppSTLfunction atol -syntax keyword cppSTLfunction atoll -syntax keyword cppSTLfunction back -syntax keyword cppSTLfunction back_inserter -syntax keyword cppSTLfunction bad -syntax keyword cppSTLfunction beg -"syntax keyword cppSTLfunction begin -syntax keyword cppSTLfunction binary_compose -syntax keyword cppSTLfunction binary_negate -syntax keyword cppSTLfunction binary_search -syntax keyword cppSTLfunction bind1st -syntax keyword cppSTLfunction bind2nd -syntax keyword cppSTLfunction binder1st -syntax keyword cppSTLfunction binder2nd -syntax keyword cppSTLfunction bsearch -syntax keyword cppSTLfunction calloc -syntax keyword cppSTLfunction capacity -syntax keyword cppSTLfunction ceil -syntax keyword cppSTLfunction clear -syntax keyword cppSTLfunction clearerr -syntax keyword cppSTLfunction clock -syntax keyword cppSTLfunction close -syntax keyword cppSTLfunction compare -syntax keyword cppSTLfunction conj -syntax keyword cppSTLfunction construct -syntax keyword cppSTLfunction copy -syntax keyword cppSTLfunction copy_backward -syntax keyword cppSTLfunction cos -syntax keyword cppSTLfunction cosh -syntax keyword cppSTLfunction count -syntax keyword cppSTLfunction count_if -syntax keyword cppSTLfunction c_str -syntax keyword cppSTLfunction ctime -"syntax keyword cppSTLfunction data -syntax keyword cppSTLfunction denorm_min -syntax keyword cppSTLfunction destroy -syntax keyword cppSTLfunction difftime -syntax keyword cppSTLfunction distance -syntax keyword cppSTLfunction div -syntax keyword cppSTLfunction empty -"syntax keyword cppSTLfunction end -syntax keyword cppSTLfunction eof -syntax keyword cppSTLfunction epsilon -syntax keyword cppSTLfunction equal -syntax keyword cppSTLfunction equal_range -syntax keyword cppSTLfunction erase -syntax keyword cppSTLfunction exit -syntax keyword cppSTLfunction exp -syntax keyword cppSTLfunction fabs -syntax keyword cppSTLfunction fail -syntax keyword cppSTLfunction failure -syntax keyword cppSTLfunction fclose -syntax keyword cppSTLfunction feof -syntax keyword cppSTLfunction ferror -syntax keyword cppSTLfunction fflush -syntax keyword cppSTLfunction fgetc -syntax keyword cppSTLfunction fgetpos -syntax keyword cppSTLfunction fgets -syntax keyword cppSTLfunction fill -syntax keyword cppSTLfunction fill_n -syntax keyword cppSTLfunction find -syntax keyword cppSTLfunction find_end -syntax keyword cppSTLfunction find_first_not_of -syntax keyword cppSTLfunction find_first_of -syntax keyword cppSTLfunction find_if -syntax keyword cppSTLfunction find_last_not_of -syntax keyword cppSTLfunction find_last_of -syntax keyword cppSTLfunction first -syntax keyword cppSTLfunction flags -syntax keyword cppSTLfunction flip -syntax keyword cppSTLfunction floor -syntax keyword cppSTLfunction flush -syntax keyword cppSTLfunction fmod -syntax keyword cppSTLfunction fopen -syntax keyword cppSTLfunction for_each -syntax keyword cppSTLfunction fprintf -syntax keyword cppSTLfunction fputc -syntax keyword cppSTLfunction fputs -syntax keyword cppSTLfunction fread -syntax keyword cppSTLfunction free -syntax keyword cppSTLfunction freopen -syntax keyword cppSTLfunction frexp -syntax keyword cppSTLfunction front -syntax keyword cppSTLfunction fscanf -syntax keyword cppSTLfunction fseek -syntax keyword cppSTLfunction fsetpos -syntax keyword cppSTLfunction ftell -syntax keyword cppSTLfunction fwide -syntax keyword cppSTLfunction fwprintf -syntax keyword cppSTLfunction fwrite -syntax keyword cppSTLfunction fwscanf -syntax keyword cppSTLfunction gcount -syntax keyword cppSTLfunction generate -syntax keyword cppSTLfunction generate_n -syntax keyword cppSTLfunction get -syntax keyword cppSTLfunction get_allocator -syntax keyword cppSTLfunction getc -syntax keyword cppSTLfunction getchar -syntax keyword cppSTLfunction getenv -syntax keyword cppSTLfunction getline -syntax keyword cppSTLfunction gets -syntax keyword cppSTLfunction get_temporary_buffer -syntax keyword cppSTLfunction gmtime -syntax keyword cppSTLfunction good -syntax keyword cppSTLfunction ignore -syntax keyword cppSTLfunction imag -syntax keyword cppSTLfunction in -syntax keyword cppSTLfunction includes -syntax keyword cppSTLfunction infinity -syntax keyword cppSTLfunction inner_product -syntax keyword cppSTLfunction inplace_merge -syntax keyword cppSTLfunction insert -syntax keyword cppSTLfunction inserter -syntax keyword cppSTLfunction ios -syntax keyword cppSTLfunction ios_base -syntax keyword cppSTLfunction iostate -syntax keyword cppSTLfunction iota -syntax keyword cppSTLfunction isalnum -syntax keyword cppSTLfunction isalpha -syntax keyword cppSTLfunction iscntrl -syntax keyword cppSTLfunction isdigit -syntax keyword cppSTLfunction isgraph -syntax keyword cppSTLfunction is_heap -syntax keyword cppSTLfunction islower -syntax keyword cppSTLfunction is_open -syntax keyword cppSTLfunction isprint -syntax keyword cppSTLfunction ispunct -syntax keyword cppSTLfunction isspace -syntax keyword cppSTLfunction isupper -syntax keyword cppSTLfunction isxdigit -syntax keyword cppSTLfunction iterator_category -syntax keyword cppSTLfunction iter_swap -syntax keyword cppSTLfunction jmp_buf -syntax keyword cppSTLfunction key_comp -syntax keyword cppSTLfunction labs -syntax keyword cppSTLfunction ldexp -syntax keyword cppSTLfunction ldiv -syntax keyword cppSTLfunction length -syntax keyword cppSTLfunction lexicographical_compare -syntax keyword cppSTLfunction lexicographical_compare_3way -syntax keyword cppSTLfunction llabs -syntax keyword cppSTLfunction lldiv -syntax keyword cppSTLfunction localtime -syntax keyword cppSTLfunction log -syntax keyword cppSTLfunction log10 -syntax keyword cppSTLfunction longjmp -syntax keyword cppSTLfunction lower_bound -syntax keyword cppSTLfunction make_heap -syntax keyword cppSTLfunction make_pair -syntax keyword cppSTLfunction malloc -syntax keyword cppSTLfunction max -syntax keyword cppSTLfunction max_element -syntax keyword cppSTLfunction max_size -syntax keyword cppSTLfunction memchr -syntax keyword cppSTLfunction memcpy -syntax keyword cppSTLfunction mem_fun -syntax keyword cppSTLfunction mem_fun_ref -syntax keyword cppSTLfunction memmove -syntax keyword cppSTLfunction memset -syntax keyword cppSTLfunction merge -syntax keyword cppSTLfunction min -syntax keyword cppSTLfunction min_element -syntax keyword cppSTLfunction mismatch -syntax keyword cppSTLfunction mktime -syntax keyword cppSTLfunction modf -syntax keyword cppSTLfunction next_permutation -syntax keyword cppSTLfunction none -syntax keyword cppSTLfunction norm -syntax keyword cppSTLfunction not1 -syntax keyword cppSTLfunction not2 -syntax keyword cppSTLfunction nth_element -syntax keyword cppSTLtype numeric_limits -syntax keyword cppSTLfunction open -syntax keyword cppSTLfunction partial_sort -syntax keyword cppSTLfunction partial_sort_copy -syntax keyword cppSTLfunction partial_sum -syntax keyword cppSTLfunction partition -syntax keyword cppSTLfunction peek -syntax keyword cppSTLfunction perror -syntax keyword cppSTLfunction polar -syntax keyword cppSTLfunction pop -syntax keyword cppSTLfunction pop_back -syntax keyword cppSTLfunction pop_front -syntax keyword cppSTLfunction pop_heap -syntax keyword cppSTLfunction pow -syntax keyword cppSTLfunction power -syntax keyword cppSTLfunction precision -syntax keyword cppSTLfunction prev_permutation -syntax keyword cppSTLfunction printf -syntax keyword cppSTLfunction ptr_fun -syntax keyword cppSTLfunction push -syntax keyword cppSTLfunction push_back -syntax keyword cppSTLfunction push_front -syntax keyword cppSTLfunction push_heap -syntax keyword cppSTLfunction put -syntax keyword cppSTLfunction putback -syntax keyword cppSTLfunction putc -syntax keyword cppSTLfunction putchar -syntax keyword cppSTLfunction puts -syntax keyword cppSTLfunction qsort -syntax keyword cppSTLfunction quiet_NaN -syntax keyword cppSTLfunction raise -syntax keyword cppSTLfunction rand -syntax keyword cppSTLfunction random_sample -syntax keyword cppSTLfunction random_sample_n -syntax keyword cppSTLfunction random_shuffle -syntax keyword cppSTLfunction rbegin -syntax keyword cppSTLfunction rdbuf -syntax keyword cppSTLfunction rdstate -syntax keyword cppSTLfunction read -syntax keyword cppSTLfunction real -syntax keyword cppSTLfunction realloc -syntax keyword cppSTLfunction remove -syntax keyword cppSTLfunction remove_copy -syntax keyword cppSTLfunction remove_copy_if -syntax keyword cppSTLfunction remove_if -syntax keyword cppSTLfunction rename -syntax keyword cppSTLfunction rend -syntax keyword cppSTLfunction replace -syntax keyword cppSTLfunction replace_copy -syntax keyword cppSTLfunction replace_copy_if -syntax keyword cppSTLfunction replace_if -syntax keyword cppSTLfunction reserve -syntax keyword cppSTLfunction reset -syntax keyword cppSTLfunction resize -syntax keyword cppSTLfunction return_temporary_buffer -syntax keyword cppSTLfunction reverse -syntax keyword cppSTLfunction reverse_copy -syntax keyword cppSTLfunction rewind -syntax keyword cppSTLfunction rfind -syntax keyword cppSTLfunction rotate -syntax keyword cppSTLfunction rotate_copy -syntax keyword cppSTLfunction round_error -syntax keyword cppSTLfunction scanf -syntax keyword cppSTLfunction search -syntax keyword cppSTLfunction search_n -syntax keyword cppSTLfunction second -syntax keyword cppSTLfunction seekg -syntax keyword cppSTLfunction seekp -syntax keyword cppSTLfunction setbuf -syntax keyword cppSTLfunction set_difference -syntax keyword cppSTLfunction setf -syntax keyword cppSTLfunction set_intersection -syntax keyword cppSTLfunction setjmp -syntax keyword cppSTLfunction setlocale -syntax keyword cppSTLfunction set_new_handler -syntax keyword cppSTLfunction set_symmetric_difference -syntax keyword cppSTLfunction set_union -syntax keyword cppSTLfunction setvbuf -syntax keyword cppSTLfunction signal -syntax keyword cppSTLfunction signaling_NaN -syntax keyword cppSTLfunction sin -syntax keyword cppSTLfunction sinh -"syntax keyword cppSTLfunction size -syntax keyword cppSTLfunction sort -syntax keyword cppSTLfunction sort_heap -syntax keyword cppSTLfunction splice -syntax keyword cppSTLfunction sprintf -syntax keyword cppSTLfunction sqrt -syntax keyword cppSTLfunction srand -syntax keyword cppSTLfunction sscanf -syntax keyword cppSTLfunction stable_partition -syntax keyword cppSTLfunction stable_sort -syntax keyword cppSTLfunction str -syntax keyword cppSTLfunction strcat -syntax keyword cppSTLfunction strchr -syntax keyword cppSTLfunction strcmp -syntax keyword cppSTLfunction strcoll -syntax keyword cppSTLfunction strcpy -syntax keyword cppSTLfunction strcspn -syntax keyword cppSTLfunction strerror -syntax keyword cppSTLfunction strftime -syntax keyword cppSTLfunction string -syntax keyword cppSTLfunction strlen -syntax keyword cppSTLfunction strncat -syntax keyword cppSTLfunction strncmp -syntax keyword cppSTLfunction strncpy -syntax keyword cppSTLfunction strpbrk -syntax keyword cppSTLfunction strrchr -syntax keyword cppSTLfunction strspn -syntax keyword cppSTLfunction strstr -syntax keyword cppSTLfunction strtod -syntax keyword cppSTLfunction strtof -syntax keyword cppSTLfunction strtok -syntax keyword cppSTLfunction strtol -syntax keyword cppSTLfunction strtold -syntax keyword cppSTLfunction strtoll -syntax keyword cppSTLfunction strtoul -syntax keyword cppSTLfunction strxfrm -syntax keyword cppSTLfunction substr -syntax keyword cppSTLfunction swap -syntax keyword cppSTLfunction swap_ranges -syntax keyword cppSTLfunction swprintf -syntax keyword cppSTLfunction swscanf -syntax keyword cppSTLfunction sync_with_stdio -"syntax keyword cppSTLfunction system -syntax keyword cppSTLfunction tan -syntax keyword cppSTLfunction tanh -syntax keyword cppSTLfunction tellg -syntax keyword cppSTLfunction tellp -"syntax keyword cppSTLfunction test -"syntax keyword cppSTLfunction time -syntax keyword cppSTLfunction tmpfile -syntax keyword cppSTLfunction tmpnam -syntax keyword cppSTLfunction tolower -syntax keyword cppSTLfunction top -syntax keyword cppSTLfunction to_string -syntax keyword cppSTLfunction to_ulong -syntax keyword cppSTLfunction toupper -syntax keyword cppSTLfunction to_wstring -syntax keyword cppSTLfunction transform -syntax keyword cppSTLfunction unary_compose -syntax keyword cppSTLfunction unget -syntax keyword cppSTLfunction ungetc -syntax keyword cppSTLfunction uninitialized_copy -syntax keyword cppSTLfunction uninitialized_copy_n -syntax keyword cppSTLfunction uninitialized_fill -syntax keyword cppSTLfunction uninitialized_fill_n -syntax keyword cppSTLfunction unique -syntax keyword cppSTLfunction unique_copy -syntax keyword cppSTLfunction unsetf -syntax keyword cppSTLfunction upper_bound -syntax keyword cppSTLfunction va_arg -syntax keyword cppSTLfunction va_copy -syntax keyword cppSTLfunction va_end -syntax keyword cppSTLfunction value_comp -syntax keyword cppSTLfunction va_start -syntax keyword cppSTLfunction vfprintf -syntax keyword cppSTLfunction vfwprintf -syntax keyword cppSTLfunction vprintf -syntax keyword cppSTLfunction vsprintf -syntax keyword cppSTLfunction vswprintf -syntax keyword cppSTLfunction vwprintf -syntax keyword cppSTLfunction width -syntax keyword cppSTLfunction wprintf -syntax keyword cppSTLfunction write -syntax keyword cppSTLfunction wscanf -syntax keyword cppSTLios boolalpha -syntax keyword cppSTLios dec -syntax keyword cppSTLios defaultfloat -syntax keyword cppSTLios endl -syntax keyword cppSTLios ends -syntax keyword cppSTLios fixed -syntax keyword cppSTLios floatfield -syntax keyword cppSTLios flush -syntax keyword cppSTLios get_money -syntax keyword cppSTLios get_time -syntax keyword cppSTLios hex -syntax keyword cppSTLios hexfloat -syntax keyword cppSTLios internal -syntax keyword cppSTLios noboolalpha -syntax keyword cppSTLios noshowbase -syntax keyword cppSTLios noshowpoint -syntax keyword cppSTLios noshowpos -syntax keyword cppSTLios noskipws -syntax keyword cppSTLios nounitbuf -syntax keyword cppSTLios nouppercase -syntax keyword cppSTLios oct -syntax keyword cppSTLios put_money -syntax keyword cppSTLios put_time -syntax keyword cppSTLios resetiosflags -syntax keyword cppSTLios scientific -syntax keyword cppSTLios setbase -syntax keyword cppSTLios setfill -syntax keyword cppSTLios setiosflags -syntax keyword cppSTLios setprecision -syntax keyword cppSTLios setw -syntax keyword cppSTLios showbase -syntax keyword cppSTLios showpoint -syntax keyword cppSTLios showpos -syntax keyword cppSTLios skipws -syntax keyword cppSTLios unitbuf -syntax keyword cppSTLios uppercase -"syntax keyword cppSTLios ws -syntax keyword cppSTLiterator back_insert_iterator -syntax keyword cppSTLiterator bidirectional_iterator -syntax keyword cppSTLiterator const_iterator -syntax keyword cppSTLiterator const_reverse_iterator -syntax keyword cppSTLiterator forward_iterator -syntax keyword cppSTLiterator front_insert_iterator -syntax keyword cppSTLiterator input_iterator -syntax keyword cppSTLiterator insert_iterator -syntax keyword cppSTLiterator istreambuf_iterator -syntax keyword cppSTLiterator istream_iterator -syntax keyword cppSTLiterator iterator -syntax keyword cppSTLiterator ostream_iterator -syntax keyword cppSTLiterator output_iterator -syntax keyword cppSTLiterator random_access_iterator -syntax keyword cppSTLiterator raw_storage_iterator -syntax keyword cppSTLiterator reverse_bidirectional_iterator -syntax keyword cppSTLiterator reverse_iterator -syntax keyword cppSTLiterator_tag bidirectional_iterator_tag -syntax keyword cppSTLiterator_tag forward_iterator_tag -syntax keyword cppSTLiterator_tag input_iterator_tag -syntax keyword cppSTLiterator_tag output_iterator_tag -syntax keyword cppSTLiterator_tag random_access_iterator_tag -syntax keyword cppSTLnamespace rel_ops -syntax keyword cppSTLnamespace std -syntax keyword cppSTLnamespace experimental -syntax keyword cppSTLtype allocator -syntax keyword cppSTLtype auto_ptr -syntax keyword cppSTLtype basic_filebuf -syntax keyword cppSTLtype basic_fstream -syntax keyword cppSTLtype basic_ifstream -syntax keyword cppSTLtype basic_iostream -syntax keyword cppSTLtype basic_istream -syntax keyword cppSTLtype basic_istringstream -syntax keyword cppSTLtype basic_ofstream -syntax keyword cppSTLtype basic_ostream -syntax keyword cppSTLtype basic_ostringstream -syntax keyword cppSTLtype basic_streambuf -syntax keyword cppSTLtype basic_string -syntax keyword cppSTLtype basic_stringbuf -syntax keyword cppSTLtype basic_stringstream -syntax keyword cppSTLtype binary_compose -syntax keyword cppSTLtype binder1st -syntax keyword cppSTLtype binder2nd -syntax keyword cppSTLtype bitset -syntax keyword cppSTLtype char_traits -syntax keyword cppSTLtype char_type -syntax keyword cppSTLtype const_mem_fun1_t -syntax keyword cppSTLtype const_mem_fun_ref1_t -syntax keyword cppSTLtype const_mem_fun_ref_t -syntax keyword cppSTLtype const_mem_fun_t -syntax keyword cppSTLtype const_pointer -syntax keyword cppSTLtype const_reference -syntax keyword cppSTLtype container_type -syntax keyword cppSTLtype deque -syntax keyword cppSTLtype difference_type -syntax keyword cppSTLtype div_t -syntax keyword cppSTLtype double_t -syntax keyword cppSTLtype filebuf -syntax keyword cppSTLtype first_type -syntax keyword cppSTLtype float_denorm_style -syntax keyword cppSTLtype float_round_style -syntax keyword cppSTLtype float_t -syntax keyword cppSTLtype fstream -syntax keyword cppSTLtype gslice_array -syntax keyword cppSTLtype ifstream -syntax keyword cppSTLtype imaxdiv_t -syntax keyword cppSTLtype indirect_array -syntax keyword cppSTLtype int_type -syntax keyword cppSTLtype ios_base -syntax keyword cppSTLtype iostream -syntax keyword cppSTLtype istream -syntax keyword cppSTLtype istringstream -syntax keyword cppSTLtype istrstream -syntax keyword cppSTLtype iterator_traits -syntax keyword cppSTLtype key_compare -syntax keyword cppSTLtype key_type -syntax keyword cppSTLtype ldiv_t -syntax keyword cppSTLtype list -syntax keyword cppSTLtype lldiv_t -syntax keyword cppSTLtype map -syntax keyword cppSTLtype mapped_type -syntax keyword cppSTLtype mask_array -syntax keyword cppSTLtype mem_fun1_t -syntax keyword cppSTLtype mem_fun_ref1_t -syntax keyword cppSTLtype mem_fun_ref_t -syntax keyword cppSTLtype mem_fun_t -syntax keyword cppSTLtype multimap -syntax keyword cppSTLtype multiset -syntax keyword cppSTLtype nothrow_t -syntax keyword cppSTLtype off_type -syntax keyword cppSTLtype ofstream -syntax keyword cppSTLtype ostream -syntax keyword cppSTLtype ostringstream -syntax keyword cppSTLtype ostrstream -syntax keyword cppSTLtype pair -syntax keyword cppSTLtype pointer -syntax keyword cppSTLtype pointer_to_binary_function -syntax keyword cppSTLtype pointer_to_unary_function -syntax keyword cppSTLtype pos_type -syntax keyword cppSTLtype priority_queue -syntax keyword cppSTLtype queue -syntax keyword cppSTLtype reference -syntax keyword cppSTLtype second_type -syntax keyword cppSTLtype sequence_buffer -syntax keyword cppSTLtype set -syntax keyword cppSTLtype sig_atomic_t -syntax keyword cppSTLtype size_type -syntax keyword cppSTLtype slice_array -syntax keyword cppSTLtype stack -syntax keyword cppSTLtype stream -syntax keyword cppSTLtype streambuf -syntax keyword cppSTLtype streamsize -syntax keyword cppSTLtype string -syntax keyword cppSTLtype stringbuf -syntax keyword cppSTLtype stringstream -syntax keyword cppSTLtype strstream -syntax keyword cppSTLtype strstreambuf -syntax keyword cppSTLtype temporary_buffer -syntax keyword cppSTLtype test_type -syntax keyword cppSTLtype time_t -syntax keyword cppSTLtype tm -syntax keyword cppSTLtype traits_type -syntax keyword cppSTLtype type_info -syntax keyword cppSTLtype u16string -syntax keyword cppSTLtype u32string -syntax keyword cppSTLtype unary_compose -syntax keyword cppSTLtype unary_negate -syntax keyword cppSTLtype valarray -syntax keyword cppSTLtype value_compare -syntax keyword cppSTLtype value_type -syntax keyword cppSTLtype vector -syntax keyword cppSTLtype wfilebuf -syntax keyword cppSTLtype wfstream -syntax keyword cppSTLtype wifstream -syntax keyword cppSTLtype wiostream -syntax keyword cppSTLtype wistream -syntax keyword cppSTLtype wistringstream -syntax keyword cppSTLtype wofstream -syntax keyword cppSTLtype wostream -syntax keyword cppSTLtype wostringstream -syntax keyword cppSTLtype wstreambuf -syntax keyword cppSTLtype wstring -syntax keyword cppSTLtype wstringbuf -syntax keyword cppSTLtype wstringstream - -syntax keyword cppSTLfunction mblen -syntax keyword cppSTLfunction mbtowc -syntax keyword cppSTLfunction wctomb -syntax keyword cppSTLfunction mbstowcs -syntax keyword cppSTLfunction wcstombs -syntax keyword cppSTLfunction mbsinit -syntax keyword cppSTLfunction btowc -syntax keyword cppSTLfunction wctob -syntax keyword cppSTLfunction mbrlen -syntax keyword cppSTLfunction mbrtowc -syntax keyword cppSTLfunction wcrtomb -syntax keyword cppSTLfunction mbsrtowcs -syntax keyword cppSTLfunction wcsrtombs - -syntax keyword cppSTLtype mbstate_t - -syntax keyword cppSTLconstant MB_LEN_MAX -syntax keyword cppSTLconstant MB_CUR_MAX -syntax keyword cppSTLconstant __STDC_UTF_16__ -syntax keyword cppSTLconstant __STDC_UTF_32__ - -syntax keyword cppSTLfunction iswalnum -syntax keyword cppSTLfunction iswalpha -syntax keyword cppSTLfunction iswlower -syntax keyword cppSTLfunction iswupper -syntax keyword cppSTLfunction iswdigit -syntax keyword cppSTLfunction iswxdigit -syntax keyword cppSTLfunction iswcntrl -syntax keyword cppSTLfunction iswgraph -syntax keyword cppSTLfunction iswspace -syntax keyword cppSTLfunction iswprint -syntax keyword cppSTLfunction iswpunct -syntax keyword cppSTLfunction iswctype -syntax keyword cppSTLfunction wctype - -syntax keyword cppSTLfunction towlower -syntax keyword cppSTLfunction towupper -syntax keyword cppSTLfunction towctrans -syntax keyword cppSTLfunction wctrans - -syntax keyword cppSTLfunction wcstol -syntax keyword cppSTLfunction wcstoll -syntax keyword cppSTLfunction wcstoul -syntax keyword cppSTLfunction wcstoull -syntax keyword cppSTLfunction wcstof -syntax keyword cppSTLfunction wcstod -syntax keyword cppSTLfunction wcstold - -syntax keyword cppSTLfunction wcscpy -syntax keyword cppSTLfunction wcsncpy -syntax keyword cppSTLfunction wcscat -syntax keyword cppSTLfunction wcsncat -syntax keyword cppSTLfunction wcsxfrm -syntax keyword cppSTLfunction wcslen -syntax keyword cppSTLfunction wcscmp -syntax keyword cppSTLfunction wcsncmp -syntax keyword cppSTLfunction wcscoll -syntax keyword cppSTLfunction wcschr -syntax keyword cppSTLfunction wcsrchr -syntax keyword cppSTLfunction wcsspn -syntax keyword cppSTLfunction wcscspn -syntax keyword cppSTLfunction wcspbrk -syntax keyword cppSTLfunction wcsstr -syntax keyword cppSTLfunction wcstok -syntax keyword cppSTLfunction wmemcpy -syntax keyword cppSTLfunction wmemmove -syntax keyword cppSTLfunction wmemcmp -syntax keyword cppSTLfunction wmemchr -syntax keyword cppSTLfunction wmemset - -syntax keyword cppSTLtype wctrans_t -syntax keyword cppSTLtype wctype_t -syntax keyword cppSTLtype wint_t - -syntax keyword cppSTLconstant WEOF -syntax keyword cppSTLconstant WCHAR_MIN -syntax keyword cppSTLconstant WCHAR_MAX - -" locale -syntax keyword cppSTLtype locale -syntax keyword cppSTLtype ctype_base -syntax keyword cppSTLtype codecvt_base -syntax keyword cppSTLtype messages_base -syntax keyword cppSTLtype time_base -syntax keyword cppSTLtype money_base -syntax keyword cppSTLtype ctype -syntax keyword cppSTLtype codecvt -syntax keyword cppSTLtype collate -syntax keyword cppSTLtype messages -syntax keyword cppSTLtype time_get -syntax keyword cppSTLtype time_put -syntax keyword cppSTLtype num_get -syntax keyword cppSTLtype num_put -syntax keyword cppSTLtype numpunct -syntax keyword cppSTLtype money_get -syntax keyword cppSTLtype money_put -syntax keyword cppSTLtype moneypunct -syntax keyword cppSTLtype ctype_byname -syntax keyword cppSTLtype codecvt_byname -syntax keyword cppSTLtype messages_byname -syntax keyword cppSTLtype collate_byname -syntax keyword cppSTLtype time_get_byname -syntax keyword cppSTLtype time_put_byname -syntax keyword cppSTLtype numpunct_byname -syntax keyword cppSTLtype moneypunct_byname -syntax keyword cppSTLfunction use_facet -syntax keyword cppSTLfunction has_facet -syntax keyword cppSTLfunction isspace isblank iscntrl isupper islower isalpha -syntax keyword cppSTLfunction isdigit ispunct isxdigit isalnum isprint isgraph - -if !exists("cpp_no_cpp11") - syntax keyword cppSTLconstant nullptr - - " containers (array, vector, list, *map, *set, ...) - syntax keyword cppSTLtype array - syntax keyword cppSTLfunction cbegin cend - syntax keyword cppSTLfunction crbegin crend - syntax keyword cppSTLfunction shrink_to_fit - syntax keyword cppSTLfunction emplace - syntax keyword cppSTLfunction emplace_back - syntax keyword cppSTLfunction emplace_front - syntax keyword cppSTLfunction emplace_hint - - " algorithm - syntax keyword cppSTLfunction all_of any_of none_of - syntax keyword cppSTLfunction find_if_not - syntax keyword cppSTLfunction copy_if - syntax keyword cppSTLfunction copy_n - syntax keyword cppSTLfunction move - syntax keyword cppSTLfunction move_backward - syntax keyword cppSTLfunction shuffle - syntax keyword cppSTLfunction is_partitioned - syntax keyword cppSTLfunction partition_copy - syntax keyword cppSTLfunction partition_point - syntax keyword cppSTLfunction is_sorted - syntax keyword cppSTLfunction is_sorted_until - syntax keyword cppSTLfunction is_heap - syntax keyword cppSTLfunction is_heap_until - syntax keyword cppSTLfunction minmax - syntax keyword cppSTLfunction minmax_element - syntax keyword cppSTLfunction is_permutation - syntax keyword cppSTLfunction itoa - - " atomic - syntax keyword cppSTLtype atomic - syntax keyword cppSTLtype atomic_flag - syntax keyword cppSTLtype atomic_bool - syntax keyword cppSTLtype atomic_char - syntax keyword cppSTLtype atomic_schar - syntax keyword cppSTLtype atomic_uchar - syntax keyword cppSTLtype atomic_short - syntax keyword cppSTLtype atomic_ushort - syntax keyword cppSTLtype atomic_int - syntax keyword cppSTLtype atomic_uint - syntax keyword cppSTLtype atomic_long - syntax keyword cppSTLtype atomic_ulong - syntax keyword cppSTLtype atomic_llong - syntax keyword cppSTLtype atomic_ullong - syntax keyword cppSTLtype atomic_char16_t - syntax keyword cppSTLtype atomic_char32_t - syntax keyword cppSTLtype atomic_wchar_t - syntax keyword cppSTLtype atomic_int_least8_t - syntax keyword cppSTLtype atomic_uint_least8_t - syntax keyword cppSTLtype atomic_int_least16_t - syntax keyword cppSTLtype atomic_uint_least16_t - syntax keyword cppSTLtype atomic_int_least32_t - syntax keyword cppSTLtype atomic_uint_least32_t - syntax keyword cppSTLtype atomic_int_least64_t - syntax keyword cppSTLtype atomic_uint_least64_t - syntax keyword cppSTLtype atomic_int_fast8_t - syntax keyword cppSTLtype atomic_uint_fast8_t - syntax keyword cppSTLtype atomic_int_fast16_t - syntax keyword cppSTLtype atomic_uint_fast16_t - syntax keyword cppSTLtype atomic_int_fast32_t - syntax keyword cppSTLtype atomic_uint_fast32_t - syntax keyword cppSTLtype atomic_int_fast64_t - syntax keyword cppSTLtype atomic_uint_fast64_t - syntax keyword cppSTLtype atomic_intptr_t - syntax keyword cppSTLtype atomic_uintptr_t - syntax keyword cppSTLtype atomic_size_t - syntax keyword cppSTLtype atomic_ptrdiff_t - syntax keyword cppSTLtype atomic_intmax_t - syntax keyword cppSTLtype atomic_uintmax_t - syntax keyword cppSTLconstant ATOMIC_FLAG_INIT - syntax keyword cppSTLenum memory_order - syntax keyword cppSTLfunction is_lock_free - syntax keyword cppSTLfunction compare_exchange_weak - syntax keyword cppSTLfunction compare_exchange_strong - syntax keyword cppSTLfunction fetch_add - syntax keyword cppSTLfunction fetch_sub - syntax keyword cppSTLfunction fetch_and - syntax keyword cppSTLfunction fetch_or - syntax keyword cppSTLfunction fetch_xor - syntax keyword cppSTLfunction atomic_is_lock_free - syntax keyword cppSTLfunction atomic_store - syntax keyword cppSTLfunction atomic_store_explicit - syntax keyword cppSTLfunction atomic_load - syntax keyword cppSTLfunction atomic_load_explicit - syntax keyword cppSTLfunction atomic_exchange - syntax keyword cppSTLfunction atomic_exchange_explicit - syntax keyword cppSTLfunction atomic_compare_exchange_weak - syntax keyword cppSTLfunction atomic_compare_exchange_weak_explicit - syntax keyword cppSTLfunction atomic_compare_exchange_strong - syntax keyword cppSTLfunction atomic_compare_exchange_strong_explicit - syntax keyword cppSTLfunction atomic_fetch_add - syntax keyword cppSTLfunction atomic_fetch_add_explicit - syntax keyword cppSTLfunction atomic_fetch_sub - syntax keyword cppSTLfunction atomic_fetch_sub_explicit - syntax keyword cppSTLfunction atomic_fetch_and - syntax keyword cppSTLfunction atomic_fetch_and_explicit - syntax keyword cppSTLfunction atomic_fetch_or - syntax keyword cppSTLfunction atomic_fetch_or_explicit - syntax keyword cppSTLfunction atomic_fetch_xor - syntax keyword cppSTLfunction atomic_fetch_xor_explicit - syntax keyword cppSTLfunction atomic_flag_test_and_set - syntax keyword cppSTLfunction atomic_flag_test_and_set_explicit - syntax keyword cppSTLfunction atomic_flag_clear - syntax keyword cppSTLfunction atomic_flag_clear_explicit - syntax keyword cppSTLfunction atomic_init - syntax keyword cppSTLfunction ATOMIC_VAR_INIT - syntax keyword cppSTLfunction kill_dependency - syntax keyword cppSTLfunction atomic_thread_fence - syntax keyword cppSTLfunction atomic_signal_fence - syntax keyword cppSTLfunction exchange - " syntax keyword cppSTLfunction store - " syntax keyword cppSTLfunction load - - " bitset - syntax keyword cppSTLfunction to_ullong - " syntax keyword cppSTLfunction all - - " cinttypes - syntax keyword cppSTLfunction strtoimax - syntax keyword cppSTLfunction strtoumax - syntax keyword cppSTLfunction wcstoimax - syntax keyword cppSTLfunction wcstoumax - - " chrono - syntax keyword cppSTLnamespace chrono - syntax keyword cppSTLcast duration_cast - syntax keyword cppSTLcast time_point_cast - syntax keyword cppSTLtype duration - syntax keyword cppSTLtype system_clock - syntax keyword cppSTLtype steady_clock - syntax keyword cppSTLtype high_resolution_clock - syntax keyword cppSTLtype time_point - syntax keyword cppSTLtype nanoseconds - syntax keyword cppSTLtype microseconds - syntax keyword cppSTLtype milliseconds - syntax keyword cppSTLtype seconds - syntax keyword cppSTLtype minutes - syntax keyword cppSTLtype hours - syntax keyword cppSTLtype treat_as_floating_point - syntax keyword cppSTLtype duration_values - " syntax keyword cppSTLtype rep period - syntax keyword cppSTLfunction time_since_epoch - syntax keyword cppSTLfunction to_time_t - syntax keyword cppSTLfunction from_time_t - " syntax keyword cppSTLfunction zero - " syntax keyword cppSTLfunction now - - " complex - " syntax keyword cppSTLfunction proj - - " condition_variable - syntax keyword cppSTLtype condition_variable - syntax keyword cppSTLfunction notify_all - syntax keyword cppSTLfunction notify_one - - " cstddef - syntax keyword cppSTLtype nullptr_t max_align_t - - " cstdlib - syntax keyword cppSTLfunction quick_exit - syntax keyword cppSTLfunction _Exit - syntax keyword cppSTLfunction at_quick_exit - - " cuchar - syntax keyword cppSTLfunction mbrtoc16 - syntax keyword cppSTLfunction c16rtomb - syntax keyword cppSTLfunction mbrtoc32 - syntax keyword cppSTLfunction c32rtomb - - " exception - syntax keyword cppSTLtype exception_ptr - syntax keyword cppSTLtype nested_exception - syntax keyword cppSTLfunction get_terminate - syntax keyword cppSTLfunction make_exception_ptr - syntax keyword cppSTLfunction current_exception - syntax keyword cppSTLfunction rethrow_exception - syntax keyword cppSTLfunction throw_with_nested - syntax keyword cppSTLfunction rethrow_if_nested - syntax keyword cppSTLfunction rethrow_nested - - " forward_list - syntax keyword cppSTLtype forward_list - syntax keyword cppSTLfunction before_begin - syntax keyword cppSTLfunction cbefore_begin - syntax keyword cppSTLfunction insert_after - syntax keyword cppSTLfunction emplace_after - syntax keyword cppSTLfunction erase_after - syntax keyword cppSTLfunction splice_after - - " functional - syntax keyword cppSTLexception bad_function_call - syntax keyword cppSTLfunctional function - syntax keyword cppSTLconstant _1 _2 _3 _4 _5 _6 _7 _8 _9 - syntax keyword cppSTLtype hash - syntax keyword cppSTLtype is_bind_expression - syntax keyword cppSTLtype is_placeholder - syntax keyword cppSTLtype reference_wrapper - syntax keyword cppSTLfunction bind - syntax keyword cppSTLfunction mem_fn - syntax keyword cppSTLfunction ref cref - - " future - syntax keyword cppSTLtype future - syntax keyword cppSTLtype packaged_task - syntax keyword cppSTLtype promise - syntax keyword cppSTLtype shared_future - syntax keyword cppSTLenum future_status - syntax keyword cppSTLenum future_errc - syntax keyword cppSTLenum launch - syntax keyword cppSTLexception future_error - syntax keyword cppSTLfunction get_future - syntax keyword cppSTLfunction set_value - syntax keyword cppSTLfunction set_value_at_thread_exit - syntax keyword cppSTLfunction set_exception - syntax keyword cppSTLfunction set_exception_at_thread_exit - syntax keyword cppSTLfunction wait_for - syntax keyword cppSTLfunction wait_until - syntax keyword cppSTLfunction future_category - syntax keyword cppSTLfunction make_error_code - syntax keyword cppSTLfunction make_error_condition - syntax keyword cppSTLfunction make_ready_at_thread_exit - " syntax keyword cppSTLfunction async - " syntax keyword cppSTLfunction share - " syntax keyword cppSTLfunction valid - " syntax keyword cppSTLfunction wait - - " initializer_list - syntax keyword cppSTLtype initializer_list - - " io - syntax keyword cppSTLenum io_errc - syntax keyword cppSTLfunction iostream_category - syntax keyword cppSTLfunction vscanf vfscanf vsscanf - syntax keyword cppSTLfunction snprintf vsnprintf - syntax keyword cppSTLfunction vwscanf vfwscanf vswscanf - - " iterator - syntax keyword cppSTLiterator move_iterator - syntax keyword cppSTLfunction make_move_iterator - syntax keyword cppSTLfunction next prev - - " limits - syntax keyword cppSTLconstant max_digits10 - syntax keyword cppSTLfunction lowest - - " locale - syntax keyword cppSTLtype wstring_convert - syntax keyword cppSTLtype wbuffer_convert - syntax keyword cppSTLtype codecvt_utf8 - syntax keyword cppSTLtype codecvt_utf16 - syntax keyword cppSTLtype codecvt_utf8_utf16 - syntax keyword cppSTLtype codecvt_mode - syntax keyword cppSTLfunction isblank - syntax keyword cppSTLfunction iswblank - - " memory - syntax keyword cppSTLtype unique_ptr - syntax keyword cppSTLtype shared_ptr - syntax keyword cppSTLtype weak_ptr - syntax keyword cppSTLtype owner_less - syntax keyword cppSTLtype enable_shared_from_this - syntax keyword cppSTLtype default_delete - syntax keyword cppSTLtype allocator_traits - syntax keyword cppSTLtype allocator_type - syntax keyword cppSTLtype allocator_arg_t - syntax keyword cppSTLtype uses_allocator - syntax keyword cppSTLtype scoped_allocator_adaptor - syntax keyword cppSTLtype pointer_safety - syntax keyword cppSTLtype pointer_traits - syntax keyword cppSTLconstant allocator_arg - syntax keyword cppSTLexception bad_weak_ptr - syntax keyword cppSTLcast static_pointer_cast - syntax keyword cppSTLcast dynamic_pointer_cast - syntax keyword cppSTLcast const_pointer_cast - syntax keyword cppSTLfunction make_shared - syntax keyword cppSTLfunction declare_reachable - syntax keyword cppSTLfunction undeclare_reachable - syntax keyword cppSTLfunction declare_no_pointers - syntax keyword cppSTLfunction undeclare_no_pointers - syntax keyword cppSTLfunction get_pointer_safety - syntax keyword cppSTLfunction addressof - syntax keyword cppSTLfunction allocate_shared - syntax keyword cppSTLfunction get_deleter - " syntax keyword cppSTLfunction align - - " mutex - syntax keyword cppSTLtype mutex - syntax keyword cppSTLtype timed_mutex - syntax keyword cppSTLtype recursive_mutex - syntax keyword cppSTLtype recursive_timed_mutex - syntax keyword cppSTLtype lock_guard - syntax keyword cppSTLtype unique_lock - syntax keyword cppSTLtype defer_lock_t - syntax keyword cppSTLtype try_to_lock_t - syntax keyword cppSTLtype adopt_lock_t - syntax keyword cppSTLtype once_flag - syntax keyword cppSTLtype condition_variable_any - syntax keyword cppSTLenum cv_status - syntax keyword cppSTLconstant defer_lock try_to_lock adopt_lock - syntax keyword cppSTLfunction try_lock lock unlock try_lock_for try_lock_until - syntax keyword cppSTLfunction call_once - syntax keyword cppSTLfunction owns_lock - syntax keyword cppSTLfunction notify_all_at_thread_exit - syntax keyword cppSTLfunction release - " Note: unique_lock has method 'mutex()', but already set as cppSTLtype - " syntax keyword cppSTLfunction mutex - - " new - syntax keyword cppSTLexception bad_array_new_length - syntax keyword cppSTLfunction get_new_handler - - " numerics, cmath - syntax keyword cppSTLconstant HUGE_VALF - syntax keyword cppSTLconstant HUGE_VALL - syntax keyword cppSTLconstant INFINITY - syntax keyword cppSTLconstant NAN - syntax keyword cppSTLconstant math_errhandling - syntax keyword cppSTLconstant MATH_ERRNO - syntax keyword cppSTLconstant MATH_ERREXCEPT - syntax keyword cppSTLconstant FP_NORMAL - syntax keyword cppSTLconstant FP_SUBNORMAL - syntax keyword cppSTLconstant FP_ZERO - syntax keyword cppSTLconstant FP_INFINITY - syntax keyword cppSTLconstant FP_NAN - syntax keyword cppSTLconstant FLT_EVAL_METHOD - syntax keyword cppSTLfunction imaxabs - syntax keyword cppSTLfunction imaxdiv - syntax keyword cppSTLfunction remainder - syntax keyword cppSTLfunction remquo - syntax keyword cppSTLfunction fma - syntax keyword cppSTLfunction fmax - syntax keyword cppSTLfunction fmin - syntax keyword cppSTLfunction fdim - syntax keyword cppSTLfunction nan - syntax keyword cppSTLfunction nanf - syntax keyword cppSTLfunction nanl - syntax keyword cppSTLfunction exp2 - syntax keyword cppSTLfunction expm1 - syntax keyword cppSTLfunction log1p - syntax keyword cppSTLfunction log2 - syntax keyword cppSTLfunction cbrt - syntax keyword cppSTLfunction hypot - syntax keyword cppSTLfunction asinh - syntax keyword cppSTLfunction acosh - syntax keyword cppSTLfunction atanh - syntax keyword cppSTLfunction erf - syntax keyword cppSTLfunction erfc - syntax keyword cppSTLfunction lgamma - syntax keyword cppSTLfunction tgamma - syntax keyword cppSTLfunction trunc - syntax keyword cppSTLfunction round - syntax keyword cppSTLfunction lround - syntax keyword cppSTLfunction llround - syntax keyword cppSTLfunction nearbyint - syntax keyword cppSTLfunction rint - syntax keyword cppSTLfunction lrint - syntax keyword cppSTLfunction llrint - syntax keyword cppSTLfunction scalbn - syntax keyword cppSTLfunction scalbln - syntax keyword cppSTLfunction ilogb - syntax keyword cppSTLfunction logb - syntax keyword cppSTLfunction nextafter - syntax keyword cppSTLfunction nexttoward - syntax keyword cppSTLfunction copysign - syntax keyword cppSTLfunction fpclassify - syntax keyword cppSTLfunction isfinite - syntax keyword cppSTLfunction isinf - syntax keyword cppSTLfunction isnan - syntax keyword cppSTLfunction isnormal - syntax keyword cppSTLfunction signbit - - " random - syntax keyword cppSTLtype linear_congruential_engine - syntax keyword cppSTLtype mersenne_twister_engine - syntax keyword cppSTLtype subtract_with_carry_engine - syntax keyword cppSTLtype discard_block_engine - syntax keyword cppSTLtype independent_bits_engine - syntax keyword cppSTLtype shuffle_order_engine - syntax keyword cppSTLtype random_device - syntax keyword cppSTLtype default_random_engine - syntax keyword cppSTLtype minstd_rand0 - syntax keyword cppSTLtype minstd_rand - syntax keyword cppSTLtype mt19937 - syntax keyword cppSTLtype mt19937_64 - syntax keyword cppSTLtype ranlux24_base - syntax keyword cppSTLtype ranlux48_base - syntax keyword cppSTLtype ranlux24 - syntax keyword cppSTLtype ranlux48 - syntax keyword cppSTLtype knuth_b - syntax keyword cppSTLtype uniform_int_distribution - syntax keyword cppSTLtype uniform_real_distribution - syntax keyword cppSTLtype bernoulli_distribution - syntax keyword cppSTLtype binomial_distribution - syntax keyword cppSTLtype negative_binomial_distribution - syntax keyword cppSTLtype geometric_distribution - syntax keyword cppSTLtype poisson_distribution - syntax keyword cppSTLtype exponential_distribution - syntax keyword cppSTLtype gamma_distribution - syntax keyword cppSTLtype weibull_distribution - syntax keyword cppSTLtype extreme_value_distribution - syntax keyword cppSTLtype normal_distribution - syntax keyword cppSTLtype lognormal_distribution - syntax keyword cppSTLtype chi_squared_distribution - syntax keyword cppSTLtype cauchy_distribution - syntax keyword cppSTLtype fisher_f_distribution - syntax keyword cppSTLtype student_t_distribution - syntax keyword cppSTLtype discrete_distribution - syntax keyword cppSTLtype piecewise_constant_distribution - syntax keyword cppSTLtype piecewise_linear_distribution - syntax keyword cppSTLtype seed_seq - syntax keyword cppSTLfunction generate_canonical - - " ratio - syntax keyword cppSTLtype ratio - syntax keyword cppSTLtype yocto - syntax keyword cppSTLtype zepto - syntax keyword cppSTLtype atto - syntax keyword cppSTLtype femto - syntax keyword cppSTLtype pico - syntax keyword cppSTLtype nano - syntax keyword cppSTLtype micro - syntax keyword cppSTLtype milli - syntax keyword cppSTLtype centi - syntax keyword cppSTLtype deci - syntax keyword cppSTLtype deca - syntax keyword cppSTLtype hecto - syntax keyword cppSTLtype kilo - syntax keyword cppSTLtype mega - syntax keyword cppSTLtype giga - syntax keyword cppSTLtype tera - syntax keyword cppSTLtype peta - syntax keyword cppSTLtype exa - syntax keyword cppSTLtype zetta - syntax keyword cppSTLtype yotta - syntax keyword cppSTLtype ratio_add - syntax keyword cppSTLtype ratio_subtract - syntax keyword cppSTLtype ratio_multiply - syntax keyword cppSTLtype ratio_divide - syntax keyword cppSTLtype ratio_equal - syntax keyword cppSTLtype ratio_not_equal - syntax keyword cppSTLtype ratio_less - syntax keyword cppSTLtype ratio_less_equal - syntax keyword cppSTLtype ratio_greater - syntax keyword cppSTLtype ratio_greater_equal - - " regex - syntax keyword cppSTLtype basic_regex - syntax keyword cppSTLtype sub_match - syntax keyword cppSTLtype match_results - syntax keyword cppSTLtype regex_traits - syntax keyword cppSTLtype regex_match regex_search regex_replace - syntax keyword cppSTLiterator regex_iterator - syntax keyword cppSTLiterator regex_token_iterator - syntax keyword cppSTLexception regex_error - syntax keyword cppSTLtype syntax_option_type match_flag_type error_type - - " string - syntax keyword cppSTLfunction stoi - syntax keyword cppSTLfunction stol - syntax keyword cppSTLfunction stoll - syntax keyword cppSTLfunction stoul - syntax keyword cppSTLfunction stoull - syntax keyword cppSTLfunction stof - syntax keyword cppSTLfunction stod - syntax keyword cppSTLfunction stold - - " system_error - syntax keyword cppSTLenum errc - syntax keyword cppSTLtype system_error - syntax keyword cppSTLtype error_code - syntax keyword cppSTLtype error_condition - syntax keyword cppSTLtype error_category - syntax keyword cppSTLtype is_error_code_enum - syntax keyword cppSTLtype is_error_condition_enum - " syntax keyword cppSTLfunction default_error_condition - " syntax keyword cppSTLfunction generic_category - " syntax keyword cppSTLfunction system_category - " syntax keyword cppSTLfunction code - " syntax keyword cppSTLfunction category - " syntax keyword cppSTLfunction message - " syntax keyword cppSTLfunction equivalent - - " thread - syntax keyword cppSTLnamespace this_thread - syntax keyword cppSTLtype thread - syntax keyword cppSTLfunction get_id - syntax keyword cppSTLfunction sleep_for - syntax keyword cppSTLfunction sleep_until - syntax keyword cppSTLfunction joinable - syntax keyword cppSTLfunction native_handle - syntax keyword cppSTLfunction hardware_concurrency - " syntax keyword cppSTLfunction yield - " syntax keyword cppSTLfunction join - " syntax keyword cppSTLfunction detach - - " tuple - syntax keyword cppSTLtype tuple - syntax keyword cppSTLtype tuple_size - syntax keyword cppSTLtype tuple_element - syntax keyword cppSTLfunction make_tuple - syntax keyword cppSTLfunction tie - syntax keyword cppSTLfunction forward_as_tuple - syntax keyword cppSTLfunction tuple_cat - " Note: 'ignore' is already set as cppSTLfunction - " syntax keyword cppSTLconstant ignore - - " typeindex - syntax keyword cppSTLtype type_index - - " type_traits - syntax keyword cppSTLtype is_void - syntax keyword cppSTLtype is_integral - syntax keyword cppSTLtype is_floating_point - syntax keyword cppSTLtype is_array - syntax keyword cppSTLtype is_enum - syntax keyword cppSTLtype is_union - syntax keyword cppSTLtype is_class - syntax keyword cppSTLtype is_function - syntax keyword cppSTLtype is_pointer - syntax keyword cppSTLtype is_lvalue_reference - syntax keyword cppSTLtype is_rvalue_reference - syntax keyword cppSTLtype is_member_object_pointer - syntax keyword cppSTLtype is_member_function_pointer - syntax keyword cppSTLtype is_fundamental - syntax keyword cppSTLtype is_arithmetic - syntax keyword cppSTLtype is_scalar - syntax keyword cppSTLtype is_object - syntax keyword cppSTLtype is_compound - syntax keyword cppSTLtype is_reference - syntax keyword cppSTLtype is_member_pointer - syntax keyword cppSTLtype is_const - syntax keyword cppSTLtype is_volatile - syntax keyword cppSTLtype is_trivial - syntax keyword cppSTLtype is_trivially_copyable - syntax keyword cppSTLtype is_standard_layout - syntax keyword cppSTLtype is_pod - syntax keyword cppSTLtype is_literal_type - syntax keyword cppSTLtype is_empty - syntax keyword cppSTLtype is_polymorphic - syntax keyword cppSTLtype is_abstract - syntax keyword cppSTLtype is_signed - syntax keyword cppSTLtype is_unsigned - syntax keyword cppSTLtype is_constructible - syntax keyword cppSTLtype is_trivially_constructible - syntax keyword cppSTLtype is_nothrow_constructible - syntax keyword cppSTLtype is_default_constructible - syntax keyword cppSTLtype is_trivially_default_constructible - syntax keyword cppSTLtype is_nothrow_default_constructible - syntax keyword cppSTLtype is_copy_constructible - syntax keyword cppSTLtype is_trivially_copy_constructible - syntax keyword cppSTLtype is_nothrow_copy_constructible - syntax keyword cppSTLtype is_move_constructible - syntax keyword cppSTLtype is_trivially_move_constructible - syntax keyword cppSTLtype is_nothrow_move_constructible - syntax keyword cppSTLtype is_assignable - syntax keyword cppSTLtype is_trivially_assignable - syntax keyword cppSTLtype is_nothrow_assignable - syntax keyword cppSTLtype is_copy_assignable - syntax keyword cppSTLtype is_trivially_copy_assignable - syntax keyword cppSTLtype is_nothrow_copy_assignable - syntax keyword cppSTLtype is_move_assignable - syntax keyword cppSTLtype is_trivially_move_assignable - syntax keyword cppSTLtype is_nothrow_move_assignable - syntax keyword cppSTLtype is_destructible - syntax keyword cppSTLtype is_trivially_destructible - syntax keyword cppSTLtype is_nothrow_destructible - syntax keyword cppSTLtype has_virtual_destructor - syntax keyword cppSTLtype alignment_of - syntax keyword cppSTLtype rank - syntax keyword cppSTLtype extent - syntax keyword cppSTLtype is_same - syntax keyword cppSTLtype is_base_of - syntax keyword cppSTLtype is_convertible - syntax keyword cppSTLtype remove_cv - syntax keyword cppSTLtype remove_const - syntax keyword cppSTLtype remove_volatile - syntax keyword cppSTLtype add_cv - syntax keyword cppSTLtype add_const - syntax keyword cppSTLtype add_volatile - syntax keyword cppSTLtype remove_reference - syntax keyword cppSTLtype add_lvalue_reference - syntax keyword cppSTLtype add_rvalue_reference - syntax keyword cppSTLtype remove_pointer - syntax keyword cppSTLtype add_pointer - syntax keyword cppSTLtype make_signed - syntax keyword cppSTLtype make_unsigned - syntax keyword cppSTLtype remove_extent - syntax keyword cppSTLtype remove_all_extents - syntax keyword cppSTLtype aligned_storage - syntax keyword cppSTLtype aligned_union - syntax keyword cppSTLtype decay - syntax keyword cppSTLtype enable_if - syntax keyword cppSTLtype conditional - syntax keyword cppSTLtype common_type - syntax keyword cppSTLtype underlying_type - syntax keyword cppSTLtype result_of - syntax keyword cppSTLtype integral_constant - syntax keyword cppSTLtype true_type - syntax keyword cppSTLtype false_type - - " unordered_map, unordered_set, unordered_multimap, unordered_multiset - syntax keyword cppSTLtype unordered_map - syntax keyword cppSTLtype unordered_set - syntax keyword cppSTLtype unordered_multimap - syntax keyword cppSTLtype unordered_multiset - syntax keyword cppSTLtype hasher - syntax keyword cppSTLtype key_equal - syntax keyword cppSTLiterator local_iterator - syntax keyword cppSTLiterator const_local_iterator - syntax keyword cppSTLfunction bucket_count - syntax keyword cppSTLfunction max_bucket_count - syntax keyword cppSTLfunction bucket_size - syntax keyword cppSTLfunction bucket - syntax keyword cppSTLfunction load_factor - syntax keyword cppSTLfunction max_load_factor - syntax keyword cppSTLfunction rehash - syntax keyword cppSTLfunction reserve - syntax keyword cppSTLfunction hash_function - syntax keyword cppSTLfunction key_eq - - " utility - syntax keyword cppSTLtype piecewise_construct_t - syntax keyword cppSTLconstant piecewise_construct - syntax keyword cppSTLfunction declval - syntax keyword cppSTLfunction forward - syntax keyword cppSTLfunction move_if_noexcept - - " raw string literals - syntax region cppRawString matchgroup=cppRawDelimiter start=@\%(u8\|[uLU]\)\=R"\z([[:alnum:]_{}[\]#<>%:;.?*\+\-/\^&|~!=,"']\{,16}\)(@ end=/)\z1"/ contains=@Spell - - syn match cNumber "0b[01]\+" -endif " C++11 - - -if !exists("cpp_no_cpp14") - " chrono - syntax keyword cppSTLnamespace literals - syntax keyword cppSTLnamespace chrono_literals - - " iterator - syntax keyword cppSTLfunction make_reverse_iterator - - " memory - syntax keyword cppSTLfunction make_unique - - " utility - syntax keyword cppSTLtype integer_sequence - syntax keyword cppSTLtype index_sequence - syntax keyword cppSTLtype make_integer_sequence - syntax keyword cppSTLtype make_index_sequence - syntax keyword cppSTLtype index_sequence_for - - " shared_mutex - syntax keyword cppSTLtype shared_timed_mutex - syntax keyword cppSTLtype shared_lock - syntax keyword cppSTLfunction lock_shared - syntax keyword cppSTLfunction unlock_shared - syntax keyword cppSTLfunction try_lock_shared - syntax keyword cppSTLfunction try_lock_shared_for - syntax keyword cppSTLfunction try_lock_shared_until - - " string - syntax keyword cppSTLnamespace string_literals - - " tuple - syntax keyword cppSTLtype tuple_element_t - - " type_traits - syntax keyword cppSTLtype is_null_pointer - syntax keyword cppSTLtype remove_cv_t - syntax keyword cppSTLtype remove_const_t - syntax keyword cppSTLtype remove_volatile_t - syntax keyword cppSTLtype add_cv_t - syntax keyword cppSTLtype add_const_t - syntax keyword cppSTLtype add_volatile_t - syntax keyword cppSTLtype remove_reference_t - syntax keyword cppSTLtype add_lvalue_reference_t - syntax keyword cppSTLtype add_rvalue_reference_t - syntax keyword cppSTLtype remove_pointer_t - syntax keyword cppSTLtype add_pointer_t - syntax keyword cppSTLtype make_signed_t - syntax keyword cppSTLtype make_unsigned_t - syntax keyword cppSTLtype remove_extent_t - syntax keyword cppSTLtype remove_all_extents_t - syntax keyword cppSTLtype aligned_storage_t - syntax keyword cppSTLtype aligned_union_t - syntax keyword cppSTLtype decay_t - syntax keyword cppSTLtype enable_if_t - syntax keyword cppSTLtype conditional_t - syntax keyword cppSTLtype common_type_t - syntax keyword cppSTLtype underlying_type_t - syntax keyword cppSTLtype result_of_t -endif " C++14 - - -if !exists("cpp_no_cpp17") - " algorithm - syntax keyword cppSTLfunction clamp - syntax keyword cppSTLfunction for_each_n - - " any - syntax keyword cppSTLtype any - syntax keyword cppSTLexception bad_any_cast - syntax keyword cppSTLcast any_cast - syntax keyword cppSTLfunction make_any - - " array - syntax keyword cppSTLfunction to_array - syntax keyword cppSTLfunction make_array - - " atomic - syntax keyword cppSTLconstant is_always_lock_free - - " chrono - syntax keyword cppSTLbool treat_as_floating_point_v - - " cmath - syntax keyword cppSTLfunction assoc_laguerre assoc_laguerref assoc_laguerrel - syntax keyword cppSTLfunction assoc_legendre assoc_legendref assoc_legendrel - syntax keyword cppSTLfunction beta betaf betal - syntax keyword cppSTLfunction comp_ellint_1 comp_ellint_1f comp_ellint_1l - syntax keyword cppSTLfunction comp_ellint_2 comp_ellint_2f comp_ellint_2l - syntax keyword cppSTLfunction comp_ellint_3 comp_ellint_3f comp_ellint_3l - syntax keyword cppSTLfunction cyl_bessel_i cyl_bessel_if cyl_bessel_il - syntax keyword cppSTLfunction cyl_bessel_j cyl_bessel_jf cyl_bessel_jl - syntax keyword cppSTLfunction cyl_bessel_k cyl_bessel_kf cyl_bessel_kl - syntax keyword cppSTLfunction cyl_neumann cyl_neumannf cyl_neumannl - syntax keyword cppSTLfunction ellint_1 ellint_1f ellint_1l - syntax keyword cppSTLfunction ellint_2 ellint_2f ellint_2l - syntax keyword cppSTLfunction ellint_3 ellint_3f ellint_3l - syntax keyword cppSTLfunction expint expintf expintl - syntax keyword cppSTLfunction hermite hermitef hermitel - syntax keyword cppSTLfunction legendre legendrefl egendrel - syntax keyword cppSTLfunction laguerre laguerref laguerrel - syntax keyword cppSTLfunction riemann_zeta riemann_zetaf riemann_zetal - syntax keyword cppSTLfunction sph_bessel sph_besself sph_bessell - syntax keyword cppSTLfunction sph_legendre sph_legendref sph_legendrel - syntax keyword cppSTLfunction sph_neumann sph_neumannf sph_neumannl - - " cstdlib - syntax keyword cppSTLfunction aligned_alloc - - " exception - syntax keyword cppSTLfunction uncaught_exceptions - - " execution - syntax keyword cppSTLnamespace execution - syntax keyword cppSTLconstant seq par par_unseq - syntax keyword cppSTLbool is_execution_policy_v - syntax keyword cppSTLtype sequenced_policy - syntax keyword cppSTLtype parallel_policy - syntax keyword cppSTLtype parallel_unsequenced_policy - syntax keyword cppSTLtype is_execution_policy - - " filesystem - syntax keyword cppSTLnamespace filesystem - syntax keyword cppSTLexception filesystem_error - syntax keyword cppSTLtype path - syntax keyword cppSTLtype directory_entry - syntax keyword cppSTLtype directory_iterator - syntax keyword cppSTLtype recursive_directory_iterator - syntax keyword cppSTLtype file_status - syntax keyword cppSTLtype space_info - syntax keyword cppSTLtype file_time_type - syntax keyword cppSTLenum file_type - syntax keyword cppSTLenum perms - syntax keyword cppSTLenum copy_options - syntax keyword cppSTLenum directory_options - syntax keyword cppSTLConstant preferred_separator - syntax keyword cppSTLconstant available - " Note: 'capacity' and 'free' are already set as cppSTLfunction - " syntax keyword cppSTLconstant capacity - " syntax keyword cppSTLconstant free - syntax keyword cppSTLfunction concat - syntax keyword cppSTLfunction make_preferred - syntax keyword cppSTLfunction remove_filename - syntax keyword cppSTLfunction replace_filename - syntax keyword cppSTLfunction replace_extension - syntax keyword cppSTLfunction native - syntax keyword cppSTLfunction string_type - " Note: wstring, u8string, u16string, u32string already set as cppSTLtype - " syntax keyword cppSTLfunction wstring - " syntax keyword cppSTLfunction u8string - " syntax keyword cppSTLfunction u16string - " syntax keyword cppSTLfunction u32string - syntax keyword cppSTLfunction generic_string - syntax keyword cppSTLfunction generic_wstring - syntax keyword cppSTLfunction generic_u8string - syntax keyword cppSTLfunction generic_u16string - syntax keyword cppSTLfunction generic_u32string - syntax keyword cppSTLfunction lexically_normal - syntax keyword cppSTLfunction lexically_relative - syntax keyword cppSTLfunction lexically_proximate - syntax keyword cppSTLfunction root_name - syntax keyword cppSTLfunction root_directory - syntax keyword cppSTLfunction root_path - syntax keyword cppSTLfunction relative_path - syntax keyword cppSTLfunction parent_path - " syntax keyword cppSTLfunction filename - syntax keyword cppSTLfunction stem - syntax keyword cppSTLfunction extension - syntax keyword cppSTLfunction has_root_name - syntax keyword cppSTLfunction has_root_directory - syntax keyword cppSTLfunction has_root_path - syntax keyword cppSTLfunction has_relative_path - syntax keyword cppSTLfunction has_parent_path - syntax keyword cppSTLfunction has_filename - syntax keyword cppSTLfunction has_stem - syntax keyword cppSTLfunction has_extension - syntax keyword cppSTLfunction is_absolute - syntax keyword cppSTLfunction is_relative - syntax keyword cppSTLfunction hash_value - syntax keyword cppSTLfunction u8path - syntax keyword cppSTLfunction path1 - syntax keyword cppSTLfunction path2 - " syntax keyword cppSTLfunction path - syntax keyword cppSTLfunction status - syntax keyword cppSTLfunction symlink_status - syntax keyword cppSTLfunction options - " syntax keyword cppSTLfunction depth - syntax keyword cppSTLfunction recursive_pending - syntax keyword cppSTLfunction disable_recursive_pending - " syntax keyword cppSTLfunction type - syntax keyword cppSTLfunction permissions - syntax keyword cppSTLfunction absolute - syntax keyword cppSTLfunction system_complete - syntax keyword cppSTLfunction canonical - syntax keyword cppSTLfunction weakly_canonical - syntax keyword cppSTLfunction relative - syntax keyword cppSTLfunction proximate - syntax keyword cppSTLfunction copy_file - syntax keyword cppSTLfunction copy_symlink - syntax keyword cppSTLfunction create_directory - syntax keyword cppSTLfunction create_directories - syntax keyword cppSTLfunction create_hard_link - syntax keyword cppSTLfunction create_symlink - syntax keyword cppSTLfunction create_directory_symlink - syntax keyword cppSTLfunction current_path - " syntax keyword cppSTLfunction exists - syntax keyword cppSTLfunction file_size - syntax keyword cppSTLfunction hard_link_count - syntax keyword cppSTLfunction last_write_time - syntax keyword cppSTLfunction read_symlink - syntax keyword cppSTLfunction remove_all - syntax keyword cppSTLfunction resize_file - syntax keyword cppSTLfunction space - syntax keyword cppSTLfunction temp_directory_path - syntax keyword cppSTLfunction is_block_file - syntax keyword cppSTLfunction is_character_file - syntax keyword cppSTLfunction is_directory - syntax keyword cppSTLfunction is_fifo - syntax keyword cppSTLfunction is_other - syntax keyword cppSTLfunction is_regular_file - syntax keyword cppSTLfunction is_socket - syntax keyword cppSTLfunction is_symlink - syntax keyword cppSTLfunction status_known - " Note: 'is_empty' already set as cppSTLtype - " syntax keyword cppSTLfunction is_empty - - " functional - syntax keyword cppSTLtype default_order - syntax keyword cppSTLtype default_order_t - syntax keyword cppSTLtype default_searcher - syntax keyword cppSTLtype boyer_moore_searcher - syntax keyword cppSTLtype boyer_moore_horspool_searcher - syntax keyword cppSTLbool is_bind_expression_v - syntax keyword cppSTLbool is_placeholder_v - syntax keyword cppSTLfunction not_fn - syntax keyword cppSTLfunction make_default_searcher - syntax keyword cppSTLfunction make_boyer_moore_searcher - syntax keyword cppSTLfunction make_boyer_moore_horspool_searcher - " syntax keyword cppSTLfunction invoke - - " memory - syntax keyword cppSTLcast reinterpret_pointer_cast - syntax keyword cppSTLfunction uninitialized_move - syntax keyword cppSTLfunction uninitialized_move_n - syntax keyword cppSTLfunction uninitialized_default_construct - syntax keyword cppSTLfunction uninitialized_default_construct_n - syntax keyword cppSTLfunction uninitialized_value_construct - syntax keyword cppSTLfunction uninitialized_value_construct_n - syntax keyword cppSTLfunction destroy_at - syntax keyword cppSTLfunction destroy_n - - " memory_resource - syntax keyword cppSTLtype polymorphic_allocator - syntax keyword cppSTLtype memory_resource - syntax keyword cppSTLtype synchronized_pool_resource - syntax keyword cppSTLtype unsynchronized_pool_resource - syntax keyword cppSTLtype pool_options - syntax keyword cppSTLtype monotonic_buffer_resource - syntax keyword cppSTLfunction upstream_resource - syntax keyword cppSTLfunction get_default_resource - syntax keyword cppSTLfunction new_default_resource - syntax keyword cppSTLfunction set_default_resource - syntax keyword cppSTLfunction null_memory_resource - syntax keyword cppSTLfunction allocate - syntax keyword cppSTLfunction deallocate - syntax keyword cppSTLfunction construct - syntax keyword cppSTLfunction destruct - syntax keyword cppSTLfunction resource - syntax keyword cppSTLfunction select_on_container_copy_construction - syntax keyword cppSTLfunction do_allocate - syntax keyword cppSTLfunction do_deallocate - syntax keyword cppSTLfunction do_is_equal - - " mutex - syntax keyword cppSTLtype scoped_lock - - " new - syntax keyword cppSTLconstant hardware_destructive_interference_size - syntax keyword cppSTLconstant hardware_constructive_interference_size - syntax keyword cppSTLfunction launder - - " numeric - syntax keyword cppSTLfunction gcd - syntax keyword cppSTLfunction lcm - syntax keyword cppSTLfunction exclusive_scan - syntax keyword cppSTLfunction inclusive_scan - syntax keyword cppSTLfunction transform_reduce - syntax keyword cppSTLfunction transform_exclusive_scan - syntax keyword cppSTLfunction transform_inclusive_scan - " syntax keyword cppSTLfunction reduce - - " optional - syntax keyword cppSTLtype optional - syntax keyword cppSTLtype nullopt_t - syntax keyword cppSTLexception bad_optional_access - syntax keyword cppSTLconstant nullopt - syntax keyword cppSTLfunction make_optional - syntax keyword cppSTLfunction value_or - syntax keyword cppSTLfunction has_value - " syntax keyword cppSTLfunction value - - " string_view - syntax keyword cppSTLtype basic_string_view - syntax keyword cppSTLtype string_view - syntax keyword cppSTLtype wstring_view - syntax keyword cppSTLtype u16string_view - syntax keyword cppSTLtype u32string_view - syntax keyword cppSTLfunction remove_prefix - syntax keyword cppSTLfunction remove_suffix - - " system_error - syntax keyword cppSTLbool is_error_code_enum_v - syntax keyword cppSTLbool is_error_condition_enum_v - - " shared_mutex - syntax keyword cppSTLtype shared_mutex - - " tuple - syntax keyword cppSTLconstant tuple_size_v - syntax keyword cppSTLfunction make_from_tuple - " syntax keyword cppSTLfunction apply - - " type_traits - syntax keyword cppSTLbool is_void_v - syntax keyword cppSTLbool is_null_pointer_v - syntax keyword cppSTLbool is_integral_v - syntax keyword cppSTLbool is_floating_point_v - syntax keyword cppSTLbool is_array_v - syntax keyword cppSTLbool is_enum_v - syntax keyword cppSTLbool is_union_v - syntax keyword cppSTLbool is_class_v - syntax keyword cppSTLbool is_function_v - syntax keyword cppSTLbool is_pointer_v - syntax keyword cppSTLbool is_lvalue_reference_v - syntax keyword cppSTLbool is_rvalue_reference_v - syntax keyword cppSTLbool is_member_object_pointer_v - syntax keyword cppSTLbool is_member_function_pointer_v - syntax keyword cppSTLbool is_fundamental_v - syntax keyword cppSTLbool is_arithmetic_v - syntax keyword cppSTLbool is_scalar_v - syntax keyword cppSTLbool is_object_v - syntax keyword cppSTLbool is_compound_v - syntax keyword cppSTLbool is_reference_v - syntax keyword cppSTLbool is_member_pointer_v - syntax keyword cppSTLbool is_const_v - syntax keyword cppSTLbool is_volatile_v - syntax keyword cppSTLbool is_trivial_v - syntax keyword cppSTLbool is_trivially_copyable_v - syntax keyword cppSTLbool is_standard_layout_v - syntax keyword cppSTLbool is_pod_v - syntax keyword cppSTLbool is_literal_type_v - syntax keyword cppSTLbool is_empty_v - syntax keyword cppSTLbool is_polymorphic_v - syntax keyword cppSTLbool is_abstract_v - syntax keyword cppSTLbool is_signed_v - syntax keyword cppSTLbool is_unsigned_v - syntax keyword cppSTLbool is_constructible_v - syntax keyword cppSTLbool is_trivially_constructible_v - syntax keyword cppSTLbool is_nothrow_constructible_v - syntax keyword cppSTLbool is_default_constructible_v - syntax keyword cppSTLbool is_trivially_default_constructible_v - syntax keyword cppSTLbool is_nothrow_default_constructible_v - syntax keyword cppSTLbool is_copy_constructible_v - syntax keyword cppSTLbool is_trivially_copy_constructible_v - syntax keyword cppSTLbool is_nothrow_copy_constructible_v - syntax keyword cppSTLbool is_move_constructible_v - syntax keyword cppSTLbool is_trivially_move_constructible_v - syntax keyword cppSTLbool is_nothrow_move_constructible_v - syntax keyword cppSTLbool is_assignable_v - syntax keyword cppSTLbool is_trivially_assignable_v - syntax keyword cppSTLbool is_nothrow_assignable_v - syntax keyword cppSTLbool is_copy_assignable_v - syntax keyword cppSTLbool is_trivially_copy_assignable_v - syntax keyword cppSTLbool is_nothrow_copy_assignable_v - syntax keyword cppSTLbool is_move_assignable_v - syntax keyword cppSTLbool is_trivially_move_assignable_v - syntax keyword cppSTLbool is_nothrow_move_assignable_v - syntax keyword cppSTLbool is_destructible_v - syntax keyword cppSTLbool is_trivially_destructible_v - syntax keyword cppSTLbool is_nothrow_destructible_v - syntax keyword cppSTLbool has_virtual_destructor_v - syntax keyword cppSTLbool is_same_v - syntax keyword cppSTLbool is_base_of_v - syntax keyword cppSTLbool is_convertible_v - syntax keyword cppSTLbool is_callable_v - syntax keyword cppSTLbool is_nowthrow_callable_v - syntax keyword cppSTLbool conjunction_v - syntax keyword cppSTLbool disjunction_v - syntax keyword cppSTLbool negation_v - syntax keyword cppSTLbool has_unique_object_representations_v - syntax keyword cppSTLbool is_swappable_v - syntax keyword cppSTLbool is_swappable_with_v - syntax keyword cppSTLbool is_nothrow_swappable_v - syntax keyword cppSTLbool is_nothrow_swappable_with_v - syntax keyword cppSTLbool is_invocable_v - syntax keyword cppSTLbool is_invocable_r_v - syntax keyword cppSTLbool is_nothrow_invocable_v - syntax keyword cppSTLbool is_nothrow_invocable_r_v - syntax keyword cppSTLbool is_aggregate_v - syntax keyword cppSTLconstant alignment_of_v - syntax keyword cppSTLconstant rank_v - syntax keyword cppSTLconstant extent_v - syntax keyword cppSTLtype bool_constant - syntax keyword cppSTLtype is_callable - syntax keyword cppSTLtype is_nowthrow_callable - syntax keyword cppSTLtype conjunction - syntax keyword cppSTLtype disjunction - syntax keyword cppSTLtype negation - syntax keyword cppSTLtype void_t - syntax keyword cppSTLtype has_unique_object_representations - syntax keyword cppSTLtype is_swappable - syntax keyword cppSTLtype is_swappable_with - syntax keyword cppSTLtype is_nothrow_swappable - syntax keyword cppSTLtype is_nothrow_swappable_with - syntax keyword cppSTLtype is_invocable - syntax keyword cppSTLtype is_invocable_r - syntax keyword cppSTLtype is_nothrow_invocable - syntax keyword cppSTLtype is_nothrow_invocable_r - syntax keyword cppSTLtype invoke_result - syntax keyword cppSTLtype invoke_result_t - syntax keyword cppSTLtype is_aggregate - - " unordered_map, unordered_set, unordered_multimap, unordered_multiset - syntax keyword cppSTLtype node_type - syntax keyword cppSTLtype insert_return_type - syntax keyword cppSTLfunction try_emplace - syntax keyword cppSTLfunction insert_or_assign - syntax keyword cppSTLfunction extract - - " utility - syntax keyword cppSTLtype in_place_tag - syntax keyword cppSTLtype in_place_t - syntax keyword cppSTLtype in_place_type_t - syntax keyword cppSTLtype in_place_index_t - syntax keyword cppSTLfunction in_place - syntax keyword cppSTLfunction as_const - - " variant - syntax keyword cppSTLtype variant - syntax keyword cppSTLtype monostate - syntax keyword cppSTLtype variant_size - syntax keyword cppSTLtype variant_alternative - syntax keyword cppSTLtype variant_alternative_t - syntax keyword cppSTLconstant variant_size_v - syntax keyword cppSTLconstant variant_npos - syntax keyword cppSTLexception bad_variant_access - syntax keyword cppSTLfunction valueless_by_exception - syntax keyword cppSTLfunction holds_alternative - syntax keyword cppSTLfunction get_if - syntax keyword cppSTLfunction visit - " syntax keyword cppSTLfunction index -endif " C++17 - - -if !exists("cpp_no_cpp20") - " type_traits - syntax keyword cppSTLtype remove_cvref remove_cvref_t -endif - - -if exists('g:cpp_concepts_highlight') && g:cpp_concepts_highlight - syntax keyword cppStatement concept - syntax keyword cppStorageClass requires - syntax keyword cppSTLtype DefaultConstructible - syntax keyword cppSTLtype MoveConstructible - syntax keyword cppSTLtype CopyConstructible - syntax keyword cppSTLtype MoveAssignable - syntax keyword cppSTLtype CopyAssignable - syntax keyword cppSTLtype Destructible - syntax keyword cppSTLtype TriviallyCopyable - syntax keyword cppSTLtype TrivialType - syntax keyword cppSTLtype StandardLayoutType - syntax keyword cppSTLtype PODType - syntax keyword cppSTLtype EqualityComparable - syntax keyword cppSTLtype LessThanComparable - syntax keyword cppSTLtype Swappable - syntax keyword cppSTLtype ValueSwappable - syntax keyword cppSTLtype NullablePointer - syntax keyword cppSTLtype Hash - syntax keyword cppSTLtype Allocator - syntax keyword cppSTLtype FunctionObject - syntax keyword cppSTLtype Callable - syntax keyword cppSTLtype Predicate - syntax keyword cppSTLtype BinaryPredicate - syntax keyword cppSTLtype Compare - syntax keyword cppSTLtype Container - syntax keyword cppSTLtype ReversibleContainer - syntax keyword cppSTLtype AllocatorAwareContainer - syntax keyword cppSTLtype SequenceContainer - syntax keyword cppSTLtype ContiguousContainer - syntax keyword cppSTLtype AssociativeContainer - syntax keyword cppSTLtype UnorderedAssociativeContainer - syntax keyword cppSTLtype DefaultInsertable - syntax keyword cppSTLtype CopyInsertable - syntax keyword cppSTLtype CopyInsertable - syntax keyword cppSTLtype MoveInsertable - syntax keyword cppSTLtype EmplaceConstructible - syntax keyword cppSTLtype Erasable - syntax keyword cppSTLtype Iterator - syntax keyword cppSTLtype InputIterator - syntax keyword cppSTLtype OutputIterator - syntax keyword cppSTLtype ForwardIterator - syntax keyword cppSTLtype BidirectionalIterator - syntax keyword cppSTLtype RandomAccessIterator - syntax keyword cppSTLtype ContiguousIterator - syntax keyword cppSTLtype UnformattedInputFunction - syntax keyword cppSTLtype FormattedInputFunction - syntax keyword cppSTLtype UnformattedOutputFunction - syntax keyword cppSTLtype FormattedOutputFunction - syntax keyword cppSTLtype SeedSequence - syntax keyword cppSTLtype UniformRandomBitGenerator - syntax keyword cppSTLtype RandomNumberEngine - syntax keyword cppSTLtype RandomNumberEngineAdaptor - syntax keyword cppSTLtype RandomNumberDistribution - syntax keyword cppSTLtype BasicLockable - syntax keyword cppSTLtype Lockable - syntax keyword cppSTLtype TimedLockable - syntax keyword cppSTLtype Mutex - syntax keyword cppSTLtype TimedMutex - syntax keyword cppSTLtype SharedMutex - syntax keyword cppSTLtype SharedTimedMutex - syntax keyword cppSTLtype UnaryTypeTrait - syntax keyword cppSTLtype BinaryTypeTrait - syntax keyword cppSTLtype TransformationTrait - syntax keyword cppSTLtype Clock - syntax keyword cppSTLtype TrivialClock - syntax keyword cppSTLtype CharTraits - syntax keyword cppSTLtype pos_type - syntax keyword cppSTLtype off_type - syntax keyword cppSTLtype BitmaskType - syntax keyword cppSTLtype NumericType - syntax keyword cppSTLtype RegexTraits - syntax keyword cppSTLtype LiteralType -endif " C++ concepts - - -if !exists("cpp_no_boost") - syntax keyword cppSTLnamespace boost - syntax keyword cppSTLcast lexical_cast -endif " boost - - -" Default highlighting -if version >= 508 || !exists("did_cpp_syntax_inits") - if version < 508 - let did_cpp_syntax_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif - HiLink cppSTLbool Boolean - HiLink cppStorageClass StorageClass - HiLink cppStatement Statement - HiLink cppSTLfunction Function - HiLink cppSTLfunctional Typedef - HiLink cppSTLconstant Constant - HiLink cppSTLnamespace Constant - HiLink cppSTLtype Typedef - HiLink cppSTLexception Exception - HiLink cppSTLiterator Typedef - HiLink cppSTLiterator_tag Typedef - HiLink cppSTLenum Typedef - HiLink cppSTLios Function - HiLink cppSTLcast Statement " be consistent with official syntax - HiLink cppRawString String - HiLink cppRawDelimiter Delimiter - delcommand HiLink -endif diff --git a/dotfiles/.config/nvim/after/syntax/python.vim b/dotfiles/.config/nvim/after/syntax/python.vim deleted file mode 100644 index 39100c1..0000000 --- a/dotfiles/.config/nvim/after/syntax/python.vim +++ /dev/null @@ -1,562 +0,0 @@ -" Vim syntax file -" Language: Python -" Current Maintainer: Dmitry Vasiliev -" Previous Maintainer: Neil Schemenauer -" URL: https://github.com/hdima/python-syntax -" Last Change: 2015-11-01 -" Filenames: *.py -" Version: 3.6.0 -" -" Based on python.vim (from Vim 6.1 distribution) -" by Neil Schemenauer -" -" Please use the following channels for reporting bugs, offering suggestions or -" feedback: - -" - python.vim issue tracker: https://github.com/hdima/python-syntax/issues -" - Email: Dmitry Vasiliev (dima at hlabs.org) -" - Send a message or follow me for updates on Twitter: `@hdima -" `__ -" -" Contributors -" ============ -" -" List of the contributors in alphabetical order: -" -" Andrea Riciputi -" Anton Butanaev -" Antony Lee -" Caleb Adamantine -" David Briscoe -" Elizabeth Myers -" Ihor Gorobets -" Jeroen Ruigrok van der Werven -" John Eikenberry -" Joongi Kim -" Marc Weber -" Pedro Algarvio -" Victor Salgado -" Will Gray -" Yuri Habrusiev -" -" Options -" ======= -" -" :let OPTION_NAME = 1 Enable option -" :let OPTION_NAME = 0 Disable option -" -" -" Option to select Python version -" ------------------------------- -" -" python_version_2 Enable highlighting for Python 2 -" (Python 3 highlighting is enabled -" by default). Can also be set as -" a buffer (b:python_version_2) -" variable. -" -" You can also use the following local to buffer commands to switch -" between two highlighting modes: -" -" :Python2Syntax Switch to Python 2 highlighting -" mode -" :Python3Syntax Switch to Python 3 highlighting -" mode -" -" Option names used by the script -" ------------------------------- -" -" python_highlight_builtins Highlight builtin functions and -" objects -" python_highlight_builtin_objs Highlight builtin objects only -" python_highlight_builtin_funcs Highlight builtin functions only -" python_highlight_exceptions Highlight standard exceptions -" python_highlight_string_formatting Highlight % string formatting -" python_highlight_string_format Highlight str.format syntax -" python_highlight_string_templates Highlight string.Template syntax -" python_highlight_indent_errors Highlight indentation errors -" python_highlight_space_errors Highlight trailing spaces -" python_highlight_doctests Highlight doc-tests -" python_print_as_function Highlight 'print' statement as -" function for Python 2 -" python_highlight_file_headers_as_comments -" Highlight shebang and coding -" headers as comments -" -" python_highlight_all Enable all the options above -" NOTE: This option don't override -" any previously set options -" -" python_slow_sync Can be set to 0 for slow machines -" - -" For version 5.x: Clear all syntax items -" For versions greater than 6.x: Quit when a syntax file was already loaded - -" -" Commands -" -command! -buffer Python3Syntax let b:python_version_2 = 0 | let &syntax=&syntax - -" Enable option if it's not defined -function! s:EnableByDefault(name) - if !exists(a:name) - let {a:name} = 1 - endif -endfunction - -" Check if option is enabled -function! s:Enabled(name) - return exists(a:name) && {a:name} -endfunction - -" Is it Python 2 syntax? -function! s:Python2Syntax() - if exists("b:python_version_2") - return b:python_version_2 - endif - return s:Enabled("g:python_version_2") -endfunction - -" -" Default options -" - -call s:EnableByDefault("g:python_slow_sync") - -if s:Enabled("g:python_highlight_all") - call s:EnableByDefault("g:python_highlight_builtins") - if s:Enabled("g:python_highlight_builtins") - call s:EnableByDefault("g:python_highlight_builtin_objs") - call s:EnableByDefault("g:python_highlight_builtin_funcs") - endif - call s:EnableByDefault("g:python_highlight_exceptions") - call s:EnableByDefault("g:python_highlight_string_formatting") - call s:EnableByDefault("g:python_highlight_string_format") - call s:EnableByDefault("g:python_highlight_string_templates") - call s:EnableByDefault("g:python_highlight_indent_errors") - call s:EnableByDefault("g:python_highlight_space_errors") - call s:EnableByDefault("g:python_highlight_doctests") - call s:EnableByDefault("g:python_print_as_function") -endif - -" -" Keywords -" - -syn keyword pythonStatement break continue del -syn keyword pythonStatement exec return -syn keyword pythonStatement pass raise -syn keyword pythonStatement global assert -syn keyword pythonStatement lambda -syn keyword pythonStatement with -syn keyword pythonStatement def class nextgroup=pythonFunction skipwhite -syn keyword pythonRepeat for while -syn keyword pythonConditional if elif else -" The standard pyrex.vim unconditionally removes the pythonInclude group, so -" we provide a dummy group here to avoid crashing pyrex.vim. -syn keyword pythonInclude import -syn keyword pythonImport import -syn keyword pythonException try except finally -syn keyword pythonOperator and in is not or - -syn match pythonStatement "\" display -syn match pythonImport "\" display - -if s:Python2Syntax() - if !s:Enabled("g:python_print_as_function") - syn keyword pythonStatement print - endif - syn keyword pythonImport as - syn match pythonFunction "[a-zA-Z_][a-zA-Z0-9_]*" display contained -else - syn keyword pythonStatement as nonlocal None - syn match pythonStatement "\" display - syn keyword pythonBoolean True False - syn match pythonFunction "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*" display contained - syn keyword pythonStatement await - syn match pythonStatement "\" nextgroup=pythonFunction skipwhite - syn match pythonStatement "\" display - syn match pythonStatement "\" display -endif - -" -" Decorators (new in Python 2.4) -" - -syn match pythonDecorator "@" display nextgroup=pythonDottedName skipwhite -if s:Python2Syntax() - syn match pythonDottedName "[a-zA-Z_][a-zA-Z0-9_]*\%(\.[a-zA-Z_][a-zA-Z0-9_]*\)*" display contained -else - syn match pythonDottedName "\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\%(\.\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\)*" display contained -endif -syn match pythonDot "\." display containedin=pythonDottedName - -" -" Comments -" - -syn match pythonComment "#.*$" display contains=pythonTodo,@Spell -if !s:Enabled("g:python_highlight_file_headers_as_comments") - syn match pythonRun "\%^#!.*$" - syn match pythonCoding "\%^.*\%(\n.*\)\?#.*coding[:=]\s*[0-9A-Za-z-_.]\+.*$" -endif -syn keyword pythonTodo TODO FIXME XXX contained - -" -" Errors -" - -syn match pythonError "\<\d\+\D\+\>" display -syn match pythonError "[$?]" display -syn match pythonError "[&|]\{2,}" display -syn match pythonError "[=]\{3,}" display - -" Mixing spaces and tabs also may be used for pretty formatting multiline -" statements -if s:Enabled("g:python_highlight_indent_errors") - syn match pythonIndentError "^\s*\%( \t\|\t \)\s*\S"me=e-1 display -endif - -" Trailing space errors -if s:Enabled("g:python_highlight_space_errors") - syn match pythonSpaceError "\s\+$" display -endif - -" -" Strings -" - -if s:Python2Syntax() - " Python 2 strings - syn region pythonString start=+[bB]\='+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonString start=+[bB]\="+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonString start=+[bB]\="""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell - syn region pythonString start=+[bB]\='''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell -else - " Python 3 byte strings - syn region pythonBytes start=+[bB]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesError,pythonBytesContent,@Spell - syn region pythonBytes start=+[bB]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesError,pythonBytesContent,@Spell - syn region pythonBytes start=+[bB]"""+ end=+"""+ keepend contains=pythonBytesError,pythonBytesContent,pythonDocTest2,pythonSpaceError,@Spell - syn region pythonBytes start=+[bB]'''+ end=+'''+ keepend contains=pythonBytesError,pythonBytesContent,pythonDocTest,pythonSpaceError,@Spell - - syn match pythonBytesError ".\+" display contained - syn match pythonBytesContent "[\u0000-\u00ff]\+" display contained contains=pythonBytesEscape,pythonBytesEscapeError -endif - -syn match pythonBytesEscape +\\[abfnrtv'"\\]+ display contained -syn match pythonBytesEscape "\\\o\o\=\o\=" display contained -syn match pythonBytesEscapeError "\\\o\{,2}[89]" display contained -syn match pythonBytesEscape "\\x\x\{2}" display contained -syn match pythonBytesEscapeError "\\x\x\=\X" display contained -syn match pythonBytesEscape "\\$" - -syn match pythonUniEscape "\\u\x\{4}" display contained -syn match pythonUniEscapeError "\\u\x\{,3}\X" display contained -syn match pythonUniEscape "\\U\x\{8}" display contained -syn match pythonUniEscapeError "\\U\x\{,7}\X" display contained -syn match pythonUniEscape "\\N{[A-Z ]\+}" display contained -syn match pythonUniEscapeError "\\N{[^A-Z ]\+}" display contained - -if s:Python2Syntax() - " Python 2 Unicode strings - syn region pythonUniString start=+[uU]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonUniString start=+[uU]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonUniString start=+[uU]"""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell - syn region pythonUniString start=+[uU]'''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell -else - " Python 3 strings - syn region pythonString start=+'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonString start=+"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,@Spell - syn region pythonString start=+"""+ end=+"""+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest2,pythonSpaceError,@Spell - syn region pythonString start=+'''+ end=+'''+ keepend contains=pythonBytesEscape,pythonBytesEscapeError,pythonUniEscape,pythonUniEscapeError,pythonDocTest,pythonSpaceError,@Spell -endif - -if s:Python2Syntax() - " Python 2 Unicode raw strings - syn region pythonUniRawString start=+[uU][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell - syn region pythonUniRawString start=+[uU][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,pythonUniRawEscape,pythonUniRawEscapeError,@Spell - syn region pythonUniRawString start=+[uU][rR]"""+ end=+"""+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest2,pythonSpaceError,@Spell - syn region pythonUniRawString start=+[uU][rR]'''+ end=+'''+ keepend contains=pythonUniRawEscape,pythonUniRawEscapeError,pythonDocTest,pythonSpaceError,@Spell - - syn match pythonUniRawEscape "\([^\\]\(\\\\\)*\)\@<=\\u\x\{4}" display contained - syn match pythonUniRawEscapeError "\([^\\]\(\\\\\)*\)\@<=\\u\x\{,3}\X" display contained -endif - -" Python 2/3 raw strings -if s:Python2Syntax() - syn region pythonRawString start=+[bB]\=[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawString start=+[bB]\=[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawString start=+[bB]\=[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell - syn region pythonRawString start=+[bB]\=[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell -else - syn region pythonRawString start=+[rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawString start=+[rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawString start=+[rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell - syn region pythonRawString start=+[rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell - - syn region pythonRawBytes start=+[bB][rR]'+ skip=+\\\\\|\\'\|\\$+ excludenl end=+'+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawBytes start=+[bB][rR]"+ skip=+\\\\\|\\"\|\\$+ excludenl end=+"+ end=+$+ keepend contains=pythonRawEscape,@Spell - syn region pythonRawBytes start=+[bB][rR]"""+ end=+"""+ keepend contains=pythonDocTest2,pythonSpaceError,@Spell - syn region pythonRawBytes start=+[bB][rR]'''+ end=+'''+ keepend contains=pythonDocTest,pythonSpaceError,@Spell -endif - -syn match pythonRawEscape +\\['"]+ display transparent contained - -if s:Enabled("g:python_highlight_string_formatting") - " % operator string formatting - if s:Python2Syntax() - syn match pythonStrFormatting "%\%(([^)]\+)\)\=[-#0 +]*\d*\%(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - syn match pythonStrFormatting "%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - else - syn match pythonStrFormatting "%\%(([^)]\+)\)\=[-#0 +]*\d*\%(\.\d\+\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonRawString - syn match pythonStrFormatting "%[-#0 +]*\%(\*\|\d\+\)\=\%(\.\%(\*\|\d\+\)\)\=[hlL]\=[diouxXeEfFgGcrs%]" contained containedin=pythonString,pythonRawString - endif -endif - -if s:Enabled("g:python_highlight_string_format") - " str.format syntax - if s:Python2Syntax() - syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - syn match pythonStrFormat "{\%(\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\d\+\)\=\%(\.\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\[\%(\d\+\|[^!:\}]\+\)\]\)*\%(![rsa]\)\=\%(:\%({\%(\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\d\+\)}\|\%([^}]\=[<>=^]\)\=[ +-]\=#\=0\=\d*,\=\%(\.\d\+\)\=[bcdeEfFgGnosxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - else - syn match pythonStrFormat "{{\|}}" contained containedin=pythonString,pythonRawString - syn match pythonStrFormat "{\%(\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\d\+\)\=\%(\.\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\[\%(\d\+\|[^!:\}]\+\)\]\)*\%(![rsa]\)\=\%(:\%({\%(\%([^[:cntrl:][:space:][:punct:][:digit:]]\|_\)\%([^[:cntrl:][:punct:][:space:]]\|_\)*\|\d\+\)}\|\%([^}]\=[<>=^]\)\=[ +-]\=#\=0\=\d*,\=\%(\.\d\+\)\=[bcdeEfFgGnosxX%]\=\)\=\)\=}" contained containedin=pythonString,pythonRawString - endif -endif - -if s:Enabled("g:python_highlight_string_templates") - " string.Template format - if s:Python2Syntax() - syn match pythonStrTemplate "\$\$" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - syn match pythonStrTemplate "\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - syn match pythonStrTemplate "\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonUniString,pythonUniRawString,pythonRawString - else - syn match pythonStrTemplate "\$\$" contained containedin=pythonString,pythonRawString - syn match pythonStrTemplate "\${[a-zA-Z_][a-zA-Z0-9_]*}" contained containedin=pythonString,pythonRawString - syn match pythonStrTemplate "\$[a-zA-Z_][a-zA-Z0-9_]*" contained containedin=pythonString,pythonRawString - endif -endif - -if s:Enabled("g:python_highlight_doctests") - " DocTests - syn region pythonDocTest start="^\s*>>>" end=+'''+he=s-1 end="^\s*$" contained - syn region pythonDocTest2 start="^\s*>>>" end=+"""+he=s-1 end="^\s*$" contained -endif - -" -" Numbers (ints, longs, floats, complex) -" - -if s:Python2Syntax() - syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\+\x*[lL]\=\>" display - syn match pythonOctError "\<0[oO]\=\o*\D\+\d*[lL]\=\>" display - syn match pythonBinError "\<0[bB][01]*\D\+\d*[lL]\=\>" display - - syn match pythonHexNumber "\<0[xX]\x\+[lL]\=\>" display - syn match pythonOctNumber "\<0[oO]\o\+[lL]\=\>" display - syn match pythonBinNumber "\<0[bB][01]\+[lL]\=\>" display - - syn match pythonNumberError "\<\d\+\D[lL]\=\>" display - syn match pythonNumber "\<\d[lL]\=\>" display - syn match pythonNumber "\<[0-9]\d\+[lL]\=\>" display - syn match pythonNumber "\<\d\+[lLjJ]\>" display - - syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*[lL]\=\>" display - syn match pythonBinError "\<0[bB][01]*[2-9]\d*[lL]\=\>" display -else - syn match pythonHexError "\<0[xX]\x*[g-zG-Z]\x*\>" display - syn match pythonOctError "\<0[oO]\=\o*\D\+\d*\>" display - syn match pythonBinError "\<0[bB][01]*\D\+\d*\>" display - - syn match pythonHexNumber "\<0[xX]\x\+\>" display - syn match pythonOctNumber "\<0[oO]\o\+\>" display - syn match pythonBinNumber "\<0[bB][01]\+\>" display - - syn match pythonNumberError "\<\d\+\D\>" display - syn match pythonNumberError "\<0\d\+\>" display - syn match pythonNumber "\<\d\>" display - syn match pythonNumber "\<[1-9]\d\+\>" display - syn match pythonNumber "\<\d\+[jJ]\>" display - - syn match pythonOctError "\<0[oO]\=\o*[8-9]\d*\>" display - syn match pythonBinError "\<0[bB][01]*[2-9]\d*\>" display -endif - -syn match pythonFloat "\.\d\+\%([eE][+-]\=\d\+\)\=[jJ]\=\>" display -syn match pythonFloat "\<\d\+[eE][+-]\=\d\+[jJ]\=\>" display -syn match pythonFloat "\<\d\+\.\d*\%([eE][+-]\=\d\+\)\=[jJ]\=" display - -" -" Builtin objects and types -" - -if s:Enabled("g:python_highlight_builtin_objs") - if s:Python2Syntax() - syn keyword pythonBuiltinObj None - syn keyword pythonBoolean True False - endif - syn keyword pythonBuiltinObj Ellipsis NotImplemented - syn keyword pythonBuiltinObj __debug__ __doc__ __file__ __name__ __package__ -endif - -" -" Builtin functions -" - -if s:Enabled("g:python_highlight_builtin_funcs") - if s:Python2Syntax() - syn keyword pythonBuiltinFunc apply basestring buffer callable coerce - syn keyword pythonBuiltinFunc execfile file help intern long raw_input - syn keyword pythonBuiltinFunc reduce reload unichr unicode xrange - if s:Enabled("g:python_print_as_function") - syn keyword pythonBuiltinFunc print - endif - else - syn keyword pythonBuiltinFunc ascii exec memoryview print - endif - syn keyword pythonBuiltinFunc __import__ abs all any - syn keyword pythonBuiltinFunc bin bool bytearray bytes - syn keyword pythonBuiltinFunc chr classmethod cmp compile complex - syn keyword pythonBuiltinFunc delattr dict dir divmod enumerate eval - syn keyword pythonBuiltinFunc filter float format frozenset getattr - syn keyword pythonBuiltinFunc globals hasattr hash hex id - syn keyword pythonBuiltinFunc input int isinstance - syn keyword pythonBuiltinFunc issubclass iter len list locals map max - syn keyword pythonBuiltinFunc min next object oct open ord - syn keyword pythonBuiltinFunc pow property range - syn keyword pythonBuiltinFunc repr reversed round set setattr - syn keyword pythonBuiltinFunc slice sorted staticmethod str sum super tuple - syn keyword pythonBuiltinFunc type vars zip -endif - -" -" Builtin exceptions and warnings -" - -if s:Enabled("g:python_highlight_exceptions") - if s:Python2Syntax() - syn keyword pythonExClass StandardError - else - syn keyword pythonExClass BlockingIOError ChildProcessError - syn keyword pythonExClass ConnectionError BrokenPipeError - syn keyword pythonExClass ConnectionAbortedError ConnectionRefusedError - syn keyword pythonExClass ConnectionResetError FileExistsError - syn keyword pythonExClass FileNotFoundError InterruptedError - syn keyword pythonExClass IsADirectoryError NotADirectoryError - syn keyword pythonExClass PermissionError ProcessLookupError TimeoutError - - syn keyword pythonExClass ResourceWarning - endif - syn keyword pythonExClass BaseException - syn keyword pythonExClass Exception ArithmeticError - syn keyword pythonExClass LookupError EnvironmentError - - syn keyword pythonExClass AssertionError AttributeError BufferError EOFError - syn keyword pythonExClass FloatingPointError GeneratorExit IOError - syn keyword pythonExClass ImportError IndexError KeyError - syn keyword pythonExClass KeyboardInterrupt MemoryError NameError - syn keyword pythonExClass NotImplementedError OSError OverflowError - syn keyword pythonExClass ReferenceError RuntimeError StopIteration - syn keyword pythonExClass SyntaxError IndentationError TabError - syn keyword pythonExClass SystemError SystemExit TypeError - syn keyword pythonExClass UnboundLocalError UnicodeError - syn keyword pythonExClass UnicodeEncodeError UnicodeDecodeError - syn keyword pythonExClass UnicodeTranslateError ValueError VMSError - syn keyword pythonExClass WindowsError ZeroDivisionError - - syn keyword pythonExClass Warning UserWarning BytesWarning DeprecationWarning - syn keyword pythonExClass PendingDepricationWarning SyntaxWarning - syn keyword pythonExClass RuntimeWarning FutureWarning - syn keyword pythonExClass ImportWarning UnicodeWarning -endif - -if s:Enabled("g:python_slow_sync") - syn sync minlines=2000 -else - " This is fast but code inside triple quoted strings screws it up. It - " is impossible to fix because the only way to know if you are inside a - " triple quoted string is to start from the beginning of the file. - syn sync match pythonSync grouphere NONE "):$" - syn sync maxlines=200 -endif - -if version >= 508 || !exists("did_python_syn_inits") - if version <= 508 - let did_python_syn_inits = 1 - command -nargs=+ HiLink hi link - else - command -nargs=+ HiLink hi def link - endif - - HiLink pythonStatement Statement - HiLink pythonImport Include - HiLink pythonFunction Function - HiLink pythonConditional Conditional - HiLink pythonRepeat Repeat - HiLink pythonException Exception - HiLink pythonOperator Operator - - HiLink pythonDecorator Define - HiLink pythonDottedName Function - HiLink pythonDot Normal - - HiLink pythonComment Comment - if !s:Enabled("g:python_highlight_file_headers_as_comments") - HiLink pythonCoding Special - HiLink pythonRun Special - endif - HiLink pythonTodo Todo - - HiLink pythonError Error - HiLink pythonIndentError Error - HiLink pythonSpaceError Error - - HiLink pythonString String - HiLink pythonRawString String - - HiLink pythonUniEscape Special - HiLink pythonUniEscapeError Error - - if s:Python2Syntax() - HiLink pythonUniString String - HiLink pythonUniRawString String - HiLink pythonUniRawEscape Special - HiLink pythonUniRawEscapeError Error - else - HiLink pythonBytes String - HiLink pythonRawBytes String - HiLink pythonBytesContent String - HiLink pythonBytesError Error - HiLink pythonBytesEscape Special - HiLink pythonBytesEscapeError Error - endif - - HiLink pythonStrFormatting Special - HiLink pythonStrFormat Special - HiLink pythonStrTemplate Special - - HiLink pythonDocTest Special - HiLink pythonDocTest2 Special - - HiLink pythonNumber Number - HiLink pythonHexNumber Number - HiLink pythonOctNumber Number - HiLink pythonBinNumber Number - HiLink pythonFloat Float - HiLink pythonNumberError Error - HiLink pythonOctError Error - HiLink pythonHexError Error - HiLink pythonBinError Error - - HiLink pythonBoolean Boolean - - HiLink pythonBuiltinObj Structure - HiLink pythonBuiltinFunc Function - - HiLink pythonExClass Structure - - delcommand HiLink -endif - -let b:current_syntax = "python" diff --git a/dotfiles/.config/nvim/autoload b/dotfiles/.config/nvim/autoload new file mode 120000 index 0000000..46e9709 --- /dev/null +++ b/dotfiles/.config/nvim/autoload @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/autoload \ No newline at end of file diff --git a/dotfiles/.config/nvim/autoload/airline/themes/gruvbox.vim b/dotfiles/.config/nvim/autoload/airline/themes/gruvbox.vim deleted file mode 100644 index 6862a81..0000000 --- a/dotfiles/.config/nvim/autoload/airline/themes/gruvbox.vim +++ /dev/null @@ -1,79 +0,0 @@ -" ----------------------------------------------------------------------------- -" File: gruvbox.vim -" Description: Retro groove color scheme for Airline -" Author: morhetz -" Source: https://github.com/morhetz/gruvbox -" Last Modified: 12 Aug 2017 -" ----------------------------------------------------------------------------- - -let g:airline#themes#gruvbox#palette = {} - -function! airline#themes#gruvbox#refresh() - - let M0 = airline#themes#get_highlight('Identifier') - let accents_group = airline#themes#get_highlight('Special') - let modified_group = [M0[0], '', M0[2], '', ''] - let warning_group = airline#themes#get_highlight2(['Normal', 'bg'], ['Question', 'fg']) - let error_group = airline#themes#get_highlight2(['Normal', 'bg'], ['WarningMsg', 'fg']) - - let s:N1 = airline#themes#get_highlight2(['Normal', 'bg'], ['StatusLineNC', 'bg']) - let s:N2 = airline#themes#get_highlight2(['StatusLineNC', 'bg'], ['Pmenu', 'bg']) - let s:N3 = airline#themes#get_highlight2(['StatusLineNC', 'bg'], ['CursorLine', 'bg']) - let g:airline#themes#gruvbox#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - let g:airline#themes#gruvbox#palette.normal_modified = { 'airline_c': modified_group } - let g:airline#themes#gruvbox#palette.normal.airline_warning = warning_group - let g:airline#themes#gruvbox#palette.normal_modified.airline_warning = warning_group - let g:airline#themes#gruvbox#palette.normal.airline_error = error_group - let g:airline#themes#gruvbox#palette.normal_modified.airline_error = error_group - - let s:I1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Identifier', 'fg']) - let s:I2 = s:N2 - let s:I3 = airline#themes#get_highlight2(['Normal', 'fg'], ['Pmenu', 'bg']) - let g:airline#themes#gruvbox#palette.insert = airline#themes#generate_color_map(s:I1, s:I2, s:I3) - let g:airline#themes#gruvbox#palette.insert_modified = g:airline#themes#gruvbox#palette.normal_modified - let g:airline#themes#gruvbox#palette.insert.airline_warning = g:airline#themes#gruvbox#palette.normal.airline_warning - let g:airline#themes#gruvbox#palette.insert_modified.airline_warning = g:airline#themes#gruvbox#palette.normal_modified.airline_warning - let g:airline#themes#gruvbox#palette.insert.airline_error = g:airline#themes#gruvbox#palette.normal.airline_error - let g:airline#themes#gruvbox#palette.insert_modified.airline_error = g:airline#themes#gruvbox#palette.normal_modified.airline_error - - let s:R1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Structure', 'fg']) - let s:R2 = s:I2 - let s:R3 = s:I3 - let g:airline#themes#gruvbox#palette.replace = airline#themes#generate_color_map(s:R1, s:R2, s:R3) - let g:airline#themes#gruvbox#palette.replace_modified = g:airline#themes#gruvbox#palette.normal_modified - let g:airline#themes#gruvbox#palette.replace.airline_warning = g:airline#themes#gruvbox#palette.normal.airline_warning - let g:airline#themes#gruvbox#palette.replace_modified.airline_warning = g:airline#themes#gruvbox#palette.normal_modified.airline_warning - let g:airline#themes#gruvbox#palette.replace.airline_error = g:airline#themes#gruvbox#palette.normal.airline_error - let g:airline#themes#gruvbox#palette.replace_modified.airline_error = g:airline#themes#gruvbox#palette.normal_modified.airline_error - - let s:V1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Question', 'fg']) - let s:V2 = s:N2 - let s:V3 = airline#themes#get_highlight2(['Normal', 'bg'], ['TabLine', 'fg']) - let g:airline#themes#gruvbox#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3) - let g:airline#themes#gruvbox#palette.visual_modified = { 'airline_c': [ s:V3[0], '', s:V3[2], '', '' ] } - let g:airline#themes#gruvbox#palette.visual.airline_warning = g:airline#themes#gruvbox#palette.normal.airline_warning - let g:airline#themes#gruvbox#palette.visual_modified.airline_warning = g:airline#themes#gruvbox#palette.normal_modified.airline_warning - let g:airline#themes#gruvbox#palette.visual.airline_error = g:airline#themes#gruvbox#palette.normal.airline_error - let g:airline#themes#gruvbox#palette.visual_modified.airline_error = g:airline#themes#gruvbox#palette.normal_modified.airline_error - - let s:IA = airline#themes#get_highlight2(['TabLine', 'fg'], ['CursorLine', 'bg']) - let g:airline#themes#gruvbox#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#gruvbox#palette.inactive_modified = { 'airline_c': modified_group } - - let g:airline#themes#gruvbox#palette.accents = { 'red': accents_group } - - let s:TF = airline#themes#get_highlight2(['Normal', 'bg'], ['Normal', 'bg']) - let g:airline#themes#gruvbox#palette.tabline = { - \ 'airline_tab': s:N2, - \ 'airline_tabsel': s:N1, - \ 'airline_tabtype': s:V1, - \ 'airline_tabfill': s:TF, - \ 'airline_tabhid': s:IA, - \ 'airline_tabmod': s:I1 - \ } - -endfunction - -call airline#themes#gruvbox#refresh() - -" vim: set sw=2 ts=2 sts=2 et tw=80 ft=vim fdm=marker: diff --git a/dotfiles/.config/nvim/autoload/airline/themes/quantum.vim b/dotfiles/.config/nvim/autoload/airline/themes/quantum.vim deleted file mode 100644 index c446c5a..0000000 --- a/dotfiles/.config/nvim/autoload/airline/themes/quantum.vim +++ /dev/null @@ -1,42 +0,0 @@ -let g:airline#themes#quantum#palette = {} - -function! airline#themes#quantum#refresh() - let g:airline#themes#quantum#palette.accents = { - \ 'red': airline#themes#get_highlight('Identifier'), - \ } - - let s:N1 = airline#themes#get_highlight2(['CursorLine', 'bg'], ['Directory', 'fg'], 'bold') - let s:N2 = airline#themes#get_highlight('Pmenu') - let s:N3 = airline#themes#get_highlight('TabLine') - let g:airline#themes#quantum#palette.normal = airline#themes#generate_color_map(s:N1, s:N2, s:N3) - - let group = airline#themes#get_highlight('Type') - let g:airline#themes#quantum#palette.normal_modified = { - \ 'airline_c': [ group[0], '', group[2], '', '' ] - \ } - - let s:I1 = airline#themes#get_highlight2(['CursorLine', 'bg'], ['MoreMsg', 'fg'], 'bold') - let g:airline#themes#quantum#palette.insert = airline#themes#generate_color_map(s:I1, s:N2, s:N3) - let g:airline#themes#quantum#palette.insert_modified = g:airline#themes#quantum#palette.normal_modified - - let s:R1 = airline#themes#get_highlight2(['CursorLine', 'bg'], ['Error', 'fg'], 'bold') - let g:airline#themes#quantum#palette.replace = airline#themes#generate_color_map(s:R1, s:N2, s:N3) - let g:airline#themes#quantum#palette.replace_modified = g:airline#themes#quantum#palette.normal_modified - - let s:V1 = airline#themes#get_highlight2(['CursorLine', 'bg'], ['Statement', 'fg'], 'bold') - let g:airline#themes#quantum#palette.visual = airline#themes#generate_color_map(s:V1, s:N2, s:N3) - let g:airline#themes#quantum#palette.visual_modified = g:airline#themes#quantum#palette.normal_modified - - let s:IA = airline#themes#get_highlight2(['NonText', 'fg'], ['CursorLine', 'bg']) - let g:airline#themes#quantum#palette.inactive = airline#themes#generate_color_map(s:IA, s:IA, s:IA) - let g:airline#themes#quantum#palette.inactive_modified = g:airline#themes#quantum#palette.normal_modified - - if get(g:, 'loaded_ctrlp', 0) - let g:airline#themes#quantum#palette.ctrlp = airline#extensions#ctrlp#generate_color_map( - \ airline#themes#get_highlight('CursorLine'), - \ airline#themes#get_highlight2(['Operator', 'fg'], ['Normal', 'bg']), - \ airline#themes#get_highlight2(['Normal', 'bg'], ['Operator', 'fg'], 'bold')) - endif -endfun - -call airline#themes#quantum#refresh() diff --git a/dotfiles/.config/nvim/autoload/plug.vim b/dotfiles/.config/nvim/autoload/plug.vim deleted file mode 100644 index 78fdc03..0000000 --- a/dotfiles/.config/nvim/autoload/plug.vim +++ /dev/null @@ -1,2597 +0,0 @@ -" vim-plug: Vim plugin manager -" ============================ -" -" Download plug.vim and put it in ~/.vim/autoload -" -" curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ -" https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim -" -" Edit your .vimrc -" -" call plug#begin('~/.vim/plugged') -" -" " Make sure you use single quotes -" -" " Shorthand notation; fetches https://github.com/junegunn/vim-easy-align -" Plug 'junegunn/vim-easy-align' -" -" " Any valid git URL is allowed -" Plug 'https://github.com/junegunn/vim-github-dashboard.git' -" -" " Multiple Plug commands can be written in a single line using | separators -" Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets' -" -" " On-demand loading -" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } -" Plug 'tpope/vim-fireplace', { 'for': 'clojure' } -" -" " Using a non-master branch -" Plug 'rdnetto/YCM-Generator', { 'branch': 'stable' } -" -" " Using a tagged release; wildcard allowed (requires git 1.9.2 or above) -" Plug 'fatih/vim-go', { 'tag': '*' } -" -" " Plugin options -" Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' } -" -" " Plugin outside ~/.vim/plugged with post-update hook -" Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } -" -" " Unmanaged plugin (manually installed and updated) -" Plug '~/my-prototype-plugin' -" -" " Initialize plugin system -" call plug#end() -" -" Then reload .vimrc and :PlugInstall to install plugins. -" -" Plug options: -" -"| Option | Description | -"| ----------------------- | ------------------------------------------------ | -"| `branch`/`tag`/`commit` | Branch/tag/commit of the repository to use | -"| `rtp` | Subdirectory that contains Vim plugin | -"| `dir` | Custom directory for the plugin | -"| `as` | Use different name for the plugin | -"| `do` | Post-update hook (string or funcref) | -"| `on` | On-demand loading: Commands or ``-mappings | -"| `for` | On-demand loading: File types | -"| `frozen` | Do not update unless explicitly specified | -" -" More information: https://github.com/junegunn/vim-plug -" -" -" Copyright (c) 2017 Junegunn Choi -" -" MIT License -" -" 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. - -if exists('g:loaded_plug') - finish -endif -let g:loaded_plug = 1 - -let s:cpo_save = &cpo -set cpo&vim - -let s:plug_src = 'https://github.com/junegunn/vim-plug.git' -let s:plug_tab = get(s:, 'plug_tab', -1) -let s:plug_buf = get(s:, 'plug_buf', -1) -let s:mac_gui = has('gui_macvim') && has('gui_running') -let s:is_win = has('win32') -let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) -let s:vim8 = has('patch-8.0.0039') && exists('*job_start') -if s:is_win && &shellslash - set noshellslash - let s:me = resolve(expand(':p')) - set shellslash -else - let s:me = resolve(expand(':p')) -endif -let s:base_spec = { 'branch': 'master', 'frozen': 0 } -let s:TYPE = { -\ 'string': type(''), -\ 'list': type([]), -\ 'dict': type({}), -\ 'funcref': type(function('call')) -\ } -let s:loaded = get(s:, 'loaded', {}) -let s:triggers = get(s:, 'triggers', {}) - -if s:is_win - function! s:plug_call(fn, ...) - let shellslash = &shellslash - try - set noshellslash - return call(a:fn, a:000) - finally - let &shellslash = shellslash - endtry - endfunction -else - function! s:plug_call(fn, ...) - return call(a:fn, a:000) - endfunction -endif - -function! s:plug_getcwd() - return s:plug_call('getcwd') -endfunction - -function! s:plug_fnamemodify(fname, mods) - return s:plug_call('fnamemodify', a:fname, a:mods) -endfunction - -function! s:plug_expand(fmt) - return s:plug_call('expand', a:fmt, 1) -endfunction - -function! s:plug_tempname() - return s:plug_call('tempname') -endfunction - -function! plug#begin(...) - if a:0 > 0 - let s:plug_home_org = a:1 - let home = s:path(s:plug_fnamemodify(s:plug_expand(a:1), ':p')) - elseif exists('g:plug_home') - let home = s:path(g:plug_home) - elseif !empty(&rtp) - let home = s:path(split(&rtp, ',')[0]) . '/plugged' - else - return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') - endif - if s:plug_fnamemodify(home, ':t') ==# 'plugin' && s:plug_fnamemodify(home, ':h') ==# s:first_rtp - return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') - endif - - let g:plug_home = home - let g:plugs = {} - let g:plugs_order = [] - let s:triggers = {} - - call s:define_commands() - return 1 -endfunction - -function! s:define_commands() - command! -nargs=+ -bar Plug call plug#() - if !executable('git') - return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') - endif - if has('win32') - \ && &shellslash - \ && (&shell =~# 'cmd\.exe' || &shell =~# 'powershell\.exe') - return s:err('vim-plug does not support shell, ' . &shell . ', when shellslash is set.') - endif - if !has('nvim') - \ && (has('win32') || has('win32unix')) - \ && !has('multi_byte') - return s:err('Vim needs +multi_byte feature on Windows to run shell commands. Enable +iconv for best results.') - endif - command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(0, []) - command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(0, []) - command! -nargs=0 -bar -bang PlugClean call s:clean(0) - command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif - command! -nargs=0 -bar PlugStatus call s:status() - command! -nargs=0 -bar PlugDiff call s:diff() - command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(0, ) -endfunction - -function! s:to_a(v) - return type(a:v) == s:TYPE.list ? a:v : [a:v] -endfunction - -function! s:to_s(v) - return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" -endfunction - -function! s:glob(from, pattern) - return s:lines(globpath(a:from, a:pattern)) -endfunction - -function! s:source(from, ...) - let found = 0 - for pattern in a:000 - for vim in s:glob(a:from, pattern) - execute 'source' s:esc(vim) - let found = 1 - endfor - endfor - return found -endfunction - -function! s:assoc(dict, key, val) - let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) -endfunction - -function! s:ask(message, ...) - call inputsave() - echohl WarningMsg - let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) - echohl None - call inputrestore() - echo "\r" - return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 -endfunction - -function! s:ask_no_interrupt(...) - try - return call('s:ask', a:000) - catch - return 0 - endtry -endfunction - -function! s:lazy(plug, opt) - return has_key(a:plug, a:opt) && - \ (empty(s:to_a(a:plug[a:opt])) || - \ !isdirectory(a:plug.dir) || - \ len(s:glob(s:rtp(a:plug), 'plugin')) || - \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) -endfunction - -function! plug#end() - if !exists('g:plugs') - return s:err('Call plug#begin() first') - endif - - if exists('#PlugLOD') - augroup PlugLOD - autocmd! - augroup END - augroup! PlugLOD - endif - let lod = { 'ft': {}, 'map': {}, 'cmd': {} } - - if exists('g:did_load_filetypes') - filetype off - endif - for name in g:plugs_order - if !has_key(g:plugs, name) - continue - endif - let plug = g:plugs[name] - if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') - let s:loaded[name] = 1 - continue - endif - - if has_key(plug, 'on') - let s:triggers[name] = { 'map': [], 'cmd': [] } - for cmd in s:to_a(plug.on) - if cmd =~? '^.\+' - if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) - call s:assoc(lod.map, cmd, name) - endif - call add(s:triggers[name].map, cmd) - elseif cmd =~# '^[A-Z]' - let cmd = substitute(cmd, '!*$', '', '') - if exists(':'.cmd) != 2 - call s:assoc(lod.cmd, cmd, name) - endif - call add(s:triggers[name].cmd, cmd) - else - call s:err('Invalid `on` option: '.cmd. - \ '. Should start with an uppercase letter or ``.') - endif - endfor - endif - - if has_key(plug, 'for') - let types = s:to_a(plug.for) - if !empty(types) - augroup filetypedetect - call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') - augroup END - endif - for type in types - call s:assoc(lod.ft, type, name) - endfor - endif - endfor - - for [cmd, names] in items(lod.cmd) - execute printf( - \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , %s)', - \ cmd, string(cmd), string(names)) - endfor - - for [map, names] in items(lod.map) - for [mode, map_prefix, key_prefix] in - \ [['i', '', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] - execute printf( - \ '%snoremap %s %s:call lod_map(%s, %s, %s, "%s")', - \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) - endfor - endfor - - for [ft, names] in items(lod.ft) - augroup PlugLOD - execute printf('autocmd FileType %s call lod_ft(%s, %s)', - \ ft, string(ft), string(names)) - augroup END - endfor - - call s:reorg_rtp() - filetype plugin indent on - if has('vim_starting') - if has('syntax') && !exists('g:syntax_on') - syntax enable - end - else - call s:reload_plugins() - endif -endfunction - -function! s:loaded_names() - return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') -endfunction - -function! s:load_plugin(spec) - call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') -endfunction - -function! s:reload_plugins() - for name in s:loaded_names() - call s:load_plugin(g:plugs[name]) - endfor -endfunction - -function! s:trim(str) - return substitute(a:str, '[\/]\+$', '', '') -endfunction - -function! s:version_requirement(val, min) - for idx in range(0, len(a:min) - 1) - let v = get(a:val, idx, 0) - if v < a:min[idx] | return 0 - elseif v > a:min[idx] | return 1 - endif - endfor - return 1 -endfunction - -function! s:git_version_requirement(...) - if !exists('s:git_version') - let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') - endif - return s:version_requirement(s:git_version, a:000) -endfunction - -function! s:progress_opt(base) - return a:base && !s:is_win && - \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' -endfunction - -function! s:rtp(spec) - return s:path(a:spec.dir . get(a:spec, 'rtp', '')) -endfunction - -if s:is_win - function! s:path(path) - return s:trim(substitute(a:path, '/', '\', 'g')) - endfunction - - function! s:dirpath(path) - return s:path(a:path) . '\' - endfunction - - function! s:is_local_plug(repo) - return a:repo =~? '^[a-z]:\|^[%~]' - endfunction - - " Copied from fzf - function! s:wrap_cmds(cmds) - let cmds = [ - \ '@echo off', - \ 'setlocal enabledelayedexpansion'] - \ + (type(a:cmds) == type([]) ? a:cmds : [a:cmds]) - \ + ['endlocal'] - if has('iconv') - if !exists('s:codepage') - let s:codepage = libcallnr('kernel32.dll', 'GetACP', 0) - endif - return map(cmds, printf('iconv(v:val."\r", "%s", "cp%d")', &encoding, s:codepage)) - endif - return map(cmds, 'v:val."\r"') - endfunction - - function! s:batchfile(cmd) - let batchfile = s:plug_tempname().'.bat' - call writefile(s:wrap_cmds(a:cmd), batchfile) - let cmd = plug#shellescape(batchfile, {'shell': &shell, 'script': 0}) - if &shell =~# 'powershell\.exe' - let cmd = '& ' . cmd - endif - return [batchfile, cmd] - endfunction -else - function! s:path(path) - return s:trim(a:path) - endfunction - - function! s:dirpath(path) - return substitute(a:path, '[/\\]*$', '/', '') - endfunction - - function! s:is_local_plug(repo) - return a:repo[0] =~ '[/$~]' - endfunction -endif - -function! s:err(msg) - echohl ErrorMsg - echom '[vim-plug] '.a:msg - echohl None -endfunction - -function! s:warn(cmd, msg) - echohl WarningMsg - execute a:cmd 'a:msg' - echohl None -endfunction - -function! s:esc(path) - return escape(a:path, ' ') -endfunction - -function! s:escrtp(path) - return escape(a:path, ' ,') -endfunction - -function! s:remove_rtp() - for name in s:loaded_names() - let rtp = s:rtp(g:plugs[name]) - execute 'set rtp-='.s:escrtp(rtp) - let after = globpath(rtp, 'after') - if isdirectory(after) - execute 'set rtp-='.s:escrtp(after) - endif - endfor -endfunction - -function! s:reorg_rtp() - if !empty(s:first_rtp) - execute 'set rtp-='.s:first_rtp - execute 'set rtp-='.s:last_rtp - endif - - " &rtp is modified from outside - if exists('s:prtp') && s:prtp !=# &rtp - call s:remove_rtp() - unlet! s:middle - endif - - let s:middle = get(s:, 'middle', &rtp) - let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') - let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') - let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') - \ . ','.s:middle.',' - \ . join(map(afters, 'escape(v:val, ",")'), ',') - let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') - let s:prtp = &rtp - - if !empty(s:first_rtp) - execute 'set rtp^='.s:first_rtp - execute 'set rtp+='.s:last_rtp - endif -endfunction - -function! s:doautocmd(...) - if exists('#'.join(a:000, '#')) - execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '' : '') join(a:000) - endif -endfunction - -function! s:dobufread(names) - for name in a:names - let path = s:rtp(g:plugs[name]) - for dir in ['ftdetect', 'ftplugin', 'after/ftdetect', 'after/ftplugin'] - if len(finddir(dir, path)) - if exists('#BufRead') - doautocmd BufRead - endif - return - endif - endfor - endfor -endfunction - -function! plug#load(...) - if a:0 == 0 - return s:err('Argument missing: plugin name(s) required') - endif - if !exists('g:plugs') - return s:err('plug#begin was not called') - endif - let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 - let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') - if !empty(unknowns) - let s = len(unknowns) > 1 ? 's' : '' - return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) - end - let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') - if !empty(unloaded) - for name in unloaded - call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - endfor - call s:dobufread(unloaded) - return 1 - end - return 0 -endfunction - -function! s:remove_triggers(name) - if !has_key(s:triggers, a:name) - return - endif - for cmd in s:triggers[a:name].cmd - execute 'silent! delc' cmd - endfor - for map in s:triggers[a:name].map - execute 'silent! unmap' map - execute 'silent! iunmap' map - endfor - call remove(s:triggers, a:name) -endfunction - -function! s:lod(names, types, ...) - for name in a:names - call s:remove_triggers(name) - let s:loaded[name] = 1 - endfor - call s:reorg_rtp() - - for name in a:names - let rtp = s:rtp(g:plugs[name]) - for dir in a:types - call s:source(rtp, dir.'/**/*.vim') - endfor - if a:0 - if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) - execute 'runtime' a:1 - endif - call s:source(rtp, a:2) - endif - call s:doautocmd('User', name) - endfor -endfunction - -function! s:lod_ft(pat, names) - let syn = 'syntax/'.a:pat.'.vim' - call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) - execute 'autocmd! PlugLOD FileType' a:pat - call s:doautocmd('filetypeplugin', 'FileType') - call s:doautocmd('filetypeindent', 'FileType') -endfunction - -function! s:lod_cmd(cmd, bang, l1, l2, args, names) - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - call s:dobufread(a:names) - execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) -endfunction - -function! s:lod_map(map, names, with_prefix, prefix) - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - call s:dobufread(a:names) - let extra = '' - while 1 - let c = getchar(0) - if c == 0 - break - endif - let extra .= nr2char(c) - endwhile - - if a:with_prefix - let prefix = v:count ? v:count : '' - let prefix .= '"'.v:register.a:prefix - if mode(1) == 'no' - if v:operator == 'c' - let prefix = "\" . prefix - endif - let prefix .= v:operator - endif - call feedkeys(prefix, 'n') - endif - call feedkeys(substitute(a:map, '^', "\", '') . extra) -endfunction - -function! plug#(repo, ...) - if a:0 > 1 - return s:err('Invalid number of arguments (1..2)') - endif - - try - let repo = s:trim(a:repo) - let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec - let name = get(opts, 'as', s:plug_fnamemodify(repo, ':t:s?\.git$??')) - let spec = extend(s:infer_properties(name, repo), opts) - if !has_key(g:plugs, name) - call add(g:plugs_order, name) - endif - let g:plugs[name] = spec - let s:loaded[name] = get(s:loaded, name, 0) - catch - return s:err(v:exception) - endtry -endfunction - -function! s:parse_options(arg) - let opts = copy(s:base_spec) - let type = type(a:arg) - if type == s:TYPE.string - let opts.tag = a:arg - elseif type == s:TYPE.dict - call extend(opts, a:arg) - if has_key(opts, 'dir') - let opts.dir = s:dirpath(s:plug_expand(opts.dir)) - endif - else - throw 'Invalid argument type (expected: string or dictionary)' - endif - return opts -endfunction - -function! s:infer_properties(name, repo) - let repo = a:repo - if s:is_local_plug(repo) - return { 'dir': s:dirpath(s:plug_expand(repo)) } - else - if repo =~ ':' - let uri = repo - else - if repo !~ '/' - throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) - endif - let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') - let uri = printf(fmt, repo) - endif - return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } - endif -endfunction - -function! s:install(force, names) - call s:update_impl(0, a:force, a:names) -endfunction - -function! s:update(force, names) - call s:update_impl(1, a:force, a:names) -endfunction - -function! plug#helptags() - if !exists('g:plugs') - return s:err('plug#begin was not called') - endif - for spec in values(g:plugs) - let docd = join([s:rtp(spec), 'doc'], '/') - if isdirectory(docd) - silent! execute 'helptags' s:esc(docd) - endif - endfor - return 1 -endfunction - -function! s:syntax() - syntax clear - syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber - syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX - syn match plugNumber /[0-9]\+[0-9.]*/ contained - syn match plugBracket /[[\]]/ contained - syn match plugX /x/ contained - syn match plugDash /^-/ - syn match plugPlus /^+/ - syn match plugStar /^*/ - syn match plugMessage /\(^- \)\@<=.*/ - syn match plugName /\(^- \)\@<=[^ ]*:/ - syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ - syn match plugTag /(tag: [^)]\+)/ - syn match plugInstall /\(^+ \)\@<=[^:]*/ - syn match plugUpdate /\(^* \)\@<=[^:]*/ - syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag - syn match plugEdge /^ \X\+$/ - syn match plugEdge /^ \X*/ contained nextgroup=plugSha - syn match plugSha /[0-9a-f]\{7,9}/ contained - syn match plugRelDate /([^)]*)$/ contained - syn match plugNotLoaded /(not loaded)$/ - syn match plugError /^x.*/ - syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ - syn match plugH2 /^.*:\n-\+$/ - syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean - hi def link plug1 Title - hi def link plug2 Repeat - hi def link plugH2 Type - hi def link plugX Exception - hi def link plugBracket Structure - hi def link plugNumber Number - - hi def link plugDash Special - hi def link plugPlus Constant - hi def link plugStar Boolean - - hi def link plugMessage Function - hi def link plugName Label - hi def link plugInstall Function - hi def link plugUpdate Type - - hi def link plugError Error - hi def link plugDeleted Ignore - hi def link plugRelDate Comment - hi def link plugEdge PreProc - hi def link plugSha Identifier - hi def link plugTag Constant - - hi def link plugNotLoaded Comment -endfunction - -function! s:lpad(str, len) - return a:str . repeat(' ', a:len - len(a:str)) -endfunction - -function! s:lines(msg) - return split(a:msg, "[\r\n]") -endfunction - -function! s:lastline(msg) - return get(s:lines(a:msg), -1, '') -endfunction - -function! s:new_window() - execute get(g:, 'plug_window', 'vertical topleft new') -endfunction - -function! s:plug_window_exists() - let buflist = tabpagebuflist(s:plug_tab) - return !empty(buflist) && index(buflist, s:plug_buf) >= 0 -endfunction - -function! s:switch_in() - if !s:plug_window_exists() - return 0 - endif - - if winbufnr(0) != s:plug_buf - let s:pos = [tabpagenr(), winnr(), winsaveview()] - execute 'normal!' s:plug_tab.'gt' - let winnr = bufwinnr(s:plug_buf) - execute winnr.'wincmd w' - call add(s:pos, winsaveview()) - else - let s:pos = [winsaveview()] - endif - - setlocal modifiable - return 1 -endfunction - -function! s:switch_out(...) - call winrestview(s:pos[-1]) - setlocal nomodifiable - if a:0 > 0 - execute a:1 - endif - - if len(s:pos) > 1 - execute 'normal!' s:pos[0].'gt' - execute s:pos[1] 'wincmd w' - call winrestview(s:pos[2]) - endif -endfunction - -function! s:finish_bindings() - nnoremap R :call retry() - nnoremap D :PlugDiff - nnoremap S :PlugStatus - nnoremap U :call status_update() - xnoremap U :call status_update() - nnoremap ]] :silent! call section('') - nnoremap [[ :silent! call section('b') -endfunction - -function! s:prepare(...) - if empty(s:plug_getcwd()) - throw 'Invalid current working directory. Cannot proceed.' - endif - - for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] - if exists(evar) - throw evar.' detected. Cannot proceed.' - endif - endfor - - call s:job_abort() - if s:switch_in() - if b:plug_preview == 1 - pc - endif - enew - else - call s:new_window() - endif - - nnoremap q :if b:plug_preview==1pcendifbd - if a:0 == 0 - call s:finish_bindings() - endif - let b:plug_preview = -1 - let s:plug_tab = tabpagenr() - let s:plug_buf = winbufnr(0) - call s:assign_name() - - for k in ['', 'L', 'o', 'X', 'd', 'dd'] - execute 'silent! unmap ' k - endfor - setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell - if exists('+colorcolumn') - setlocal colorcolumn= - endif - setf vim-plug - if exists('g:syntax_on') - call s:syntax() - endif -endfunction - -function! s:assign_name() - " Assign buffer name - let prefix = '[Plugins]' - let name = prefix - let idx = 2 - while bufexists(name) - let name = printf('%s (%s)', prefix, idx) - let idx = idx + 1 - endwhile - silent! execute 'f' fnameescape(name) -endfunction - -function! s:chsh(swap) - let prev = [&shell, &shellcmdflag, &shellredir] - if !s:is_win && a:swap - set shell=sh shellredir=>%s\ 2>&1 - endif - return prev -endfunction - -function! s:bang(cmd, ...) - let batchfile = '' - try - let [sh, shellcmdflag, shrd] = s:chsh(a:0) - " FIXME: Escaping is incomplete. We could use shellescape with eval, - " but it won't work on Windows. - let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd - if s:is_win - let [batchfile, cmd] = s:batchfile(cmd) - endif - let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') - execute "normal! :execute g:_plug_bang\\" - finally - unlet g:_plug_bang - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win && filereadable(batchfile) - call delete(batchfile) - endif - endtry - return v:shell_error ? 'Exit status: ' . v:shell_error : '' -endfunction - -function! s:regress_bar() - let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') - call s:progress_bar(2, bar, len(bar)) -endfunction - -function! s:is_updated(dir) - return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) -endfunction - -function! s:do(pull, force, todo) - for [name, spec] in items(a:todo) - if !isdirectory(spec.dir) - continue - endif - let installed = has_key(s:update.new, name) - let updated = installed ? 0 : - \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) - if a:force || installed || updated - execute 'cd' s:esc(spec.dir) - call append(3, '- Post-update hook for '. name .' ... ') - let error = '' - let type = type(spec.do) - if type == s:TYPE.string - if spec.do[0] == ':' - if !get(s:loaded, name, 0) - let s:loaded[name] = 1 - call s:reorg_rtp() - endif - call s:load_plugin(spec) - try - execute spec.do[1:] - catch - let error = v:exception - endtry - if !s:plug_window_exists() - cd - - throw 'Warning: vim-plug was terminated by the post-update hook of '.name - endif - else - let error = s:bang(spec.do) - endif - elseif type == s:TYPE.funcref - try - let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') - call spec.do({ 'name': name, 'status': status, 'force': a:force }) - catch - let error = v:exception - endtry - else - let error = 'Invalid hook type' - endif - call s:switch_in() - call setline(4, empty(error) ? (getline(4) . 'OK') - \ : ('x' . getline(4)[1:] . error)) - if !empty(error) - call add(s:update.errors, name) - call s:regress_bar() - endif - cd - - endif - endfor -endfunction - -function! s:hash_match(a, b) - return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 -endfunction - -function! s:checkout(spec) - let sha = a:spec.commit - let output = s:system('git rev-parse HEAD', a:spec.dir) - if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) - let output = s:system( - \ 'git fetch --depth 999999 && git checkout '.plug#shellescape(sha).' --', a:spec.dir) - endif - return output -endfunction - -function! s:finish(pull) - let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) - if new_frozen - let s = new_frozen > 1 ? 's' : '' - call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) - endif - call append(3, '- Finishing ... ') | 4 - redraw - call plug#helptags() - call plug#end() - call setline(4, getline(4) . 'Done!') - redraw - let msgs = [] - if !empty(s:update.errors) - call add(msgs, "Press 'R' to retry.") - endif - if a:pull && len(s:update.new) < len(filter(getline(5, '$'), - \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) - call add(msgs, "Press 'D' to see the updated changes.") - endif - echo join(msgs, ' ') - call s:finish_bindings() -endfunction - -function! s:retry() - if empty(s:update.errors) - return - endif - echo - call s:update_impl(s:update.pull, s:update.force, - \ extend(copy(s:update.errors), [s:update.threads])) -endfunction - -function! s:is_managed(name) - return has_key(g:plugs[a:name], 'uri') -endfunction - -function! s:names(...) - return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) -endfunction - -function! s:check_ruby() - silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") - if !exists('g:plug_ruby') - redraw! - return s:warn('echom', 'Warning: Ruby interface is broken') - endif - let ruby_version = split(g:plug_ruby, '\.') - unlet g:plug_ruby - return s:version_requirement(ruby_version, [1, 8, 7]) -endfunction - -function! s:update_impl(pull, force, args) abort - let sync = index(a:args, '--sync') >= 0 || has('vim_starting') - let args = filter(copy(a:args), 'v:val != "--sync"') - let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? - \ remove(args, -1) : get(g:, 'plug_threads', 16) - - let managed = filter(copy(g:plugs), 's:is_managed(v:key)') - let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : - \ filter(managed, 'index(args, v:key) >= 0') - - if empty(todo) - return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) - endif - - if !s:is_win && s:git_version_requirement(2, 3) - let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' - let $GIT_TERMINAL_PROMPT = 0 - for plug in values(todo) - let plug.uri = substitute(plug.uri, - \ '^https://git::@github\.com', 'https://github.com', '') - endfor - endif - - if !isdirectory(g:plug_home) - try - call mkdir(g:plug_home, 'p') - catch - return s:err(printf('Invalid plug directory: %s. '. - \ 'Try to call plug#begin with a valid directory', g:plug_home)) - endtry - endif - - if has('nvim') && !exists('*jobwait') && threads > 1 - call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') - endif - - let use_job = s:nvim || s:vim8 - let python = (has('python') || has('python3')) && !use_job - let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() - - let s:update = { - \ 'start': reltime(), - \ 'all': todo, - \ 'todo': copy(todo), - \ 'errors': [], - \ 'pull': a:pull, - \ 'force': a:force, - \ 'new': {}, - \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, - \ 'bar': '', - \ 'fin': 0 - \ } - - call s:prepare(1) - call append(0, ['', '']) - normal! 2G - silent! redraw - - let s:clone_opt = get(g:, 'plug_shallow', 1) ? - \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' - - if has('win32unix') || has('wsl') - let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' - endif - - let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' - - " Python version requirement (>= 2.7) - if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 - redir => pyv - silent python import platform; print platform.python_version() - redir END - let python = s:version_requirement( - \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) - endif - - if (python || ruby) && s:update.threads > 1 - try - let imd = &imd - if s:mac_gui - set noimd - endif - if ruby - call s:update_ruby() - else - call s:update_python() - endif - catch - let lines = getline(4, '$') - let printed = {} - silent! 4,$d _ - for line in lines - let name = s:extract_name(line, '.', '') - if empty(name) || !has_key(printed, name) - call append('$', line) - if !empty(name) - let printed[name] = 1 - if line[0] == 'x' && index(s:update.errors, name) < 0 - call add(s:update.errors, name) - end - endif - endif - endfor - finally - let &imd = imd - call s:update_finish() - endtry - else - call s:update_vim() - while use_job && sync - sleep 100m - if s:update.fin - break - endif - endwhile - endif -endfunction - -function! s:log4(name, msg) - call setline(4, printf('- %s (%s)', a:msg, a:name)) - redraw -endfunction - -function! s:update_finish() - if exists('s:git_terminal_prompt') - let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt - endif - if s:switch_in() - call append(3, '- Updating ...') | 4 - for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) - let [pos, _] = s:logpos(name) - if !pos - continue - endif - if has_key(spec, 'commit') - call s:log4(name, 'Checking out '.spec.commit) - let out = s:checkout(spec) - elseif has_key(spec, 'tag') - let tag = spec.tag - if tag =~ '\*' - let tags = s:lines(s:system('git tag --list '.plug#shellescape(tag).' --sort -version:refname 2>&1', spec.dir)) - if !v:shell_error && !empty(tags) - let tag = tags[0] - call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) - call append(3, '') - endif - endif - call s:log4(name, 'Checking out '.tag) - let out = s:system('git checkout -q '.plug#shellescape(tag).' -- 2>&1', spec.dir) - else - let branch = get(spec, 'branch', 'master') - call s:log4(name, 'Merging origin/'.s:esc(branch)) - let out = s:system('git checkout -q '.plug#shellescape(branch).' -- 2>&1' - \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only '.plug#shellescape('origin/'.branch).' 2>&1')), spec.dir) - endif - if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && - \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) - call s:log4(name, 'Updating submodules. This may take a while.') - let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) - endif - let msg = s:format_message(v:shell_error ? 'x': '-', name, out) - if v:shell_error - call add(s:update.errors, name) - call s:regress_bar() - silent execute pos 'd _' - call append(4, msg) | 4 - elseif !empty(out) - call setline(pos, msg[0]) - endif - redraw - endfor - silent 4 d _ - try - call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) - catch - call s:warn('echom', v:exception) - call s:warn('echo', '') - return - endtry - call s:finish(s:update.pull) - call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') - call s:switch_out('normal! gg') - endif -endfunction - -function! s:job_abort() - if (!s:nvim && !s:vim8) || !exists('s:jobs') - return - endif - - for [name, j] in items(s:jobs) - if s:nvim - silent! call jobstop(j.jobid) - elseif s:vim8 - silent! call job_stop(j.jobid) - endif - if j.new - call s:rm_rf(g:plugs[name].dir) - endif - endfor - let s:jobs = {} -endfunction - -function! s:last_non_empty_line(lines) - let len = len(a:lines) - for idx in range(len) - let line = a:lines[len-idx-1] - if !empty(line) - return line - endif - endfor - return '' -endfunction - -function! s:job_out_cb(self, data) abort - let self = a:self - let data = remove(self.lines, -1) . a:data - let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') - call extend(self.lines, lines) - " To reduce the number of buffer updates - let self.tick = get(self, 'tick', -1) + 1 - if !self.running || self.tick % len(s:jobs) == 0 - let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') - let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) - call s:log(bullet, self.name, result) - endif -endfunction - -function! s:job_exit_cb(self, data) abort - let a:self.running = 0 - let a:self.error = a:data != 0 - call s:reap(a:self.name) - call s:tick() -endfunction - -function! s:job_cb(fn, job, ch, data) - if !s:plug_window_exists() " plug window closed - return s:job_abort() - endif - call call(a:fn, [a:job, a:data]) -endfunction - -function! s:nvim_cb(job_id, data, event) dict abort - return a:event == 'stdout' ? - \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : - \ s:job_cb('s:job_exit_cb', self, 0, a:data) -endfunction - -function! s:spawn(name, cmd, opts) - let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], - \ 'new': get(a:opts, 'new', 0) } - let s:jobs[a:name] = job - let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir, 0) : a:cmd - let argv = s:is_win ? ['cmd', '/s', '/c', '"'.cmd.'"'] : ['sh', '-c', cmd] - - if s:nvim - call extend(job, { - \ 'on_stdout': function('s:nvim_cb'), - \ 'on_exit': function('s:nvim_cb'), - \ }) - let jid = s:plug_call('jobstart', argv, job) - if jid > 0 - let job.jobid = jid - else - let job.running = 0 - let job.error = 1 - let job.lines = [jid < 0 ? argv[0].' is not executable' : - \ 'Invalid arguments (or job table is full)'] - endif - elseif s:vim8 - let jid = job_start(s:is_win ? join(argv, ' ') : argv, { - \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), - \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), - \ 'out_mode': 'raw' - \}) - if job_status(jid) == 'run' - let job.jobid = jid - else - let job.running = 0 - let job.error = 1 - let job.lines = ['Failed to start job'] - endif - else - let job.lines = s:lines(call('s:system', [cmd])) - let job.error = v:shell_error != 0 - let job.running = 0 - endif -endfunction - -function! s:reap(name) - let job = s:jobs[a:name] - if job.error - call add(s:update.errors, a:name) - elseif get(job, 'new', 0) - let s:update.new[a:name] = 1 - endif - let s:update.bar .= job.error ? 'x' : '=' - - let bullet = job.error ? 'x' : '-' - let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) - call s:log(bullet, a:name, empty(result) ? 'OK' : result) - call s:bar() - - call remove(s:jobs, a:name) -endfunction - -function! s:bar() - if s:switch_in() - let total = len(s:update.all) - call setline(1, (s:update.pull ? 'Updating' : 'Installing'). - \ ' plugins ('.len(s:update.bar).'/'.total.')') - call s:progress_bar(2, s:update.bar, total) - call s:switch_out() - endif -endfunction - -function! s:logpos(name) - let max = line('$') - for i in range(4, max > 4 ? max : 4) - if getline(i) =~# '^[-+x*] '.a:name.':' - for j in range(i + 1, max > 5 ? max : 5) - if getline(j) !~ '^ ' - return [i, j - 1] - endif - endfor - return [i, i] - endif - endfor - return [0, 0] -endfunction - -function! s:log(bullet, name, lines) - if s:switch_in() - let [b, e] = s:logpos(a:name) - if b > 0 - silent execute printf('%d,%d d _', b, e) - if b > winheight('.') - let b = 4 - endif - else - let b = 4 - endif - " FIXME For some reason, nomodifiable is set after :d in vim8 - setlocal modifiable - call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) - call s:switch_out() - endif -endfunction - -function! s:update_vim() - let s:jobs = {} - - call s:bar() - call s:tick() -endfunction - -function! s:tick() - let pull = s:update.pull - let prog = s:progress_opt(s:nvim || s:vim8) -while 1 " Without TCO, Vim stack is bound to explode - if empty(s:update.todo) - if empty(s:jobs) && !s:update.fin - call s:update_finish() - let s:update.fin = 1 - endif - return - endif - - let name = keys(s:update.todo)[0] - let spec = remove(s:update.todo, name) - let new = empty(globpath(spec.dir, '.git', 1)) - - call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') - redraw - - let has_tag = has_key(spec, 'tag') - if !new - let [error, _] = s:git_validate(spec, 0) - if empty(error) - if pull - let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' - call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) - else - let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } - endif - else - let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } - endif - else - call s:spawn(name, - \ printf('git clone %s %s %s %s 2>&1', - \ has_tag ? '' : s:clone_opt, - \ prog, - \ plug#shellescape(spec.uri, {'script': 0}), - \ plug#shellescape(s:trim(spec.dir), {'script': 0})), { 'new': 1 }) - endif - - if !s:jobs[name].running - call s:reap(name) - endif - if len(s:jobs) >= s:update.threads - break - endif -endwhile -endfunction - -function! s:update_python() -let py_exe = has('python') ? 'python' : 'python3' -execute py_exe "<< EOF" -import datetime -import functools -import os -try: - import queue -except ImportError: - import Queue as queue -import random -import re -import shutil -import signal -import subprocess -import tempfile -import threading as thr -import time -import traceback -import vim - -G_NVIM = vim.eval("has('nvim')") == '1' -G_PULL = vim.eval('s:update.pull') == '1' -G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 -G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) -G_CLONE_OPT = vim.eval('s:clone_opt') -G_PROGRESS = vim.eval('s:progress_opt(1)') -G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) -G_STOP = thr.Event() -G_IS_WIN = vim.eval('s:is_win') == '1' - -class PlugError(Exception): - def __init__(self, msg): - self.msg = msg -class CmdTimedOut(PlugError): - pass -class CmdFailed(PlugError): - pass -class InvalidURI(PlugError): - pass -class Action(object): - INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] - -class Buffer(object): - def __init__(self, lock, num_plugs, is_pull): - self.bar = '' - self.event = 'Updating' if is_pull else 'Installing' - self.lock = lock - self.maxy = int(vim.eval('winheight(".")')) - self.num_plugs = num_plugs - - def __where(self, name): - """ Find first line with name in current buffer. Return line num. """ - found, lnum = False, 0 - matcher = re.compile('^[-+x*] {0}:'.format(name)) - for line in vim.current.buffer: - if matcher.search(line) is not None: - found = True - break - lnum += 1 - - if not found: - lnum = -1 - return lnum - - def header(self): - curbuf = vim.current.buffer - curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) - - num_spaces = self.num_plugs - len(self.bar) - curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') - - with self.lock: - vim.command('normal! 2G') - vim.command('redraw') - - def write(self, action, name, lines): - first, rest = lines[0], lines[1:] - msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] - msg.extend([' ' + line for line in rest]) - - try: - if action == Action.ERROR: - self.bar += 'x' - vim.command("call add(s:update.errors, '{0}')".format(name)) - elif action == Action.DONE: - self.bar += '=' - - curbuf = vim.current.buffer - lnum = self.__where(name) - if lnum != -1: # Found matching line num - del curbuf[lnum] - if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): - lnum = 3 - else: - lnum = 3 - curbuf.append(msg, lnum) - - self.header() - except vim.error: - pass - -class Command(object): - CD = 'cd /d' if G_IS_WIN else 'cd' - - def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): - self.cmd = cmd - if cmd_dir: - self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) - self.timeout = timeout - self.callback = cb if cb else (lambda msg: None) - self.clean = clean if clean else (lambda: None) - self.proc = None - - @property - def alive(self): - """ Returns true only if command still running. """ - return self.proc and self.proc.poll() is None - - def execute(self, ntries=3): - """ Execute the command with ntries if CmdTimedOut. - Returns the output of the command if no Exception. - """ - attempt, finished, limit = 0, False, self.timeout - - while not finished: - try: - attempt += 1 - result = self.try_command() - finished = True - return result - except CmdTimedOut: - if attempt != ntries: - self.notify_retry() - self.timeout += limit - else: - raise - - def notify_retry(self): - """ Retry required for command, notify user. """ - for count in range(3, 0, -1): - if G_STOP.is_set(): - raise KeyboardInterrupt - msg = 'Timeout. Will retry in {0} second{1} ...'.format( - count, 's' if count != 1 else '') - self.callback([msg]) - time.sleep(1) - self.callback(['Retrying ...']) - - def try_command(self): - """ Execute a cmd & poll for callback. Returns list of output. - Raises CmdFailed -> return code for Popen isn't 0 - Raises CmdTimedOut -> command exceeded timeout without new output - """ - first_line = True - - try: - tfile = tempfile.NamedTemporaryFile(mode='w+b') - preexec_fn = not G_IS_WIN and os.setsid or None - self.proc = subprocess.Popen(self.cmd, stdout=tfile, - stderr=subprocess.STDOUT, - stdin=subprocess.PIPE, shell=True, - preexec_fn=preexec_fn) - thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) - thrd.start() - - thread_not_started = True - while thread_not_started: - try: - thrd.join(0.1) - thread_not_started = False - except RuntimeError: - pass - - while self.alive: - if G_STOP.is_set(): - raise KeyboardInterrupt - - if first_line or random.random() < G_LOG_PROB: - first_line = False - line = '' if G_IS_WIN else nonblock_read(tfile.name) - if line: - self.callback([line]) - - time_diff = time.time() - os.path.getmtime(tfile.name) - if time_diff > self.timeout: - raise CmdTimedOut(['Timeout!']) - - thrd.join(0.5) - - tfile.seek(0) - result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] - - if self.proc.returncode != 0: - raise CmdFailed([''] + result) - - return result - except: - self.terminate() - raise - - def terminate(self): - """ Terminate process and cleanup. """ - if self.alive: - if G_IS_WIN: - os.kill(self.proc.pid, signal.SIGINT) - else: - os.killpg(self.proc.pid, signal.SIGTERM) - self.clean() - -class Plugin(object): - def __init__(self, name, args, buf_q, lock): - self.name = name - self.args = args - self.buf_q = buf_q - self.lock = lock - self.tag = args.get('tag', 0) - - def manage(self): - try: - if os.path.exists(self.args['dir']): - self.update() - else: - self.install() - with self.lock: - thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) - except PlugError as exc: - self.write(Action.ERROR, self.name, exc.msg) - except KeyboardInterrupt: - G_STOP.set() - self.write(Action.ERROR, self.name, ['Interrupted!']) - except: - # Any exception except those above print stack trace - msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) - self.write(Action.ERROR, self.name, msg.split('\n')) - raise - - def install(self): - target = self.args['dir'] - if target[-1] == '\\': - target = target[0:-1] - - def clean(target): - def _clean(): - try: - shutil.rmtree(target) - except OSError: - pass - return _clean - - self.write(Action.INSTALL, self.name, ['Installing ...']) - callback = functools.partial(self.write, Action.INSTALL, self.name) - cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( - '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], - esc(target)) - com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) - result = com.execute(G_RETRIES) - self.write(Action.DONE, self.name, result[-1:]) - - def repo_uri(self): - cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' - command = Command(cmd, self.args['dir'], G_TIMEOUT,) - result = command.execute(G_RETRIES) - return result[-1] - - def update(self): - actual_uri = self.repo_uri() - expect_uri = self.args['uri'] - regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') - ma = regex.match(actual_uri) - mb = regex.match(expect_uri) - if ma is None or mb is None or ma.groups() != mb.groups(): - msg = ['', - 'Invalid URI: {0}'.format(actual_uri), - 'Expected {0}'.format(expect_uri), - 'PlugClean required.'] - raise InvalidURI(msg) - - if G_PULL: - self.write(Action.UPDATE, self.name, ['Updating ...']) - callback = functools.partial(self.write, Action.UPDATE, self.name) - fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' - cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) - com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) - result = com.execute(G_RETRIES) - self.write(Action.DONE, self.name, result[-1:]) - else: - self.write(Action.DONE, self.name, ['Already installed']) - - def write(self, action, name, msg): - self.buf_q.put((action, name, msg)) - -class PlugThread(thr.Thread): - def __init__(self, tname, args): - super(PlugThread, self).__init__() - self.tname = tname - self.args = args - - def run(self): - thr.current_thread().name = self.tname - buf_q, work_q, lock = self.args - - try: - while not G_STOP.is_set(): - name, args = work_q.get_nowait() - plug = Plugin(name, args, buf_q, lock) - plug.manage() - work_q.task_done() - except queue.Empty: - pass - -class RefreshThread(thr.Thread): - def __init__(self, lock): - super(RefreshThread, self).__init__() - self.lock = lock - self.running = True - - def run(self): - while self.running: - with self.lock: - thread_vim_command('noautocmd normal! a') - time.sleep(0.33) - - def stop(self): - self.running = False - -if G_NVIM: - def thread_vim_command(cmd): - vim.session.threadsafe_call(lambda: vim.command(cmd)) -else: - def thread_vim_command(cmd): - vim.command(cmd) - -def esc(name): - return '"' + name.replace('"', '\"') + '"' - -def nonblock_read(fname): - """ Read a file with nonblock flag. Return the last line. """ - fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) - buf = os.read(fread, 100000).decode('utf-8', 'replace') - os.close(fread) - - line = buf.rstrip('\r\n') - left = max(line.rfind('\r'), line.rfind('\n')) - if left != -1: - left += 1 - line = line[left:] - - return line - -def main(): - thr.current_thread().name = 'main' - nthreads = int(vim.eval('s:update.threads')) - plugs = vim.eval('s:update.todo') - mac_gui = vim.eval('s:mac_gui') == '1' - - lock = thr.Lock() - buf = Buffer(lock, len(plugs), G_PULL) - buf_q, work_q = queue.Queue(), queue.Queue() - for work in plugs.items(): - work_q.put(work) - - start_cnt = thr.active_count() - for num in range(nthreads): - tname = 'PlugT-{0:02}'.format(num) - thread = PlugThread(tname, (buf_q, work_q, lock)) - thread.start() - if mac_gui: - rthread = RefreshThread(lock) - rthread.start() - - while not buf_q.empty() or thr.active_count() != start_cnt: - try: - action, name, msg = buf_q.get(True, 0.25) - buf.write(action, name, ['OK'] if not msg else msg) - buf_q.task_done() - except queue.Empty: - pass - except KeyboardInterrupt: - G_STOP.set() - - if mac_gui: - rthread.stop() - rthread.join() - -main() -EOF -endfunction - -function! s:update_ruby() - ruby << EOF - module PlugStream - SEP = ["\r", "\n", nil] - def get_line - buffer = '' - loop do - char = readchar rescue return - if SEP.include? char.chr - buffer << $/ - break - else - buffer << char - end - end - buffer - end - end unless defined?(PlugStream) - - def esc arg - %["#{arg.gsub('"', '\"')}"] - end - - def killall pid - pids = [pid] - if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM - pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } - else - unless `which pgrep 2> /dev/null`.empty? - children = pids - until children.empty? - children = children.map { |pid| - `pgrep -P #{pid}`.lines.map { |l| l.chomp } - }.flatten - pids += children - end - end - pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } - end - end - - def compare_git_uri a, b - regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} - regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) - end - - require 'thread' - require 'fileutils' - require 'timeout' - running = true - iswin = VIM::evaluate('s:is_win').to_i == 1 - pull = VIM::evaluate('s:update.pull').to_i == 1 - base = VIM::evaluate('g:plug_home') - all = VIM::evaluate('s:update.todo') - limit = VIM::evaluate('get(g:, "plug_timeout", 60)') - tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 - nthr = VIM::evaluate('s:update.threads').to_i - maxy = VIM::evaluate('winheight(".")').to_i - vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ - cd = iswin ? 'cd /d' : 'cd' - tot = VIM::evaluate('len(s:update.todo)') || 0 - bar = '' - skip = 'Already installed' - mtx = Mutex.new - take1 = proc { mtx.synchronize { running && all.shift } } - logh = proc { - cnt = bar.length - $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" - $curbuf[2] = '[' + bar.ljust(tot) + ']' - VIM::command('normal! 2G') - VIM::command('redraw') - } - where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } - log = proc { |name, result, type| - mtx.synchronize do - ing = ![true, false].include?(type) - bar += type ? '=' : 'x' unless ing - b = case type - when :install then '+' when :update then '*' - when true, nil then '-' else - VIM::command("call add(s:update.errors, '#{name}')") - 'x' - end - result = - if type || type.nil? - ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] - elsif result =~ /^Interrupted|^Timeout/ - ["#{b} #{name}: #{result}"] - else - ["#{b} #{name}"] + result.lines.map { |l| " " << l } - end - if lnum = where.call(name) - $curbuf.delete lnum - lnum = 4 if ing && lnum > maxy - end - result.each_with_index do |line, offset| - $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) - end - logh.call - end - } - bt = proc { |cmd, name, type, cleanup| - tried = timeout = 0 - begin - tried += 1 - timeout += limit - fd = nil - data = '' - if iswin - Timeout::timeout(timeout) do - tmp = VIM::evaluate('tempname()') - system("(#{cmd}) > #{tmp}") - data = File.read(tmp).chomp - File.unlink tmp rescue nil - end - else - fd = IO.popen(cmd).extend(PlugStream) - first_line = true - log_prob = 1.0 / nthr - while line = Timeout::timeout(timeout) { fd.get_line } - data << line - log.call name, line.chomp, type if name && (first_line || rand < log_prob) - first_line = false - end - fd.close - end - [$? == 0, data.chomp] - rescue Timeout::Error, Interrupt => e - if fd && !fd.closed? - killall fd.pid - fd.close - end - cleanup.call if cleanup - if e.is_a?(Timeout::Error) && tried < tries - 3.downto(1) do |countdown| - s = countdown > 1 ? 's' : '' - log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type - sleep 1 - end - log.call name, 'Retrying ...', type - retry - end - [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] - end - } - main = Thread.current - threads = [] - watcher = Thread.new { - if vim7 - while VIM::evaluate('getchar(1)') - sleep 0.1 - end - else - require 'io/console' # >= Ruby 1.9 - nil until IO.console.getch == 3.chr - end - mtx.synchronize do - running = false - threads.each { |t| t.raise Interrupt } unless vim7 - end - threads.each { |t| t.join rescue nil } - main.kill - } - refresh = Thread.new { - while true - mtx.synchronize do - break unless running - VIM::command('noautocmd normal! a') - end - sleep 0.2 - end - } if VIM::evaluate('s:mac_gui') == 1 - - clone_opt = VIM::evaluate('s:clone_opt') - progress = VIM::evaluate('s:progress_opt(1)') - nthr.times do - mtx.synchronize do - threads << Thread.new { - while pair = take1.call - name = pair.first - dir, uri, tag = pair.last.values_at *%w[dir uri tag] - exists = File.directory? dir - ok, result = - if exists - chdir = "#{cd} #{iswin ? dir : esc(dir)}" - ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil - current_uri = data.lines.to_a.last - if !ret - if data =~ /^Interrupted|^Timeout/ - [false, data] - else - [false, [data.chomp, "PlugClean required."].join($/)] - end - elsif !compare_git_uri(current_uri, uri) - [false, ["Invalid URI: #{current_uri}", - "Expected: #{uri}", - "PlugClean required."].join($/)] - else - if pull - log.call name, 'Updating ...', :update - fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' - bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil - else - [true, skip] - end - end - else - d = esc dir.sub(%r{[\\/]+$}, '') - log.call name, 'Installing ...', :install - bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { - FileUtils.rm_rf dir - } - end - mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok - log.call name, result, ok - end - } if running - end - end - threads.each { |t| t.join rescue nil } - logh.call - refresh.kill if refresh - watcher.kill -EOF -endfunction - -function! s:shellesc_cmd(arg, script) - let escaped = substitute('"'.a:arg.'"', '[&|<>()@^!"]', '^&', 'g') - return substitute(escaped, '%', (a:script ? '%' : '^') . '&', 'g') -endfunction - -function! s:shellesc_ps1(arg) - return "'".substitute(escape(a:arg, '\"'), "'", "''", 'g')."'" -endfunction - -function! s:shellesc_sh(arg) - return "'".substitute(a:arg, "'", "'\\\\''", 'g')."'" -endfunction - -function! plug#shellescape(arg, ...) - let opts = a:0 > 0 && type(a:1) == s:TYPE.dict ? a:1 : {} - let shell = get(opts, 'shell', s:is_win ? 'cmd.exe' : 'sh') - let script = get(opts, 'script', 1) - if shell =~# 'cmd\.exe' - return s:shellesc_cmd(a:arg, script) - elseif shell =~# 'powershell\.exe' || shell =~# 'pwsh$' - return s:shellesc_ps1(a:arg) - endif - return s:shellesc_sh(a:arg) -endfunction - -function! s:glob_dir(path) - return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') -endfunction - -function! s:progress_bar(line, bar, total) - call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') -endfunction - -function! s:compare_git_uri(a, b) - " See `git help clone' - " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] - " [git@] github.com[:port] : junegunn/vim-plug [.git] - " file:// / junegunn/vim-plug [/] - " / junegunn/vim-plug [/] - let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' - let ma = matchlist(a:a, pat) - let mb = matchlist(a:b, pat) - return ma[1:2] ==# mb[1:2] -endfunction - -function! s:format_message(bullet, name, message) - if a:bullet != 'x' - return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] - else - let lines = map(s:lines(a:message), '" ".v:val') - return extend([printf('x %s:', a:name)], lines) - endif -endfunction - -function! s:with_cd(cmd, dir, ...) - let script = a:0 > 0 ? a:1 : 1 - return printf('cd%s %s && %s', s:is_win ? ' /d' : '', plug#shellescape(a:dir, {'script': script}), a:cmd) -endfunction - -function! s:system(cmd, ...) - let batchfile = '' - try - let [sh, shellcmdflag, shrd] = s:chsh(1) - let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd - if s:is_win - let [batchfile, cmd] = s:batchfile(cmd) - endif - return system(cmd) - finally - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win && filereadable(batchfile) - call delete(batchfile) - endif - endtry -endfunction - -function! s:system_chomp(...) - let ret = call('s:system', a:000) - return v:shell_error ? '' : substitute(ret, '\n$', '', '') -endfunction - -function! s:git_validate(spec, check_branch) - let err = '' - if isdirectory(a:spec.dir) - let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) - let remote = result[-1] - if v:shell_error - let err = join([remote, 'PlugClean required.'], "\n") - elseif !s:compare_git_uri(remote, a:spec.uri) - let err = join(['Invalid URI: '.remote, - \ 'Expected: '.a:spec.uri, - \ 'PlugClean required.'], "\n") - elseif a:check_branch && has_key(a:spec, 'commit') - let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) - let sha = result[-1] - if v:shell_error - let err = join(add(result, 'PlugClean required.'), "\n") - elseif !s:hash_match(sha, a:spec.commit) - let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', - \ a:spec.commit[:6], sha[:6]), - \ 'PlugUpdate required.'], "\n") - endif - elseif a:check_branch - let branch = result[0] - " Check tag - if has_key(a:spec, 'tag') - let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) - if a:spec.tag !=# tag && a:spec.tag !~ '\*' - let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', - \ (empty(tag) ? 'N/A' : tag), a:spec.tag) - endif - " Check branch - elseif a:spec.branch !=# branch - let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', - \ branch, a:spec.branch) - endif - if empty(err) - let [ahead, behind] = split(s:lastline(s:system(printf( - \ 'git rev-list --count --left-right HEAD...origin/%s', - \ a:spec.branch), a:spec.dir)), '\t') - if !v:shell_error && ahead - if behind - " Only mention PlugClean if diverged, otherwise it's likely to be - " pushable (and probably not that messed up). - let err = printf( - \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" - \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) - else - let err = printf("Ahead of origin/%s by %d commit(s).\n" - \ .'Cannot update until local changes are pushed.', - \ a:spec.branch, ahead) - endif - endif - endif - endif - else - let err = 'Not found' - endif - return [err, err =~# 'PlugClean'] -endfunction - -function! s:rm_rf(dir) - if isdirectory(a:dir) - call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . plug#shellescape(a:dir)) - endif -endfunction - -function! s:clean(force) - call s:prepare() - call append(0, 'Searching for invalid plugins in '.g:plug_home) - call append(1, '') - - " List of valid directories - let dirs = [] - let errs = {} - let [cnt, total] = [0, len(g:plugs)] - for [name, spec] in items(g:plugs) - if !s:is_managed(name) - call add(dirs, spec.dir) - else - let [err, clean] = s:git_validate(spec, 1) - if clean - let errs[spec.dir] = s:lines(err)[0] - else - call add(dirs, spec.dir) - endif - endif - let cnt += 1 - call s:progress_bar(2, repeat('=', cnt), total) - normal! 2G - redraw - endfor - - let allowed = {} - for dir in dirs - let allowed[s:dirpath(s:plug_fnamemodify(dir, ':h:h'))] = 1 - let allowed[dir] = 1 - for child in s:glob_dir(dir) - let allowed[child] = 1 - endfor - endfor - - let todo = [] - let found = sort(s:glob_dir(g:plug_home)) - while !empty(found) - let f = remove(found, 0) - if !has_key(allowed, f) && isdirectory(f) - call add(todo, f) - call append(line('$'), '- ' . f) - if has_key(errs, f) - call append(line('$'), ' ' . errs[f]) - endif - let found = filter(found, 'stridx(v:val, f) != 0') - end - endwhile - - 4 - redraw - if empty(todo) - call append(line('$'), 'Already clean.') - else - let s:clean_count = 0 - call append(3, ['Directories to delete:', '']) - redraw! - if a:force || s:ask_no_interrupt('Delete all directories?') - call s:delete([6, line('$')], 1) - else - call setline(4, 'Cancelled.') - nnoremap d :set opfunc=delete_opg@ - nmap dd d_ - xnoremap d :call delete_op(visualmode(), 1) - echo 'Delete the lines (d{motion}) to delete the corresponding directories' - endif - endif - 4 - setlocal nomodifiable -endfunction - -function! s:delete_op(type, ...) - call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) -endfunction - -function! s:delete(range, force) - let [l1, l2] = a:range - let force = a:force - while l1 <= l2 - let line = getline(l1) - if line =~ '^- ' && isdirectory(line[2:]) - execute l1 - redraw! - let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) - let force = force || answer > 1 - if answer - call s:rm_rf(line[2:]) - setlocal modifiable - call setline(l1, '~'.line[1:]) - let s:clean_count += 1 - call setline(4, printf('Removed %d directories.', s:clean_count)) - setlocal nomodifiable - endif - endif - let l1 += 1 - endwhile -endfunction - -function! s:upgrade() - echo 'Downloading the latest version of vim-plug' - redraw - let tmp = s:plug_tempname() - let new = tmp . '/plug.vim' - - try - let out = s:system(printf('git clone --depth 1 %s %s', plug#shellescape(s:plug_src), plug#shellescape(tmp))) - if v:shell_error - return s:err('Error upgrading vim-plug: '. out) - endif - - if readfile(s:me) ==# readfile(new) - echo 'vim-plug is already up-to-date' - return 0 - else - call rename(s:me, s:me . '.old') - call rename(new, s:me) - unlet g:loaded_plug - echo 'vim-plug has been upgraded' - return 1 - endif - finally - silent! call s:rm_rf(tmp) - endtry -endfunction - -function! s:upgrade_specs() - for spec in values(g:plugs) - let spec.frozen = get(spec, 'frozen', 0) - endfor -endfunction - -function! s:status() - call s:prepare() - call append(0, 'Checking plugins') - call append(1, '') - - let ecnt = 0 - let unloaded = 0 - let [cnt, total] = [0, len(g:plugs)] - for [name, spec] in items(g:plugs) - let is_dir = isdirectory(spec.dir) - if has_key(spec, 'uri') - if is_dir - let [err, _] = s:git_validate(spec, 1) - let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] - else - let [valid, msg] = [0, 'Not found. Try PlugInstall.'] - endif - else - if is_dir - let [valid, msg] = [1, 'OK'] - else - let [valid, msg] = [0, 'Not found.'] - endif - endif - let cnt += 1 - let ecnt += !valid - " `s:loaded` entry can be missing if PlugUpgraded - if is_dir && get(s:loaded, name, -1) == 0 - let unloaded = 1 - let msg .= ' (not loaded)' - endif - call s:progress_bar(2, repeat('=', cnt), total) - call append(3, s:format_message(valid ? '-' : 'x', name, msg)) - normal! 2G - redraw - endfor - call setline(1, 'Finished. '.ecnt.' error(s).') - normal! gg - setlocal nomodifiable - if unloaded - echo "Press 'L' on each line to load plugin, or 'U' to update" - nnoremap L :call status_load(line('.')) - xnoremap L :call status_load(line('.')) - end -endfunction - -function! s:extract_name(str, prefix, suffix) - return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') -endfunction - -function! s:status_load(lnum) - let line = getline(a:lnum) - let name = s:extract_name(line, '-', '(not loaded)') - if !empty(name) - call plug#load(name) - setlocal modifiable - call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) - setlocal nomodifiable - endif -endfunction - -function! s:status_update() range - let lines = getline(a:firstline, a:lastline) - let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') - if !empty(names) - echo - execute 'PlugUpdate' join(names) - endif -endfunction - -function! s:is_preview_window_open() - silent! wincmd P - if &previewwindow - wincmd p - return 1 - endif -endfunction - -function! s:find_name(lnum) - for lnum in reverse(range(1, a:lnum)) - let line = getline(lnum) - if empty(line) - return '' - endif - let name = s:extract_name(line, '-', '') - if !empty(name) - return name - endif - endfor - return '' -endfunction - -function! s:preview_commit() - if b:plug_preview < 0 - let b:plug_preview = !s:is_preview_window_open() - endif - - let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') - if empty(sha) - return - endif - - let name = s:find_name(line('.')) - if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) - return - endif - - if exists('g:plug_pwindow') && !s:is_preview_window_open() - execute g:plug_pwindow - execute 'e' sha - else - execute 'pedit' sha - wincmd P - endif - setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable - let batchfile = '' - try - let [sh, shellcmdflag, shrd] = s:chsh(1) - let cmd = 'cd '.plug#shellescape(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha - if s:is_win - let [batchfile, cmd] = s:batchfile(cmd) - endif - execute 'silent %!' cmd - finally - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win && filereadable(batchfile) - call delete(batchfile) - endif - endtry - setlocal nomodifiable - nnoremap q :q - wincmd p -endfunction - -function! s:section(flags) - call search('\(^[x-] \)\@<=[^:]\+:', a:flags) -endfunction - -function! s:format_git_log(line) - let indent = ' ' - let tokens = split(a:line, nr2char(1)) - if len(tokens) != 5 - return indent.substitute(a:line, '\s*$', '', '') - endif - let [graph, sha, refs, subject, date] = tokens - let tag = matchstr(refs, 'tag: [^,)]\+') - let tag = empty(tag) ? ' ' : ' ('.tag.') ' - return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) -endfunction - -function! s:append_ul(lnum, text) - call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) -endfunction - -function! s:diff() - call s:prepare() - call append(0, ['Collecting changes ...', '']) - let cnts = [0, 0] - let bar = '' - let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') - call s:progress_bar(2, bar, len(total)) - for origin in [1, 0] - let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) - if empty(plugs) - continue - endif - call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') - for [k, v] in plugs - let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' - let cmd = 'git log --graph --color=never ' - \ . (s:git_version_requirement(2, 10, 0) ? '--no-show-signature ' : '') - \ . join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 'plug#shellescape(v:val)')) - if has_key(v, 'rtp') - let cmd .= ' -- '.plug#shellescape(v.rtp) - endif - let diff = s:system_chomp(cmd, v.dir) - if !empty(diff) - let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' - call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) - let cnts[origin] += 1 - endif - let bar .= '=' - call s:progress_bar(2, bar, len(total)) - normal! 2G - redraw - endfor - if !cnts[origin] - call append(5, ['', 'N/A']) - endif - endfor - call setline(1, printf('%d plugin(s) updated.', cnts[0]) - \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) - - if cnts[0] || cnts[1] - nnoremap (plug-preview) :silent! call preview_commit() - if empty(maparg("\", 'n')) - nmap (plug-preview) - endif - if empty(maparg('o', 'n')) - nmap o (plug-preview) - endif - endif - if cnts[0] - nnoremap X :call revert() - echo "Press 'X' on each block to revert the update" - endif - normal! gg - setlocal nomodifiable -endfunction - -function! s:revert() - if search('^Pending updates', 'bnW') - return - endif - - let name = s:find_name(line('.')) - if empty(name) || !has_key(g:plugs, name) || - \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' - return - endif - - call s:system('git reset --hard HEAD@{1} && git checkout '.plug#shellescape(g:plugs[name].branch).' --', g:plugs[name].dir) - setlocal modifiable - normal! "_dap - setlocal nomodifiable - echo 'Reverted' -endfunction - -function! s:snapshot(force, ...) abort - call s:prepare() - setf vim - call append(0, ['" Generated by vim-plug', - \ '" '.strftime("%c"), - \ '" :source this file in vim to restore the snapshot', - \ '" or execute: vim -S snapshot.vim', - \ '', '', 'PlugUpdate!']) - 1 - let anchor = line('$') - 3 - let names = sort(keys(filter(copy(g:plugs), - \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) - for name in reverse(names) - let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) - if !empty(sha) - call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) - redraw - endif - endfor - - if a:0 > 0 - let fn = s:plug_expand(a:1) - if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) - return - endif - call writefile(getline(1, '$'), fn) - echo 'Saved as '.a:1 - silent execute 'e' s:esc(fn) - setf vim - endif -endfunction - -function! s:split_rtp() - return split(&rtp, '\\\@`-mappings | -"| `for` | On-demand loading: File types | -"| `frozen` | Do not update unless explicitly specified | -" -" More information: https://github.com/junegunn/vim-plug -" -" -" Copyright (c) 2017 Junegunn Choi -" -" MIT License -" -" 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. - -if exists('g:loaded_plug') - finish -endif -let g:loaded_plug = 1 - -let s:cpo_save = &cpo -set cpo&vim - -let s:plug_src = 'https://github.com/junegunn/vim-plug.git' -let s:plug_tab = get(s:, 'plug_tab', -1) -let s:plug_buf = get(s:, 'plug_buf', -1) -let s:mac_gui = has('gui_macvim') && has('gui_running') -let s:is_win = has('win32') -let s:nvim = has('nvim-0.2') || (has('nvim') && exists('*jobwait') && !s:is_win) -let s:vim8 = has('patch-8.0.0039') && exists('*job_start') -let s:me = resolve(expand(':p')) -let s:base_spec = { 'branch': 'master', 'frozen': 0 } -let s:TYPE = { -\ 'string': type(''), -\ 'list': type([]), -\ 'dict': type({}), -\ 'funcref': type(function('call')) -\ } -let s:loaded = get(s:, 'loaded', {}) -let s:triggers = get(s:, 'triggers', {}) - -function! plug#begin(...) - if a:0 > 0 - let s:plug_home_org = a:1 - let home = s:path(fnamemodify(expand(a:1), ':p')) - elseif exists('g:plug_home') - let home = s:path(g:plug_home) - elseif !empty(&rtp) - let home = s:path(split(&rtp, ',')[0]) . '/plugged' - else - return s:err('Unable to determine plug home. Try calling plug#begin() with a path argument.') - endif - if fnamemodify(home, ':t') ==# 'plugin' && fnamemodify(home, ':h') ==# s:first_rtp - return s:err('Invalid plug home. '.home.' is a standard Vim runtime path and is not allowed.') - endif - - let g:plug_home = home - let g:plugs = {} - let g:plugs_order = [] - let s:triggers = {} - - call s:define_commands() - return 1 -endfunction - -function! s:define_commands() - command! -nargs=+ -bar Plug call plug#() - if !executable('git') - return s:err('`git` executable not found. Most commands will not be available. To suppress this message, prepend `silent!` to `call plug#begin(...)`.') - endif - command! -nargs=* -bar -bang -complete=customlist,s:names PlugInstall call s:install(0, []) - command! -nargs=* -bar -bang -complete=customlist,s:names PlugUpdate call s:update(0, []) - command! -nargs=0 -bar -bang PlugClean call s:clean(0) - command! -nargs=0 -bar PlugUpgrade if s:upgrade() | execute 'source' s:esc(s:me) | endif - command! -nargs=0 -bar PlugStatus call s:status() - command! -nargs=0 -bar PlugDiff call s:diff() - command! -nargs=? -bar -bang -complete=file PlugSnapshot call s:snapshot(0, ) -endfunction - -function! s:to_a(v) - return type(a:v) == s:TYPE.list ? a:v : [a:v] -endfunction - -function! s:to_s(v) - return type(a:v) == s:TYPE.string ? a:v : join(a:v, "\n") . "\n" -endfunction - -function! s:glob(from, pattern) - return s:lines(globpath(a:from, a:pattern)) -endfunction - -function! s:source(from, ...) - let found = 0 - for pattern in a:000 - for vim in s:glob(a:from, pattern) - execute 'source' s:esc(vim) - let found = 1 - endfor - endfor - return found -endfunction - -function! s:assoc(dict, key, val) - let a:dict[a:key] = add(get(a:dict, a:key, []), a:val) -endfunction - -function! s:ask(message, ...) - call inputsave() - echohl WarningMsg - let answer = input(a:message.(a:0 ? ' (y/N/a) ' : ' (y/N) ')) - echohl None - call inputrestore() - echo "\r" - return (a:0 && answer =~? '^a') ? 2 : (answer =~? '^y') ? 1 : 0 -endfunction - -function! s:ask_no_interrupt(...) - try - return call('s:ask', a:000) - catch - return 0 - endtry -endfunction - -function! s:lazy(plug, opt) - return has_key(a:plug, a:opt) && - \ (empty(s:to_a(a:plug[a:opt])) || - \ !isdirectory(a:plug.dir) || - \ len(s:glob(s:rtp(a:plug), 'plugin')) || - \ len(s:glob(s:rtp(a:plug), 'after/plugin'))) -endfunction - -function! plug#end() - if !exists('g:plugs') - return s:err('Call plug#begin() first') - endif - - if exists('#PlugLOD') - augroup PlugLOD - autocmd! - augroup END - augroup! PlugLOD - endif - let lod = { 'ft': {}, 'map': {}, 'cmd': {} } - - if exists('g:did_load_filetypes') - filetype off - endif - for name in g:plugs_order - if !has_key(g:plugs, name) - continue - endif - let plug = g:plugs[name] - if get(s:loaded, name, 0) || !s:lazy(plug, 'on') && !s:lazy(plug, 'for') - let s:loaded[name] = 1 - continue - endif - - if has_key(plug, 'on') - let s:triggers[name] = { 'map': [], 'cmd': [] } - for cmd in s:to_a(plug.on) - if cmd =~? '^.\+' - if empty(mapcheck(cmd)) && empty(mapcheck(cmd, 'i')) - call s:assoc(lod.map, cmd, name) - endif - call add(s:triggers[name].map, cmd) - elseif cmd =~# '^[A-Z]' - let cmd = substitute(cmd, '!*$', '', '') - if exists(':'.cmd) != 2 - call s:assoc(lod.cmd, cmd, name) - endif - call add(s:triggers[name].cmd, cmd) - else - call s:err('Invalid `on` option: '.cmd. - \ '. Should start with an uppercase letter or ``.') - endif - endfor - endif - - if has_key(plug, 'for') - let types = s:to_a(plug.for) - if !empty(types) - augroup filetypedetect - call s:source(s:rtp(plug), 'ftdetect/**/*.vim', 'after/ftdetect/**/*.vim') - augroup END - endif - for type in types - call s:assoc(lod.ft, type, name) - endfor - endif - endfor - - for [cmd, names] in items(lod.cmd) - execute printf( - \ 'command! -nargs=* -range -bang -complete=file %s call s:lod_cmd(%s, "", , , , %s)', - \ cmd, string(cmd), string(names)) - endfor - - for [map, names] in items(lod.map) - for [mode, map_prefix, key_prefix] in - \ [['i', '', ''], ['n', '', ''], ['v', '', 'gv'], ['o', '', '']] - execute printf( - \ '%snoremap %s %s:call lod_map(%s, %s, %s, "%s")', - \ mode, map, map_prefix, string(map), string(names), mode != 'i', key_prefix) - endfor - endfor - - for [ft, names] in items(lod.ft) - augroup PlugLOD - execute printf('autocmd FileType %s call lod_ft(%s, %s)', - \ ft, string(ft), string(names)) - augroup END - endfor - - call s:reorg_rtp() - filetype plugin indent on - if has('vim_starting') - if has('syntax') && !exists('g:syntax_on') - syntax enable - end - else - call s:reload_plugins() - endif -endfunction - -function! s:loaded_names() - return filter(copy(g:plugs_order), 'get(s:loaded, v:val, 0)') -endfunction - -function! s:load_plugin(spec) - call s:source(s:rtp(a:spec), 'plugin/**/*.vim', 'after/plugin/**/*.vim') -endfunction - -function! s:reload_plugins() - for name in s:loaded_names() - call s:load_plugin(g:plugs[name]) - endfor -endfunction - -function! s:trim(str) - return substitute(a:str, '[\/]\+$', '', '') -endfunction - -function! s:version_requirement(val, min) - for idx in range(0, len(a:min) - 1) - let v = get(a:val, idx, 0) - if v < a:min[idx] | return 0 - elseif v > a:min[idx] | return 1 - endif - endfor - return 1 -endfunction - -function! s:git_version_requirement(...) - if !exists('s:git_version') - let s:git_version = map(split(split(s:system('git --version'))[2], '\.'), 'str2nr(v:val)') - endif - return s:version_requirement(s:git_version, a:000) -endfunction - -function! s:progress_opt(base) - return a:base && !s:is_win && - \ s:git_version_requirement(1, 7, 1) ? '--progress' : '' -endfunction - -if s:is_win - function! s:rtp(spec) - return s:path(a:spec.dir . get(a:spec, 'rtp', '')) - endfunction - - function! s:path(path) - return s:trim(substitute(a:path, '/', '\', 'g')) - endfunction - - function! s:dirpath(path) - return s:path(a:path) . '\' - endfunction - - function! s:is_local_plug(repo) - return a:repo =~? '^[a-z]:\|^[%~]' - endfunction -else - function! s:rtp(spec) - return s:dirpath(a:spec.dir . get(a:spec, 'rtp', '')) - endfunction - - function! s:path(path) - return s:trim(a:path) - endfunction - - function! s:dirpath(path) - return substitute(a:path, '[/\\]*$', '/', '') - endfunction - - function! s:is_local_plug(repo) - return a:repo[0] =~ '[/$~]' - endfunction -endif - -function! s:err(msg) - echohl ErrorMsg - echom '[vim-plug] '.a:msg - echohl None -endfunction - -function! s:warn(cmd, msg) - echohl WarningMsg - execute a:cmd 'a:msg' - echohl None -endfunction - -function! s:esc(path) - return escape(a:path, ' ') -endfunction - -function! s:escrtp(path) - return escape(a:path, ' ,') -endfunction - -function! s:remove_rtp() - for name in s:loaded_names() - let rtp = s:rtp(g:plugs[name]) - execute 'set rtp-='.s:escrtp(rtp) - let after = globpath(rtp, 'after') - if isdirectory(after) - execute 'set rtp-='.s:escrtp(after) - endif - endfor -endfunction - -function! s:reorg_rtp() - if !empty(s:first_rtp) - execute 'set rtp-='.s:first_rtp - execute 'set rtp-='.s:last_rtp - endif - - " &rtp is modified from outside - if exists('s:prtp') && s:prtp !=# &rtp - call s:remove_rtp() - unlet! s:middle - endif - - let s:middle = get(s:, 'middle', &rtp) - let rtps = map(s:loaded_names(), 's:rtp(g:plugs[v:val])') - let afters = filter(map(copy(rtps), 'globpath(v:val, "after")'), '!empty(v:val)') - let rtp = join(map(rtps, 'escape(v:val, ",")'), ',') - \ . ','.s:middle.',' - \ . join(map(afters, 'escape(v:val, ",")'), ',') - let &rtp = substitute(substitute(rtp, ',,*', ',', 'g'), '^,\|,$', '', 'g') - let s:prtp = &rtp - - if !empty(s:first_rtp) - execute 'set rtp^='.s:first_rtp - execute 'set rtp+='.s:last_rtp - endif -endfunction - -function! s:doautocmd(...) - if exists('#'.join(a:000, '#')) - execute 'doautocmd' ((v:version > 703 || has('patch442')) ? '' : '') join(a:000) - endif -endfunction - -function! s:dobufread(names) - for name in a:names - let path = s:rtp(g:plugs[name]).'/**' - for dir in ['ftdetect', 'ftplugin'] - if len(finddir(dir, path)) - if exists('#BufRead') - doautocmd BufRead - endif - return - endif - endfor - endfor -endfunction - -function! plug#load(...) - if a:0 == 0 - return s:err('Argument missing: plugin name(s) required') - endif - if !exists('g:plugs') - return s:err('plug#begin was not called') - endif - let names = a:0 == 1 && type(a:1) == s:TYPE.list ? a:1 : a:000 - let unknowns = filter(copy(names), '!has_key(g:plugs, v:val)') - if !empty(unknowns) - let s = len(unknowns) > 1 ? 's' : '' - return s:err(printf('Unknown plugin%s: %s', s, join(unknowns, ', '))) - end - let unloaded = filter(copy(names), '!get(s:loaded, v:val, 0)') - if !empty(unloaded) - for name in unloaded - call s:lod([name], ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - endfor - call s:dobufread(unloaded) - return 1 - end - return 0 -endfunction - -function! s:remove_triggers(name) - if !has_key(s:triggers, a:name) - return - endif - for cmd in s:triggers[a:name].cmd - execute 'silent! delc' cmd - endfor - for map in s:triggers[a:name].map - execute 'silent! unmap' map - execute 'silent! iunmap' map - endfor - call remove(s:triggers, a:name) -endfunction - -function! s:lod(names, types, ...) - for name in a:names - call s:remove_triggers(name) - let s:loaded[name] = 1 - endfor - call s:reorg_rtp() - - for name in a:names - let rtp = s:rtp(g:plugs[name]) - for dir in a:types - call s:source(rtp, dir.'/**/*.vim') - endfor - if a:0 - if !s:source(rtp, a:1) && !empty(s:glob(rtp, a:2)) - execute 'runtime' a:1 - endif - call s:source(rtp, a:2) - endif - call s:doautocmd('User', name) - endfor -endfunction - -function! s:lod_ft(pat, names) - let syn = 'syntax/'.a:pat.'.vim' - call s:lod(a:names, ['plugin', 'after/plugin'], syn, 'after/'.syn) - execute 'autocmd! PlugLOD FileType' a:pat - call s:doautocmd('filetypeplugin', 'FileType') - call s:doautocmd('filetypeindent', 'FileType') -endfunction - -function! s:lod_cmd(cmd, bang, l1, l2, args, names) - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - call s:dobufread(a:names) - execute printf('%s%s%s %s', (a:l1 == a:l2 ? '' : (a:l1.','.a:l2)), a:cmd, a:bang, a:args) -endfunction - -function! s:lod_map(map, names, with_prefix, prefix) - call s:lod(a:names, ['ftdetect', 'after/ftdetect', 'plugin', 'after/plugin']) - call s:dobufread(a:names) - let extra = '' - while 1 - let c = getchar(0) - if c == 0 - break - endif - let extra .= nr2char(c) - endwhile - - if a:with_prefix - let prefix = v:count ? v:count : '' - let prefix .= '"'.v:register.a:prefix - if mode(1) == 'no' - if v:operator == 'c' - let prefix = "\" . prefix - endif - let prefix .= v:operator - endif - call feedkeys(prefix, 'n') - endif - call feedkeys(substitute(a:map, '^', "\", '') . extra) -endfunction - -function! plug#(repo, ...) - if a:0 > 1 - return s:err('Invalid number of arguments (1..2)') - endif - - try - let repo = s:trim(a:repo) - let opts = a:0 == 1 ? s:parse_options(a:1) : s:base_spec - let name = get(opts, 'as', fnamemodify(repo, ':t:s?\.git$??')) - let spec = extend(s:infer_properties(name, repo), opts) - if !has_key(g:plugs, name) - call add(g:plugs_order, name) - endif - let g:plugs[name] = spec - let s:loaded[name] = get(s:loaded, name, 0) - catch - return s:err(v:exception) - endtry -endfunction - -function! s:parse_options(arg) - let opts = copy(s:base_spec) - let type = type(a:arg) - if type == s:TYPE.string - let opts.tag = a:arg - elseif type == s:TYPE.dict - call extend(opts, a:arg) - if has_key(opts, 'dir') - let opts.dir = s:dirpath(expand(opts.dir)) - endif - else - throw 'Invalid argument type (expected: string or dictionary)' - endif - return opts -endfunction - -function! s:infer_properties(name, repo) - let repo = a:repo - if s:is_local_plug(repo) - return { 'dir': s:dirpath(expand(repo)) } - else - if repo =~ ':' - let uri = repo - else - if repo !~ '/' - throw printf('Invalid argument: %s (implicit `vim-scripts'' expansion is deprecated)', repo) - endif - let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git') - let uri = printf(fmt, repo) - endif - return { 'dir': s:dirpath(g:plug_home.'/'.a:name), 'uri': uri } - endif -endfunction - -function! s:install(force, names) - call s:update_impl(0, a:force, a:names) -endfunction - -function! s:update(force, names) - call s:update_impl(1, a:force, a:names) -endfunction - -function! plug#helptags() - if !exists('g:plugs') - return s:err('plug#begin was not called') - endif - for spec in values(g:plugs) - let docd = join([s:rtp(spec), 'doc'], '/') - if isdirectory(docd) - silent! execute 'helptags' s:esc(docd) - endif - endfor - return 1 -endfunction - -function! s:syntax() - syntax clear - syntax region plug1 start=/\%1l/ end=/\%2l/ contains=plugNumber - syntax region plug2 start=/\%2l/ end=/\%3l/ contains=plugBracket,plugX - syn match plugNumber /[0-9]\+[0-9.]*/ contained - syn match plugBracket /[[\]]/ contained - syn match plugX /x/ contained - syn match plugDash /^-/ - syn match plugPlus /^+/ - syn match plugStar /^*/ - syn match plugMessage /\(^- \)\@<=.*/ - syn match plugName /\(^- \)\@<=[^ ]*:/ - syn match plugSha /\%(: \)\@<=[0-9a-f]\{4,}$/ - syn match plugTag /(tag: [^)]\+)/ - syn match plugInstall /\(^+ \)\@<=[^:]*/ - syn match plugUpdate /\(^* \)\@<=[^:]*/ - syn match plugCommit /^ \X*[0-9a-f]\{7,9} .*/ contains=plugRelDate,plugEdge,plugTag - syn match plugEdge /^ \X\+$/ - syn match plugEdge /^ \X*/ contained nextgroup=plugSha - syn match plugSha /[0-9a-f]\{7,9}/ contained - syn match plugRelDate /([^)]*)$/ contained - syn match plugNotLoaded /(not loaded)$/ - syn match plugError /^x.*/ - syn region plugDeleted start=/^\~ .*/ end=/^\ze\S/ - syn match plugH2 /^.*:\n-\+$/ - syn keyword Function PlugInstall PlugStatus PlugUpdate PlugClean - hi def link plug1 Title - hi def link plug2 Repeat - hi def link plugH2 Type - hi def link plugX Exception - hi def link plugBracket Structure - hi def link plugNumber Number - - hi def link plugDash Special - hi def link plugPlus Constant - hi def link plugStar Boolean - - hi def link plugMessage Function - hi def link plugName Label - hi def link plugInstall Function - hi def link plugUpdate Type - - hi def link plugError Error - hi def link plugDeleted Ignore - hi def link plugRelDate Comment - hi def link plugEdge PreProc - hi def link plugSha Identifier - hi def link plugTag Constant - - hi def link plugNotLoaded Comment -endfunction - -function! s:lpad(str, len) - return a:str . repeat(' ', a:len - len(a:str)) -endfunction - -function! s:lines(msg) - return split(a:msg, "[\r\n]") -endfunction - -function! s:lastline(msg) - return get(s:lines(a:msg), -1, '') -endfunction - -function! s:new_window() - execute get(g:, 'plug_window', 'vertical topleft new') -endfunction - -function! s:plug_window_exists() - let buflist = tabpagebuflist(s:plug_tab) - return !empty(buflist) && index(buflist, s:plug_buf) >= 0 -endfunction - -function! s:switch_in() - if !s:plug_window_exists() - return 0 - endif - - if winbufnr(0) != s:plug_buf - let s:pos = [tabpagenr(), winnr(), winsaveview()] - execute 'normal!' s:plug_tab.'gt' - let winnr = bufwinnr(s:plug_buf) - execute winnr.'wincmd w' - call add(s:pos, winsaveview()) - else - let s:pos = [winsaveview()] - endif - - setlocal modifiable - return 1 -endfunction - -function! s:switch_out(...) - call winrestview(s:pos[-1]) - setlocal nomodifiable - if a:0 > 0 - execute a:1 - endif - - if len(s:pos) > 1 - execute 'normal!' s:pos[0].'gt' - execute s:pos[1] 'wincmd w' - call winrestview(s:pos[2]) - endif -endfunction - -function! s:finish_bindings() - nnoremap R :call retry() - nnoremap D :PlugDiff - nnoremap S :PlugStatus - nnoremap U :call status_update() - xnoremap U :call status_update() - nnoremap ]] :silent! call section('') - nnoremap [[ :silent! call section('b') -endfunction - -function! s:prepare(...) - if empty(getcwd()) - throw 'Invalid current working directory. Cannot proceed.' - endif - - for evar in ['$GIT_DIR', '$GIT_WORK_TREE'] - if exists(evar) - throw evar.' detected. Cannot proceed.' - endif - endfor - - call s:job_abort() - if s:switch_in() - if b:plug_preview == 1 - pc - endif - enew - else - call s:new_window() - endif - - nnoremap q :if b:plug_preview==1pcendifbd - if a:0 == 0 - call s:finish_bindings() - endif - let b:plug_preview = -1 - let s:plug_tab = tabpagenr() - let s:plug_buf = winbufnr(0) - call s:assign_name() - - for k in ['', 'L', 'o', 'X', 'd', 'dd'] - execute 'silent! unmap ' k - endfor - setlocal buftype=nofile bufhidden=wipe nobuflisted nolist noswapfile nowrap cursorline modifiable nospell - if exists('+colorcolumn') - setlocal colorcolumn= - endif - setf vim-plug - if exists('g:syntax_on') - call s:syntax() - endif -endfunction - -function! s:assign_name() - " Assign buffer name - let prefix = '[Plugins]' - let name = prefix - let idx = 2 - while bufexists(name) - let name = printf('%s (%s)', prefix, idx) - let idx = idx + 1 - endwhile - silent! execute 'f' fnameescape(name) -endfunction - -function! s:chsh(swap) - let prev = [&shell, &shellcmdflag, &shellredir] - if s:is_win - set shell=cmd.exe shellcmdflag=/c shellredir=>%s\ 2>&1 - elseif a:swap - set shell=sh shellredir=>%s\ 2>&1 - endif - return prev -endfunction - -function! s:bang(cmd, ...) - try - let [sh, shellcmdflag, shrd] = s:chsh(a:0) - " FIXME: Escaping is incomplete. We could use shellescape with eval, - " but it won't work on Windows. - let cmd = a:0 ? s:with_cd(a:cmd, a:1) : a:cmd - if s:is_win - let batchfile = tempname().'.bat' - call writefile(["@echo off\r", cmd . "\r"], batchfile) - let cmd = batchfile - endif - let g:_plug_bang = (s:is_win && has('gui_running') ? 'silent ' : '').'!'.escape(cmd, '#!%') - execute "normal! :execute g:_plug_bang\\" - finally - unlet g:_plug_bang - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win - call delete(batchfile) - endif - endtry - return v:shell_error ? 'Exit status: ' . v:shell_error : '' -endfunction - -function! s:regress_bar() - let bar = substitute(getline(2)[1:-2], '.*\zs=', 'x', '') - call s:progress_bar(2, bar, len(bar)) -endfunction - -function! s:is_updated(dir) - return !empty(s:system_chomp('git log --pretty=format:"%h" "HEAD...HEAD@{1}"', a:dir)) -endfunction - -function! s:do(pull, force, todo) - for [name, spec] in items(a:todo) - if !isdirectory(spec.dir) - continue - endif - let installed = has_key(s:update.new, name) - let updated = installed ? 0 : - \ (a:pull && index(s:update.errors, name) < 0 && s:is_updated(spec.dir)) - if a:force || installed || updated - execute 'cd' s:esc(spec.dir) - call append(3, '- Post-update hook for '. name .' ... ') - let error = '' - let type = type(spec.do) - if type == s:TYPE.string - if spec.do[0] == ':' - if !get(s:loaded, name, 0) - let s:loaded[name] = 1 - call s:reorg_rtp() - endif - call s:load_plugin(spec) - try - execute spec.do[1:] - catch - let error = v:exception - endtry - if !s:plug_window_exists() - cd - - throw 'Warning: vim-plug was terminated by the post-update hook of '.name - endif - else - let error = s:bang(spec.do) - endif - elseif type == s:TYPE.funcref - try - let status = installed ? 'installed' : (updated ? 'updated' : 'unchanged') - call spec.do({ 'name': name, 'status': status, 'force': a:force }) - catch - let error = v:exception - endtry - else - let error = 'Invalid hook type' - endif - call s:switch_in() - call setline(4, empty(error) ? (getline(4) . 'OK') - \ : ('x' . getline(4)[1:] . error)) - if !empty(error) - call add(s:update.errors, name) - call s:regress_bar() - endif - cd - - endif - endfor -endfunction - -function! s:hash_match(a, b) - return stridx(a:a, a:b) == 0 || stridx(a:b, a:a) == 0 -endfunction - -function! s:checkout(spec) - let sha = a:spec.commit - let output = s:system('git rev-parse HEAD', a:spec.dir) - if !v:shell_error && !s:hash_match(sha, s:lines(output)[0]) - let output = s:system( - \ 'git fetch --depth 999999 && git checkout '.s:esc(sha).' --', a:spec.dir) - endif - return output -endfunction - -function! s:finish(pull) - let new_frozen = len(filter(keys(s:update.new), 'g:plugs[v:val].frozen')) - if new_frozen - let s = new_frozen > 1 ? 's' : '' - call append(3, printf('- Installed %d frozen plugin%s', new_frozen, s)) - endif - call append(3, '- Finishing ... ') | 4 - redraw - call plug#helptags() - call plug#end() - call setline(4, getline(4) . 'Done!') - redraw - let msgs = [] - if !empty(s:update.errors) - call add(msgs, "Press 'R' to retry.") - endif - if a:pull && len(s:update.new) < len(filter(getline(5, '$'), - \ "v:val =~ '^- ' && v:val !~# 'Already up.to.date'")) - call add(msgs, "Press 'D' to see the updated changes.") - endif - echo join(msgs, ' ') - call s:finish_bindings() -endfunction - -function! s:retry() - if empty(s:update.errors) - return - endif - echo - call s:update_impl(s:update.pull, s:update.force, - \ extend(copy(s:update.errors), [s:update.threads])) -endfunction - -function! s:is_managed(name) - return has_key(g:plugs[a:name], 'uri') -endfunction - -function! s:names(...) - return sort(filter(keys(g:plugs), 'stridx(v:val, a:1) == 0 && s:is_managed(v:val)')) -endfunction - -function! s:check_ruby() - silent! ruby require 'thread'; VIM::command("let g:plug_ruby = '#{RUBY_VERSION}'") - if !exists('g:plug_ruby') - redraw! - return s:warn('echom', 'Warning: Ruby interface is broken') - endif - let ruby_version = split(g:plug_ruby, '\.') - unlet g:plug_ruby - return s:version_requirement(ruby_version, [1, 8, 7]) -endfunction - -function! s:update_impl(pull, force, args) abort - let sync = index(a:args, '--sync') >= 0 || has('vim_starting') - let args = filter(copy(a:args), 'v:val != "--sync"') - let threads = (len(args) > 0 && args[-1] =~ '^[1-9][0-9]*$') ? - \ remove(args, -1) : get(g:, 'plug_threads', 16) - - let managed = filter(copy(g:plugs), 's:is_managed(v:key)') - let todo = empty(args) ? filter(managed, '!v:val.frozen || !isdirectory(v:val.dir)') : - \ filter(managed, 'index(args, v:key) >= 0') - - if empty(todo) - return s:warn('echo', 'No plugin to '. (a:pull ? 'update' : 'install')) - endif - - if !s:is_win && s:git_version_requirement(2, 3) - let s:git_terminal_prompt = exists('$GIT_TERMINAL_PROMPT') ? $GIT_TERMINAL_PROMPT : '' - let $GIT_TERMINAL_PROMPT = 0 - for plug in values(todo) - let plug.uri = substitute(plug.uri, - \ '^https://git::@github\.com', 'https://github.com', '') - endfor - endif - - if !isdirectory(g:plug_home) - try - call mkdir(g:plug_home, 'p') - catch - return s:err(printf('Invalid plug directory: %s. '. - \ 'Try to call plug#begin with a valid directory', g:plug_home)) - endtry - endif - - if has('nvim') && !exists('*jobwait') && threads > 1 - call s:warn('echom', '[vim-plug] Update Neovim for parallel installer') - endif - - let use_job = s:nvim || s:vim8 - let python = (has('python') || has('python3')) && !use_job - let ruby = has('ruby') && !use_job && (v:version >= 703 || v:version == 702 && has('patch374')) && !(s:is_win && has('gui_running')) && threads > 1 && s:check_ruby() - - let s:update = { - \ 'start': reltime(), - \ 'all': todo, - \ 'todo': copy(todo), - \ 'errors': [], - \ 'pull': a:pull, - \ 'force': a:force, - \ 'new': {}, - \ 'threads': (python || ruby || use_job) ? min([len(todo), threads]) : 1, - \ 'bar': '', - \ 'fin': 0 - \ } - - call s:prepare(1) - call append(0, ['', '']) - normal! 2G - silent! redraw - - let s:clone_opt = get(g:, 'plug_shallow', 1) ? - \ '--depth 1' . (s:git_version_requirement(1, 7, 10) ? ' --no-single-branch' : '') : '' - - if has('win32unix') - let s:clone_opt .= ' -c core.eol=lf -c core.autocrlf=input' - endif - - let s:submodule_opt = s:git_version_requirement(2, 8) ? ' --jobs='.threads : '' - - " Python version requirement (>= 2.7) - if python && !has('python3') && !ruby && !use_job && s:update.threads > 1 - redir => pyv - silent python import platform; print platform.python_version() - redir END - let python = s:version_requirement( - \ map(split(split(pyv)[0], '\.'), 'str2nr(v:val)'), [2, 6]) - endif - - if (python || ruby) && s:update.threads > 1 - try - let imd = &imd - if s:mac_gui - set noimd - endif - if ruby - call s:update_ruby() - else - call s:update_python() - endif - catch - let lines = getline(4, '$') - let printed = {} - silent! 4,$d _ - for line in lines - let name = s:extract_name(line, '.', '') - if empty(name) || !has_key(printed, name) - call append('$', line) - if !empty(name) - let printed[name] = 1 - if line[0] == 'x' && index(s:update.errors, name) < 0 - call add(s:update.errors, name) - end - endif - endif - endfor - finally - let &imd = imd - call s:update_finish() - endtry - else - call s:update_vim() - while use_job && sync - sleep 100m - if s:update.fin - break - endif - endwhile - endif -endfunction - -function! s:log4(name, msg) - call setline(4, printf('- %s (%s)', a:msg, a:name)) - redraw -endfunction - -function! s:update_finish() - if exists('s:git_terminal_prompt') - let $GIT_TERMINAL_PROMPT = s:git_terminal_prompt - endif - if s:switch_in() - call append(3, '- Updating ...') | 4 - for [name, spec] in items(filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && (s:update.force || s:update.pull || has_key(s:update.new, v:key))')) - let [pos, _] = s:logpos(name) - if !pos - continue - endif - if has_key(spec, 'commit') - call s:log4(name, 'Checking out '.spec.commit) - let out = s:checkout(spec) - elseif has_key(spec, 'tag') - let tag = spec.tag - if tag =~ '\*' - let tags = s:lines(s:system('git tag --list '.s:shellesc(tag).' --sort -version:refname 2>&1', spec.dir)) - if !v:shell_error && !empty(tags) - let tag = tags[0] - call s:log4(name, printf('Latest tag for %s -> %s', spec.tag, tag)) - call append(3, '') - endif - endif - call s:log4(name, 'Checking out '.tag) - let out = s:system('git checkout -q '.s:esc(tag).' -- 2>&1', spec.dir) - else - let branch = s:esc(get(spec, 'branch', 'master')) - call s:log4(name, 'Merging origin/'.branch) - let out = s:system('git checkout -q '.branch.' -- 2>&1' - \. (has_key(s:update.new, name) ? '' : ('&& git merge --ff-only origin/'.branch.' 2>&1')), spec.dir) - endif - if !v:shell_error && filereadable(spec.dir.'/.gitmodules') && - \ (s:update.force || has_key(s:update.new, name) || s:is_updated(spec.dir)) - call s:log4(name, 'Updating submodules. This may take a while.') - let out .= s:bang('git submodule update --init --recursive'.s:submodule_opt.' 2>&1', spec.dir) - endif - let msg = s:format_message(v:shell_error ? 'x': '-', name, out) - if v:shell_error - call add(s:update.errors, name) - call s:regress_bar() - silent execute pos 'd _' - call append(4, msg) | 4 - elseif !empty(out) - call setline(pos, msg[0]) - endif - redraw - endfor - silent 4 d _ - try - call s:do(s:update.pull, s:update.force, filter(copy(s:update.all), 'index(s:update.errors, v:key) < 0 && has_key(v:val, "do")')) - catch - call s:warn('echom', v:exception) - call s:warn('echo', '') - return - endtry - call s:finish(s:update.pull) - call setline(1, 'Updated. Elapsed time: ' . split(reltimestr(reltime(s:update.start)))[0] . ' sec.') - call s:switch_out('normal! gg') - endif -endfunction - -function! s:job_abort() - if (!s:nvim && !s:vim8) || !exists('s:jobs') - return - endif - - for [name, j] in items(s:jobs) - if s:nvim - silent! call jobstop(j.jobid) - elseif s:vim8 - silent! call job_stop(j.jobid) - endif - if j.new - call s:system('rm -rf ' . s:shellesc(g:plugs[name].dir)) - endif - endfor - let s:jobs = {} -endfunction - -function! s:last_non_empty_line(lines) - let len = len(a:lines) - for idx in range(len) - let line = a:lines[len-idx-1] - if !empty(line) - return line - endif - endfor - return '' -endfunction - -function! s:job_out_cb(self, data) abort - let self = a:self - let data = remove(self.lines, -1) . a:data - let lines = map(split(data, "\n", 1), 'split(v:val, "\r", 1)[-1]') - call extend(self.lines, lines) - " To reduce the number of buffer updates - let self.tick = get(self, 'tick', -1) + 1 - if !self.running || self.tick % len(s:jobs) == 0 - let bullet = self.running ? (self.new ? '+' : '*') : (self.error ? 'x' : '-') - let result = self.error ? join(self.lines, "\n") : s:last_non_empty_line(self.lines) - call s:log(bullet, self.name, result) - endif -endfunction - -function! s:job_exit_cb(self, data) abort - let a:self.running = 0 - let a:self.error = a:data != 0 - call s:reap(a:self.name) - call s:tick() -endfunction - -function! s:job_cb(fn, job, ch, data) - if !s:plug_window_exists() " plug window closed - return s:job_abort() - endif - call call(a:fn, [a:job, a:data]) -endfunction - -function! s:nvim_cb(job_id, data, event) dict abort - return a:event == 'stdout' ? - \ s:job_cb('s:job_out_cb', self, 0, join(a:data, "\n")) : - \ s:job_cb('s:job_exit_cb', self, 0, a:data) -endfunction - -function! s:spawn(name, cmd, opts) - let job = { 'name': a:name, 'running': 1, 'error': 0, 'lines': [''], - \ 'batchfile': (s:is_win && (s:nvim || s:vim8)) ? tempname().'.bat' : '', - \ 'new': get(a:opts, 'new', 0) } - let s:jobs[a:name] = job - let cmd = has_key(a:opts, 'dir') ? s:with_cd(a:cmd, a:opts.dir) : a:cmd - if !empty(job.batchfile) - call writefile(["@echo off\r", cmd . "\r"], job.batchfile) - let cmd = job.batchfile - endif - let argv = add(s:is_win ? ['cmd', '/c'] : ['sh', '-c'], cmd) - - if s:nvim - call extend(job, { - \ 'on_stdout': function('s:nvim_cb'), - \ 'on_exit': function('s:nvim_cb'), - \ }) - let jid = jobstart(argv, job) - if jid > 0 - let job.jobid = jid - else - let job.running = 0 - let job.error = 1 - let job.lines = [jid < 0 ? argv[0].' is not executable' : - \ 'Invalid arguments (or job table is full)'] - endif - elseif s:vim8 - let jid = job_start(s:is_win ? join(argv, ' ') : argv, { - \ 'out_cb': function('s:job_cb', ['s:job_out_cb', job]), - \ 'exit_cb': function('s:job_cb', ['s:job_exit_cb', job]), - \ 'out_mode': 'raw' - \}) - if job_status(jid) == 'run' - let job.jobid = jid - else - let job.running = 0 - let job.error = 1 - let job.lines = ['Failed to start job'] - endif - else - let job.lines = s:lines(call('s:system', [cmd])) - let job.error = v:shell_error != 0 - let job.running = 0 - endif -endfunction - -function! s:reap(name) - let job = s:jobs[a:name] - if job.error - call add(s:update.errors, a:name) - elseif get(job, 'new', 0) - let s:update.new[a:name] = 1 - endif - let s:update.bar .= job.error ? 'x' : '=' - - let bullet = job.error ? 'x' : '-' - let result = job.error ? join(job.lines, "\n") : s:last_non_empty_line(job.lines) - call s:log(bullet, a:name, empty(result) ? 'OK' : result) - call s:bar() - - if has_key(job, 'batchfile') && !empty(job.batchfile) - call delete(job.batchfile) - endif - call remove(s:jobs, a:name) -endfunction - -function! s:bar() - if s:switch_in() - let total = len(s:update.all) - call setline(1, (s:update.pull ? 'Updating' : 'Installing'). - \ ' plugins ('.len(s:update.bar).'/'.total.')') - call s:progress_bar(2, s:update.bar, total) - call s:switch_out() - endif -endfunction - -function! s:logpos(name) - for i in range(4, line('$')) - if getline(i) =~# '^[-+x*] '.a:name.':' - for j in range(i + 1, line('$')) - if getline(j) !~ '^ ' - return [i, j - 1] - endif - endfor - return [i, i] - endif - endfor - return [0, 0] -endfunction - -function! s:log(bullet, name, lines) - if s:switch_in() - let [b, e] = s:logpos(a:name) - if b > 0 - silent execute printf('%d,%d d _', b, e) - if b > winheight('.') - let b = 4 - endif - else - let b = 4 - endif - " FIXME For some reason, nomodifiable is set after :d in vim8 - setlocal modifiable - call append(b - 1, s:format_message(a:bullet, a:name, a:lines)) - call s:switch_out() - endif -endfunction - -function! s:update_vim() - let s:jobs = {} - - call s:bar() - call s:tick() -endfunction - -function! s:tick() - let pull = s:update.pull - let prog = s:progress_opt(s:nvim || s:vim8) -while 1 " Without TCO, Vim stack is bound to explode - if empty(s:update.todo) - if empty(s:jobs) && !s:update.fin - call s:update_finish() - let s:update.fin = 1 - endif - return - endif - - let name = keys(s:update.todo)[0] - let spec = remove(s:update.todo, name) - let new = empty(globpath(spec.dir, '.git', 1)) - - call s:log(new ? '+' : '*', name, pull ? 'Updating ...' : 'Installing ...') - redraw - - let has_tag = has_key(spec, 'tag') - if !new - let [error, _] = s:git_validate(spec, 0) - if empty(error) - if pull - let fetch_opt = (has_tag && !empty(globpath(spec.dir, '.git/shallow'))) ? '--depth 99999999' : '' - call s:spawn(name, printf('git fetch %s %s 2>&1', fetch_opt, prog), { 'dir': spec.dir }) - else - let s:jobs[name] = { 'running': 0, 'lines': ['Already installed'], 'error': 0 } - endif - else - let s:jobs[name] = { 'running': 0, 'lines': s:lines(error), 'error': 1 } - endif - else - call s:spawn(name, - \ printf('git clone %s %s %s %s 2>&1', - \ has_tag ? '' : s:clone_opt, - \ prog, - \ s:shellesc(spec.uri), - \ s:shellesc(s:trim(spec.dir))), { 'new': 1 }) - endif - - if !s:jobs[name].running - call s:reap(name) - endif - if len(s:jobs) >= s:update.threads - break - endif -endwhile -endfunction - -function! s:update_python() -let py_exe = has('python') ? 'python' : 'python3' -execute py_exe "<< EOF" -import datetime -import functools -import os -try: - import queue -except ImportError: - import Queue as queue -import random -import re -import shutil -import signal -import subprocess -import tempfile -import threading as thr -import time -import traceback -import vim - -G_NVIM = vim.eval("has('nvim')") == '1' -G_PULL = vim.eval('s:update.pull') == '1' -G_RETRIES = int(vim.eval('get(g:, "plug_retries", 2)')) + 1 -G_TIMEOUT = int(vim.eval('get(g:, "plug_timeout", 60)')) -G_CLONE_OPT = vim.eval('s:clone_opt') -G_PROGRESS = vim.eval('s:progress_opt(1)') -G_LOG_PROB = 1.0 / int(vim.eval('s:update.threads')) -G_STOP = thr.Event() -G_IS_WIN = vim.eval('s:is_win') == '1' - -class PlugError(Exception): - def __init__(self, msg): - self.msg = msg -class CmdTimedOut(PlugError): - pass -class CmdFailed(PlugError): - pass -class InvalidURI(PlugError): - pass -class Action(object): - INSTALL, UPDATE, ERROR, DONE = ['+', '*', 'x', '-'] - -class Buffer(object): - def __init__(self, lock, num_plugs, is_pull): - self.bar = '' - self.event = 'Updating' if is_pull else 'Installing' - self.lock = lock - self.maxy = int(vim.eval('winheight(".")')) - self.num_plugs = num_plugs - - def __where(self, name): - """ Find first line with name in current buffer. Return line num. """ - found, lnum = False, 0 - matcher = re.compile('^[-+x*] {0}:'.format(name)) - for line in vim.current.buffer: - if matcher.search(line) is not None: - found = True - break - lnum += 1 - - if not found: - lnum = -1 - return lnum - - def header(self): - curbuf = vim.current.buffer - curbuf[0] = self.event + ' plugins ({0}/{1})'.format(len(self.bar), self.num_plugs) - - num_spaces = self.num_plugs - len(self.bar) - curbuf[1] = '[{0}{1}]'.format(self.bar, num_spaces * ' ') - - with self.lock: - vim.command('normal! 2G') - vim.command('redraw') - - def write(self, action, name, lines): - first, rest = lines[0], lines[1:] - msg = ['{0} {1}{2}{3}'.format(action, name, ': ' if first else '', first)] - msg.extend([' ' + line for line in rest]) - - try: - if action == Action.ERROR: - self.bar += 'x' - vim.command("call add(s:update.errors, '{0}')".format(name)) - elif action == Action.DONE: - self.bar += '=' - - curbuf = vim.current.buffer - lnum = self.__where(name) - if lnum != -1: # Found matching line num - del curbuf[lnum] - if lnum > self.maxy and action in set([Action.INSTALL, Action.UPDATE]): - lnum = 3 - else: - lnum = 3 - curbuf.append(msg, lnum) - - self.header() - except vim.error: - pass - -class Command(object): - CD = 'cd /d' if G_IS_WIN else 'cd' - - def __init__(self, cmd, cmd_dir=None, timeout=60, cb=None, clean=None): - self.cmd = cmd - if cmd_dir: - self.cmd = '{0} {1} && {2}'.format(Command.CD, cmd_dir, self.cmd) - self.timeout = timeout - self.callback = cb if cb else (lambda msg: None) - self.clean = clean if clean else (lambda: None) - self.proc = None - - @property - def alive(self): - """ Returns true only if command still running. """ - return self.proc and self.proc.poll() is None - - def execute(self, ntries=3): - """ Execute the command with ntries if CmdTimedOut. - Returns the output of the command if no Exception. - """ - attempt, finished, limit = 0, False, self.timeout - - while not finished: - try: - attempt += 1 - result = self.try_command() - finished = True - return result - except CmdTimedOut: - if attempt != ntries: - self.notify_retry() - self.timeout += limit - else: - raise - - def notify_retry(self): - """ Retry required for command, notify user. """ - for count in range(3, 0, -1): - if G_STOP.is_set(): - raise KeyboardInterrupt - msg = 'Timeout. Will retry in {0} second{1} ...'.format( - count, 's' if count != 1 else '') - self.callback([msg]) - time.sleep(1) - self.callback(['Retrying ...']) - - def try_command(self): - """ Execute a cmd & poll for callback. Returns list of output. - Raises CmdFailed -> return code for Popen isn't 0 - Raises CmdTimedOut -> command exceeded timeout without new output - """ - first_line = True - - try: - tfile = tempfile.NamedTemporaryFile(mode='w+b') - preexec_fn = not G_IS_WIN and os.setsid or None - self.proc = subprocess.Popen(self.cmd, stdout=tfile, - stderr=subprocess.STDOUT, - stdin=subprocess.PIPE, shell=True, - preexec_fn=preexec_fn) - thrd = thr.Thread(target=(lambda proc: proc.wait()), args=(self.proc,)) - thrd.start() - - thread_not_started = True - while thread_not_started: - try: - thrd.join(0.1) - thread_not_started = False - except RuntimeError: - pass - - while self.alive: - if G_STOP.is_set(): - raise KeyboardInterrupt - - if first_line or random.random() < G_LOG_PROB: - first_line = False - line = '' if G_IS_WIN else nonblock_read(tfile.name) - if line: - self.callback([line]) - - time_diff = time.time() - os.path.getmtime(tfile.name) - if time_diff > self.timeout: - raise CmdTimedOut(['Timeout!']) - - thrd.join(0.5) - - tfile.seek(0) - result = [line.decode('utf-8', 'replace').rstrip() for line in tfile] - - if self.proc.returncode != 0: - raise CmdFailed([''] + result) - - return result - except: - self.terminate() - raise - - def terminate(self): - """ Terminate process and cleanup. """ - if self.alive: - if G_IS_WIN: - os.kill(self.proc.pid, signal.SIGINT) - else: - os.killpg(self.proc.pid, signal.SIGTERM) - self.clean() - -class Plugin(object): - def __init__(self, name, args, buf_q, lock): - self.name = name - self.args = args - self.buf_q = buf_q - self.lock = lock - self.tag = args.get('tag', 0) - - def manage(self): - try: - if os.path.exists(self.args['dir']): - self.update() - else: - self.install() - with self.lock: - thread_vim_command("let s:update.new['{0}'] = 1".format(self.name)) - except PlugError as exc: - self.write(Action.ERROR, self.name, exc.msg) - except KeyboardInterrupt: - G_STOP.set() - self.write(Action.ERROR, self.name, ['Interrupted!']) - except: - # Any exception except those above print stack trace - msg = 'Trace:\n{0}'.format(traceback.format_exc().rstrip()) - self.write(Action.ERROR, self.name, msg.split('\n')) - raise - - def install(self): - target = self.args['dir'] - if target[-1] == '\\': - target = target[0:-1] - - def clean(target): - def _clean(): - try: - shutil.rmtree(target) - except OSError: - pass - return _clean - - self.write(Action.INSTALL, self.name, ['Installing ...']) - callback = functools.partial(self.write, Action.INSTALL, self.name) - cmd = 'git clone {0} {1} {2} {3} 2>&1'.format( - '' if self.tag else G_CLONE_OPT, G_PROGRESS, self.args['uri'], - esc(target)) - com = Command(cmd, None, G_TIMEOUT, callback, clean(target)) - result = com.execute(G_RETRIES) - self.write(Action.DONE, self.name, result[-1:]) - - def repo_uri(self): - cmd = 'git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url' - command = Command(cmd, self.args['dir'], G_TIMEOUT,) - result = command.execute(G_RETRIES) - return result[-1] - - def update(self): - actual_uri = self.repo_uri() - expect_uri = self.args['uri'] - regex = re.compile(r'^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$') - ma = regex.match(actual_uri) - mb = regex.match(expect_uri) - if ma is None or mb is None or ma.groups() != mb.groups(): - msg = ['', - 'Invalid URI: {0}'.format(actual_uri), - 'Expected {0}'.format(expect_uri), - 'PlugClean required.'] - raise InvalidURI(msg) - - if G_PULL: - self.write(Action.UPDATE, self.name, ['Updating ...']) - callback = functools.partial(self.write, Action.UPDATE, self.name) - fetch_opt = '--depth 99999999' if self.tag and os.path.isfile(os.path.join(self.args['dir'], '.git/shallow')) else '' - cmd = 'git fetch {0} {1} 2>&1'.format(fetch_opt, G_PROGRESS) - com = Command(cmd, self.args['dir'], G_TIMEOUT, callback) - result = com.execute(G_RETRIES) - self.write(Action.DONE, self.name, result[-1:]) - else: - self.write(Action.DONE, self.name, ['Already installed']) - - def write(self, action, name, msg): - self.buf_q.put((action, name, msg)) - -class PlugThread(thr.Thread): - def __init__(self, tname, args): - super(PlugThread, self).__init__() - self.tname = tname - self.args = args - - def run(self): - thr.current_thread().name = self.tname - buf_q, work_q, lock = self.args - - try: - while not G_STOP.is_set(): - name, args = work_q.get_nowait() - plug = Plugin(name, args, buf_q, lock) - plug.manage() - work_q.task_done() - except queue.Empty: - pass - -class RefreshThread(thr.Thread): - def __init__(self, lock): - super(RefreshThread, self).__init__() - self.lock = lock - self.running = True - - def run(self): - while self.running: - with self.lock: - thread_vim_command('noautocmd normal! a') - time.sleep(0.33) - - def stop(self): - self.running = False - -if G_NVIM: - def thread_vim_command(cmd): - vim.session.threadsafe_call(lambda: vim.command(cmd)) -else: - def thread_vim_command(cmd): - vim.command(cmd) - -def esc(name): - return '"' + name.replace('"', '\"') + '"' - -def nonblock_read(fname): - """ Read a file with nonblock flag. Return the last line. """ - fread = os.open(fname, os.O_RDONLY | os.O_NONBLOCK) - buf = os.read(fread, 100000).decode('utf-8', 'replace') - os.close(fread) - - line = buf.rstrip('\r\n') - left = max(line.rfind('\r'), line.rfind('\n')) - if left != -1: - left += 1 - line = line[left:] - - return line - -def main(): - thr.current_thread().name = 'main' - nthreads = int(vim.eval('s:update.threads')) - plugs = vim.eval('s:update.todo') - mac_gui = vim.eval('s:mac_gui') == '1' - - lock = thr.Lock() - buf = Buffer(lock, len(plugs), G_PULL) - buf_q, work_q = queue.Queue(), queue.Queue() - for work in plugs.items(): - work_q.put(work) - - start_cnt = thr.active_count() - for num in range(nthreads): - tname = 'PlugT-{0:02}'.format(num) - thread = PlugThread(tname, (buf_q, work_q, lock)) - thread.start() - if mac_gui: - rthread = RefreshThread(lock) - rthread.start() - - while not buf_q.empty() or thr.active_count() != start_cnt: - try: - action, name, msg = buf_q.get(True, 0.25) - buf.write(action, name, ['OK'] if not msg else msg) - buf_q.task_done() - except queue.Empty: - pass - except KeyboardInterrupt: - G_STOP.set() - - if mac_gui: - rthread.stop() - rthread.join() - -main() -EOF -endfunction - -function! s:update_ruby() - ruby << EOF - module PlugStream - SEP = ["\r", "\n", nil] - def get_line - buffer = '' - loop do - char = readchar rescue return - if SEP.include? char.chr - buffer << $/ - break - else - buffer << char - end - end - buffer - end - end unless defined?(PlugStream) - - def esc arg - %["#{arg.gsub('"', '\"')}"] - end - - def killall pid - pids = [pid] - if /mswin|mingw|bccwin/ =~ RUBY_PLATFORM - pids.each { |pid| Process.kill 'INT', pid.to_i rescue nil } - else - unless `which pgrep 2> /dev/null`.empty? - children = pids - until children.empty? - children = children.map { |pid| - `pgrep -P #{pid}`.lines.map { |l| l.chomp } - }.flatten - pids += children - end - end - pids.each { |pid| Process.kill 'TERM', pid.to_i rescue nil } - end - end - - def compare_git_uri a, b - regex = %r{^(?:\w+://)?(?:[^@/]*@)?([^:/]*(?::[0-9]*)?)[:/](.*?)(?:\.git)?/?$} - regex.match(a).to_a.drop(1) == regex.match(b).to_a.drop(1) - end - - require 'thread' - require 'fileutils' - require 'timeout' - running = true - iswin = VIM::evaluate('s:is_win').to_i == 1 - pull = VIM::evaluate('s:update.pull').to_i == 1 - base = VIM::evaluate('g:plug_home') - all = VIM::evaluate('s:update.todo') - limit = VIM::evaluate('get(g:, "plug_timeout", 60)') - tries = VIM::evaluate('get(g:, "plug_retries", 2)') + 1 - nthr = VIM::evaluate('s:update.threads').to_i - maxy = VIM::evaluate('winheight(".")').to_i - vim7 = VIM::evaluate('v:version').to_i <= 703 && RUBY_PLATFORM =~ /darwin/ - cd = iswin ? 'cd /d' : 'cd' - tot = VIM::evaluate('len(s:update.todo)') || 0 - bar = '' - skip = 'Already installed' - mtx = Mutex.new - take1 = proc { mtx.synchronize { running && all.shift } } - logh = proc { - cnt = bar.length - $curbuf[1] = "#{pull ? 'Updating' : 'Installing'} plugins (#{cnt}/#{tot})" - $curbuf[2] = '[' + bar.ljust(tot) + ']' - VIM::command('normal! 2G') - VIM::command('redraw') - } - where = proc { |name| (1..($curbuf.length)).find { |l| $curbuf[l] =~ /^[-+x*] #{name}:/ } } - log = proc { |name, result, type| - mtx.synchronize do - ing = ![true, false].include?(type) - bar += type ? '=' : 'x' unless ing - b = case type - when :install then '+' when :update then '*' - when true, nil then '-' else - VIM::command("call add(s:update.errors, '#{name}')") - 'x' - end - result = - if type || type.nil? - ["#{b} #{name}: #{result.lines.to_a.last || 'OK'}"] - elsif result =~ /^Interrupted|^Timeout/ - ["#{b} #{name}: #{result}"] - else - ["#{b} #{name}"] + result.lines.map { |l| " " << l } - end - if lnum = where.call(name) - $curbuf.delete lnum - lnum = 4 if ing && lnum > maxy - end - result.each_with_index do |line, offset| - $curbuf.append((lnum || 4) - 1 + offset, line.gsub(/\e\[./, '').chomp) - end - logh.call - end - } - bt = proc { |cmd, name, type, cleanup| - tried = timeout = 0 - begin - tried += 1 - timeout += limit - fd = nil - data = '' - if iswin - Timeout::timeout(timeout) do - tmp = VIM::evaluate('tempname()') - system("(#{cmd}) > #{tmp}") - data = File.read(tmp).chomp - File.unlink tmp rescue nil - end - else - fd = IO.popen(cmd).extend(PlugStream) - first_line = true - log_prob = 1.0 / nthr - while line = Timeout::timeout(timeout) { fd.get_line } - data << line - log.call name, line.chomp, type if name && (first_line || rand < log_prob) - first_line = false - end - fd.close - end - [$? == 0, data.chomp] - rescue Timeout::Error, Interrupt => e - if fd && !fd.closed? - killall fd.pid - fd.close - end - cleanup.call if cleanup - if e.is_a?(Timeout::Error) && tried < tries - 3.downto(1) do |countdown| - s = countdown > 1 ? 's' : '' - log.call name, "Timeout. Will retry in #{countdown} second#{s} ...", type - sleep 1 - end - log.call name, 'Retrying ...', type - retry - end - [false, e.is_a?(Interrupt) ? "Interrupted!" : "Timeout!"] - end - } - main = Thread.current - threads = [] - watcher = Thread.new { - if vim7 - while VIM::evaluate('getchar(1)') - sleep 0.1 - end - else - require 'io/console' # >= Ruby 1.9 - nil until IO.console.getch == 3.chr - end - mtx.synchronize do - running = false - threads.each { |t| t.raise Interrupt } unless vim7 - end - threads.each { |t| t.join rescue nil } - main.kill - } - refresh = Thread.new { - while true - mtx.synchronize do - break unless running - VIM::command('noautocmd normal! a') - end - sleep 0.2 - end - } if VIM::evaluate('s:mac_gui') == 1 - - clone_opt = VIM::evaluate('s:clone_opt') - progress = VIM::evaluate('s:progress_opt(1)') - nthr.times do - mtx.synchronize do - threads << Thread.new { - while pair = take1.call - name = pair.first - dir, uri, tag = pair.last.values_at *%w[dir uri tag] - exists = File.directory? dir - ok, result = - if exists - chdir = "#{cd} #{iswin ? dir : esc(dir)}" - ret, data = bt.call "#{chdir} && git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url", nil, nil, nil - current_uri = data.lines.to_a.last - if !ret - if data =~ /^Interrupted|^Timeout/ - [false, data] - else - [false, [data.chomp, "PlugClean required."].join($/)] - end - elsif !compare_git_uri(current_uri, uri) - [false, ["Invalid URI: #{current_uri}", - "Expected: #{uri}", - "PlugClean required."].join($/)] - else - if pull - log.call name, 'Updating ...', :update - fetch_opt = (tag && File.exist?(File.join(dir, '.git/shallow'))) ? '--depth 99999999' : '' - bt.call "#{chdir} && git fetch #{fetch_opt} #{progress} 2>&1", name, :update, nil - else - [true, skip] - end - end - else - d = esc dir.sub(%r{[\\/]+$}, '') - log.call name, 'Installing ...', :install - bt.call "git clone #{clone_opt unless tag} #{progress} #{uri} #{d} 2>&1", name, :install, proc { - FileUtils.rm_rf dir - } - end - mtx.synchronize { VIM::command("let s:update.new['#{name}'] = 1") } if !exists && ok - log.call name, result, ok - end - } if running - end - end - threads.each { |t| t.join rescue nil } - logh.call - refresh.kill if refresh - watcher.kill -EOF -endfunction - -function! s:shellesc_cmd(arg) - let escaped = substitute(a:arg, '[&|<>()@^]', '^&', 'g') - let escaped = substitute(escaped, '%', '%%', 'g') - let escaped = substitute(escaped, '"', '\\^&', 'g') - let escaped = substitute(escaped, '\(\\\+\)\(\\^\)', '\1\1\2', 'g') - return '^"'.substitute(escaped, '\(\\\+\)$', '\1\1', '').'^"' -endfunction - -function! s:shellesc(arg) - if &shell =~# 'cmd.exe$' - return s:shellesc_cmd(a:arg) - endif - return shellescape(a:arg) -endfunction - -function! s:glob_dir(path) - return map(filter(s:glob(a:path, '**'), 'isdirectory(v:val)'), 's:dirpath(v:val)') -endfunction - -function! s:progress_bar(line, bar, total) - call setline(a:line, '[' . s:lpad(a:bar, a:total) . ']') -endfunction - -function! s:compare_git_uri(a, b) - " See `git help clone' - " https:// [user@] github.com[:port] / junegunn/vim-plug [.git] - " [git@] github.com[:port] : junegunn/vim-plug [.git] - " file:// / junegunn/vim-plug [/] - " / junegunn/vim-plug [/] - let pat = '^\%(\w\+://\)\='.'\%([^@/]*@\)\='.'\([^:/]*\%(:[0-9]*\)\=\)'.'[:/]'.'\(.\{-}\)'.'\%(\.git\)\=/\?$' - let ma = matchlist(a:a, pat) - let mb = matchlist(a:b, pat) - return ma[1:2] ==# mb[1:2] -endfunction - -function! s:format_message(bullet, name, message) - if a:bullet != 'x' - return [printf('%s %s: %s', a:bullet, a:name, s:lastline(a:message))] - else - let lines = map(s:lines(a:message), '" ".v:val') - return extend([printf('x %s:', a:name)], lines) - endif -endfunction - -function! s:with_cd(cmd, dir) - return printf('cd%s %s && %s', s:is_win ? ' /d' : '', s:shellesc(a:dir), a:cmd) -endfunction - -function! s:system(cmd, ...) - try - let [sh, shellcmdflag, shrd] = s:chsh(1) - let cmd = a:0 > 0 ? s:with_cd(a:cmd, a:1) : a:cmd - if s:is_win - let batchfile = tempname().'.bat' - call writefile(["@echo off\r", cmd . "\r"], batchfile) - let cmd = batchfile - endif - return system(s:is_win ? '('.cmd.')' : cmd) - finally - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win - call delete(batchfile) - endif - endtry -endfunction - -function! s:system_chomp(...) - let ret = call('s:system', a:000) - return v:shell_error ? '' : substitute(ret, '\n$', '', '') -endfunction - -function! s:git_validate(spec, check_branch) - let err = '' - if isdirectory(a:spec.dir) - let result = s:lines(s:system('git rev-parse --abbrev-ref HEAD 2>&1 && git config -f .git/config remote.origin.url', a:spec.dir)) - let remote = result[-1] - if v:shell_error - let err = join([remote, 'PlugClean required.'], "\n") - elseif !s:compare_git_uri(remote, a:spec.uri) - let err = join(['Invalid URI: '.remote, - \ 'Expected: '.a:spec.uri, - \ 'PlugClean required.'], "\n") - elseif a:check_branch && has_key(a:spec, 'commit') - let result = s:lines(s:system('git rev-parse HEAD 2>&1', a:spec.dir)) - let sha = result[-1] - if v:shell_error - let err = join(add(result, 'PlugClean required.'), "\n") - elseif !s:hash_match(sha, a:spec.commit) - let err = join([printf('Invalid HEAD (expected: %s, actual: %s)', - \ a:spec.commit[:6], sha[:6]), - \ 'PlugUpdate required.'], "\n") - endif - elseif a:check_branch - let branch = result[0] - " Check tag - if has_key(a:spec, 'tag') - let tag = s:system_chomp('git describe --exact-match --tags HEAD 2>&1', a:spec.dir) - if a:spec.tag !=# tag && a:spec.tag !~ '\*' - let err = printf('Invalid tag: %s (expected: %s). Try PlugUpdate.', - \ (empty(tag) ? 'N/A' : tag), a:spec.tag) - endif - " Check branch - elseif a:spec.branch !=# branch - let err = printf('Invalid branch: %s (expected: %s). Try PlugUpdate.', - \ branch, a:spec.branch) - endif - if empty(err) - let [ahead, behind] = split(s:lastline(s:system(printf( - \ 'git rev-list --count --left-right HEAD...origin/%s', - \ a:spec.branch), a:spec.dir)), '\t') - if !v:shell_error && ahead - if behind - " Only mention PlugClean if diverged, otherwise it's likely to be - " pushable (and probably not that messed up). - let err = printf( - \ "Diverged from origin/%s (%d commit(s) ahead and %d commit(s) behind!\n" - \ .'Backup local changes and run PlugClean and PlugUpdate to reinstall it.', a:spec.branch, ahead, behind) - else - let err = printf("Ahead of origin/%s by %d commit(s).\n" - \ .'Cannot update until local changes are pushed.', - \ a:spec.branch, ahead) - endif - endif - endif - endif - else - let err = 'Not found' - endif - return [err, err =~# 'PlugClean'] -endfunction - -function! s:rm_rf(dir) - if isdirectory(a:dir) - call s:system((s:is_win ? 'rmdir /S /Q ' : 'rm -rf ') . s:shellesc(a:dir)) - endif -endfunction - -function! s:clean(force) - call s:prepare() - call append(0, 'Searching for invalid plugins in '.g:plug_home) - call append(1, '') - - " List of valid directories - let dirs = [] - let errs = {} - let [cnt, total] = [0, len(g:plugs)] - for [name, spec] in items(g:plugs) - if !s:is_managed(name) - call add(dirs, spec.dir) - else - let [err, clean] = s:git_validate(spec, 1) - if clean - let errs[spec.dir] = s:lines(err)[0] - else - call add(dirs, spec.dir) - endif - endif - let cnt += 1 - call s:progress_bar(2, repeat('=', cnt), total) - normal! 2G - redraw - endfor - - let allowed = {} - for dir in dirs - let allowed[s:dirpath(fnamemodify(dir, ':h:h'))] = 1 - let allowed[dir] = 1 - for child in s:glob_dir(dir) - let allowed[child] = 1 - endfor - endfor - - let todo = [] - let found = sort(s:glob_dir(g:plug_home)) - while !empty(found) - let f = remove(found, 0) - if !has_key(allowed, f) && isdirectory(f) - call add(todo, f) - call append(line('$'), '- ' . f) - if has_key(errs, f) - call append(line('$'), ' ' . errs[f]) - endif - let found = filter(found, 'stridx(v:val, f) != 0') - end - endwhile - - 4 - redraw - if empty(todo) - call append(line('$'), 'Already clean.') - else - let s:clean_count = 0 - call append(3, ['Directories to delete:', '']) - redraw! - if a:force || s:ask_no_interrupt('Delete all directories?') - call s:delete([6, line('$')], 1) - else - call setline(4, 'Cancelled.') - nnoremap d :set opfunc=delete_opg@ - nmap dd d_ - xnoremap d :call delete_op(visualmode(), 1) - echo 'Delete the lines (d{motion}) to delete the corresponding directories' - endif - endif - 4 - setlocal nomodifiable -endfunction - -function! s:delete_op(type, ...) - call s:delete(a:0 ? [line("'<"), line("'>")] : [line("'["), line("']")], 0) -endfunction - -function! s:delete(range, force) - let [l1, l2] = a:range - let force = a:force - while l1 <= l2 - let line = getline(l1) - if line =~ '^- ' && isdirectory(line[2:]) - execute l1 - redraw! - let answer = force ? 1 : s:ask('Delete '.line[2:].'?', 1) - let force = force || answer > 1 - if answer - call s:rm_rf(line[2:]) - setlocal modifiable - call setline(l1, '~'.line[1:]) - let s:clean_count += 1 - call setline(4, printf('Removed %d directories.', s:clean_count)) - setlocal nomodifiable - endif - endif - let l1 += 1 - endwhile -endfunction - -function! s:upgrade() - echo 'Downloading the latest version of vim-plug' - redraw - let tmp = tempname() - let new = tmp . '/plug.vim' - - try - let out = s:system(printf('git clone --depth 1 %s %s', s:shellesc(s:plug_src), s:shellesc(tmp))) - if v:shell_error - return s:err('Error upgrading vim-plug: '. out) - endif - - if readfile(s:me) ==# readfile(new) - echo 'vim-plug is already up-to-date' - return 0 - else - call rename(s:me, s:me . '.old') - call rename(new, s:me) - unlet g:loaded_plug - echo 'vim-plug has been upgraded' - return 1 - endif - finally - silent! call s:rm_rf(tmp) - endtry -endfunction - -function! s:upgrade_specs() - for spec in values(g:plugs) - let spec.frozen = get(spec, 'frozen', 0) - endfor -endfunction - -function! s:status() - call s:prepare() - call append(0, 'Checking plugins') - call append(1, '') - - let ecnt = 0 - let unloaded = 0 - let [cnt, total] = [0, len(g:plugs)] - for [name, spec] in items(g:plugs) - let is_dir = isdirectory(spec.dir) - if has_key(spec, 'uri') - if is_dir - let [err, _] = s:git_validate(spec, 1) - let [valid, msg] = [empty(err), empty(err) ? 'OK' : err] - else - let [valid, msg] = [0, 'Not found. Try PlugInstall.'] - endif - else - if is_dir - let [valid, msg] = [1, 'OK'] - else - let [valid, msg] = [0, 'Not found.'] - endif - endif - let cnt += 1 - let ecnt += !valid - " `s:loaded` entry can be missing if PlugUpgraded - if is_dir && get(s:loaded, name, -1) == 0 - let unloaded = 1 - let msg .= ' (not loaded)' - endif - call s:progress_bar(2, repeat('=', cnt), total) - call append(3, s:format_message(valid ? '-' : 'x', name, msg)) - normal! 2G - redraw - endfor - call setline(1, 'Finished. '.ecnt.' error(s).') - normal! gg - setlocal nomodifiable - if unloaded - echo "Press 'L' on each line to load plugin, or 'U' to update" - nnoremap L :call status_load(line('.')) - xnoremap L :call status_load(line('.')) - end -endfunction - -function! s:extract_name(str, prefix, suffix) - return matchstr(a:str, '^'.a:prefix.' \zs[^:]\+\ze:.*'.a:suffix.'$') -endfunction - -function! s:status_load(lnum) - let line = getline(a:lnum) - let name = s:extract_name(line, '-', '(not loaded)') - if !empty(name) - call plug#load(name) - setlocal modifiable - call setline(a:lnum, substitute(line, ' (not loaded)$', '', '')) - setlocal nomodifiable - endif -endfunction - -function! s:status_update() range - let lines = getline(a:firstline, a:lastline) - let names = filter(map(lines, 's:extract_name(v:val, "[x-]", "")'), '!empty(v:val)') - if !empty(names) - echo - execute 'PlugUpdate' join(names) - endif -endfunction - -function! s:is_preview_window_open() - silent! wincmd P - if &previewwindow - wincmd p - return 1 - endif -endfunction - -function! s:find_name(lnum) - for lnum in reverse(range(1, a:lnum)) - let line = getline(lnum) - if empty(line) - return '' - endif - let name = s:extract_name(line, '-', '') - if !empty(name) - return name - endif - endfor - return '' -endfunction - -function! s:preview_commit() - if b:plug_preview < 0 - let b:plug_preview = !s:is_preview_window_open() - endif - - let sha = matchstr(getline('.'), '^ \X*\zs[0-9a-f]\{7,9}') - if empty(sha) - return - endif - - let name = s:find_name(line('.')) - if empty(name) || !has_key(g:plugs, name) || !isdirectory(g:plugs[name].dir) - return - endif - - if exists('g:plug_pwindow') && !s:is_preview_window_open() - execute g:plug_pwindow - execute 'e' sha - else - execute 'pedit' sha - wincmd P - endif - setlocal previewwindow filetype=git buftype=nofile nobuflisted modifiable - try - let [sh, shellcmdflag, shrd] = s:chsh(1) - let cmd = 'cd '.s:shellesc(g:plugs[name].dir).' && git show --no-color --pretty=medium '.sha - if s:is_win - let batchfile = tempname().'.bat' - call writefile(["@echo off\r", cmd . "\r"], batchfile) - let cmd = batchfile - endif - execute 'silent %!' cmd - finally - let [&shell, &shellcmdflag, &shellredir] = [sh, shellcmdflag, shrd] - if s:is_win - call delete(batchfile) - endif - endtry - setlocal nomodifiable - nnoremap q :q - wincmd p -endfunction - -function! s:section(flags) - call search('\(^[x-] \)\@<=[^:]\+:', a:flags) -endfunction - -function! s:format_git_log(line) - let indent = ' ' - let tokens = split(a:line, nr2char(1)) - if len(tokens) != 5 - return indent.substitute(a:line, '\s*$', '', '') - endif - let [graph, sha, refs, subject, date] = tokens - let tag = matchstr(refs, 'tag: [^,)]\+') - let tag = empty(tag) ? ' ' : ' ('.tag.') ' - return printf('%s%s%s%s%s (%s)', indent, graph, sha, tag, subject, date) -endfunction - -function! s:append_ul(lnum, text) - call append(a:lnum, ['', a:text, repeat('-', len(a:text))]) -endfunction - -function! s:diff() - call s:prepare() - call append(0, ['Collecting changes ...', '']) - let cnts = [0, 0] - let bar = '' - let total = filter(copy(g:plugs), 's:is_managed(v:key) && isdirectory(v:val.dir)') - call s:progress_bar(2, bar, len(total)) - for origin in [1, 0] - let plugs = reverse(sort(items(filter(copy(total), (origin ? '' : '!').'(has_key(v:val, "commit") || has_key(v:val, "tag"))')))) - if empty(plugs) - continue - endif - call s:append_ul(2, origin ? 'Pending updates:' : 'Last update:') - for [k, v] in plugs - let range = origin ? '..origin/'.v.branch : 'HEAD@{1}..' - let cmd = 'git log --graph --color=never '.join(map(['--pretty=format:%x01%h%x01%d%x01%s%x01%cr', range], 's:shellesc(v:val)')) - if has_key(v, 'rtp') - let cmd .= ' -- '.s:shellesc(v.rtp) - endif - let diff = s:system_chomp(cmd, v.dir) - if !empty(diff) - let ref = has_key(v, 'tag') ? (' (tag: '.v.tag.')') : has_key(v, 'commit') ? (' '.v.commit) : '' - call append(5, extend(['', '- '.k.':'.ref], map(s:lines(diff), 's:format_git_log(v:val)'))) - let cnts[origin] += 1 - endif - let bar .= '=' - call s:progress_bar(2, bar, len(total)) - normal! 2G - redraw - endfor - if !cnts[origin] - call append(5, ['', 'N/A']) - endif - endfor - call setline(1, printf('%d plugin(s) updated.', cnts[0]) - \ . (cnts[1] ? printf(' %d plugin(s) have pending updates.', cnts[1]) : '')) - - if cnts[0] || cnts[1] - nnoremap (plug-preview) :silent! call preview_commit() - if empty(maparg("\", 'n')) - nmap (plug-preview) - endif - if empty(maparg('o', 'n')) - nmap o (plug-preview) - endif - endif - if cnts[0] - nnoremap X :call revert() - echo "Press 'X' on each block to revert the update" - endif - normal! gg - setlocal nomodifiable -endfunction - -function! s:revert() - if search('^Pending updates', 'bnW') - return - endif - - let name = s:find_name(line('.')) - if empty(name) || !has_key(g:plugs, name) || - \ input(printf('Revert the update of %s? (y/N) ', name)) !~? '^y' - return - endif - - call s:system('git reset --hard HEAD@{1} && git checkout '.s:esc(g:plugs[name].branch).' --', g:plugs[name].dir) - setlocal modifiable - normal! "_dap - setlocal nomodifiable - echo 'Reverted' -endfunction - -function! s:snapshot(force, ...) abort - call s:prepare() - setf vim - call append(0, ['" Generated by vim-plug', - \ '" '.strftime("%c"), - \ '" :source this file in vim to restore the snapshot', - \ '" or execute: vim -S snapshot.vim', - \ '', '', 'PlugUpdate!']) - 1 - let anchor = line('$') - 3 - let names = sort(keys(filter(copy(g:plugs), - \'has_key(v:val, "uri") && !has_key(v:val, "commit") && isdirectory(v:val.dir)'))) - for name in reverse(names) - let sha = s:system_chomp('git rev-parse --short HEAD', g:plugs[name].dir) - if !empty(sha) - call append(anchor, printf("silent! let g:plugs['%s'].commit = '%s'", name, sha)) - redraw - endif - endfor - - if a:0 > 0 - let fn = expand(a:1) - if filereadable(fn) && !(a:force || s:ask(a:1.' already exists. Overwrite?')) - return - endif - call writefile(getline(1, '$'), fn) - echo 'Saved as '.a:1 - silent execute 'e' s:esc(fn) - setf vim - endif -endfunction - -function! s:split_rtp() - return split(&rtp, '\\\@= 0.4.3 only.", - "default": false - }, - "suggest.disableKind": { - "type": "boolean", - "description": "Remove kind field from vim complete item.", - "default": false - }, - "suggest.disableMenu": { - "type": "boolean", - "description": "Remove menu field from vim complete item.", - "default": false - }, - "suggest.disableMenuShortcut": { - "type": "boolean", - "description": "Disable shortcut of completion source in menu.", - "default": false - }, - "suggest.snippetIndicator": { - "type": "string", - "default": "~", - "description": "The character used in abbr of complete item to indicate the item could be expand as snippet." - }, - "suggest.maxCompleteItemCount": { - "type": "number", - "default": 50, - "description": "Maximum number of complete items shown in vim" - }, - "suggest.preferCompleteThanJumpPlaceholder": { - "type": "boolean", - "description": "Confirm completion instead of jump to next placeholder when completion is activated.", - "default": false - }, - "suggest.fixInsertedWord": { - "type": "boolean", - "description": "Make inserted word replace word characters after cursor position.", - "default": true - }, - "suggest.localityBonus": { - "type": "boolean", - "description": "Boost suggestions that appear closer to the cursor position.", - "default": true - }, - "suggest.triggerAfterInsertEnter": { - "type": "boolean", - "description": "Trigger completion after InsertEnter, auto trigger should be 'always' to enable this option", - "default": false - }, - "suggest.timeout": { - "type": "integer", - "default": 5000, - "minimum": 500, - "maximum": 15000, - "description": "Timeout for completion, in miliseconds." - }, - "suggest.minTriggerInputLength": { - "type": "number", - "default": 1, - "description": "Mininal input length for trigger completion, default 1" - }, - "suggest.triggerCompletionWait": { - "type": "integer", - "default": 50, - "minimum": 30, - "maximum": 500, - "description": "Wait time between text change and completion start, cancel completion when text changed during wait." - }, - "suggest.echodocSupport": { - "type": "boolean", - "default": false, - "description": "When enabled, add function signature to user_data.signature to support echodoc.vim" - }, - "suggest.acceptSuggestionOnCommitCharacter": { - "type": "boolean", - "default": false, - "description": "Controls whether suggestions should be accepted on commit characters. For example, in JavaScript, the semi-colon (`;`) can be a commit character that accepts a suggestion and types that character. Requires CompleteChanged event to work." - }, - "suggest.noselect": { - "type": "boolean", - "description": "Not make vim select first item on completion start", - "default": true - }, - "suggest.keepCompleteopt": { - "type": "boolean", - "description": "When enabled, completeopt is not overriden, auto completion will be disabled if completeopt doesn't have noinsert and noselect.", - "default": false - }, - "suggest.lowPrioritySourceLimit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Max items count for source priority lower than 90." - }, - "suggest.highPrioritySourceLimit": { - "type": "integer", - "minimum": 1, - "maximum": 100, - "description": "Max items count for source priority bigger than or equal to 90." - }, - "suggest.removeDuplicateItems": { - "type": "boolean", - "description": "Remove completion items with duplicated word for all sources, snippet items are excluded.", - "default": false - }, - "suggest.defaultSortMethod": { - "type": "string", - "description": "Default sorting behavior for suggested completion items.", - "default": "length", - "enum": ["length", "alphabetical"] - }, - "suggest.completionItemKindLabels": { - "type": "object", - "default": {}, - "description": "Set custom labels to completion items' kinds.", - "properties": { - "text": { "type": "string" }, - "method": { "type": "string" }, - "function": { "type": "string" }, - "constructor": { "type": "string" }, - "field": { "type": "string" }, - "variable": { "type": "string" }, - "class": { "type": "string" }, - "interface": { "type": "string" }, - "module": { "type": "string" }, - "property": { "type": "string" }, - "unit": { "type": "string" }, - "value": { "type": "string" }, - "enum": { "type": "string" }, - "keyword": { "type": "string" }, - "snippet": { "type": "string" }, - "color": { "type": "string" }, - "file": { "type": "string" }, - "reference": { "type": "string" }, - "folder": { "type": "string" }, - "enumMember": { "type": "string" }, - "constant": { "type": "string" }, - "struct": { "type": "string" }, - "event": { "type": "string" }, - "operator": { "type": "string" }, - "typeParameter": { "type": "string" }, - "default": { "type": "string" } - }, - "additionalProperties": false - }, - "suggest.invalidInsertCharacters": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Invalid character for strip valid word when inserting text of complete item.", - "default": [" ", "(", "<", "{", "[", "\r", "\n"] - }, - "suggest.asciiCharactersOnly": { - "type": "boolean", - "description": "Suggest ASCII characters only", - "default": false - }, - "diagnostic.enable": { - "type": "boolean", - "description": "Set to false to disable diagnostic display", - "default": true - }, - "diagnostic.level": { - "type": "string", - "description": "Used for filter diagnostics by diagnostic severity.", - "default": "hint", - "enum": ["hint", "information", "warning", "error"] - }, - "diagnostic.checkCurrentLine": { - "type": "boolean", - "description": "When enabled, show all diagnostics of current line if there are none at the current position.", - "default": false - }, - "diagnostic.messageTarget": { - "type": "string", - "description": "Diagnostic message target.", - "default": "float", - "enum": ["echo", "float"] - }, - "diagnostic.messageDelay": { - "type": "number", - "description": "How long to wait (in milliseconds) before displaying the diagnostic message with echo or float", - "default": 200 - }, - "diagnostic.refreshOnInsertMode": { - "type": "boolean", - "description": "Enable diagnostic refresh on insert mode, default false.", - "default": false - }, - "diagnostic.refreshAfterSave": { - "type": "boolean", - "description": "Only refresh diagnostics after save, default false.", - "default": false - }, - "diagnostic.displayByAle": { - "type": "boolean", - "description": "Use Ale for display diagnostics in vim, will disable coc for display diagnostics, restart required on change.", - "default": false - }, - "diagnostic.virtualText": { - "type": "boolean", - "description": "Use NeoVim virtual text to display diagnostics", - "default": false - }, - "diagnostic.virtualTextCurrentLineOnly": { - "type": "boolean", - "description": "Only show virtualText diagnostic on current cursor line", - "default": true - }, - "diagnostic.virtualTextPrefix": { - "type": "string", - "description": "The prefix added virtual text diagnostics", - "default": " " - }, - "diagnostic.virtualTextLines": { - "type": "number", - "description": "The number of non empty lines from a diagnostic to display", - "default": 3 - }, - "diagnostic.virtualTextLineSeparator": { - "type": "string", - "description": "The text that will mark a line end from the diagnostic message", - "default": " \\ " - }, - "diagnostic.enableSign": { - "type": "boolean", - "default": true, - "description": "Enable signs for diagnostics." - }, - "diagnostic.enableHighlightLineNumber": { - "type": "boolean", - "default": true, - "description": "Enable highlighting line numbers for diagnostics, only works with neovim and diagnostic.enableSign is true." - }, - "diagnostic.enableMessage": { - "type": "string", - "default": "always", - "description": "When to enable show messages of diagnostics.", - "enum": ["always", "jump", "never"] - }, - "diagnostic.highlightOffset": { - "type": "number", - "description": "Offset number of buffer.addHighlight, neovim only.", - "default": 1000 - }, - "diagnostic.signOffset": { - "type": "number", - "description": "Offset number of sign", - "default": 1000 - }, - "diagnostic.errorSign": { - "type": "string", - "description": "Text of error sign", - "default": ">>" - }, - "diagnostic.warningSign": { - "type": "string", - "description": "Text of warning sign", - "default": "⚠" - }, - "diagnostic.infoSign": { - "type": "string", - "description": "Text of info sign", - "default": ">>" - }, - "diagnostic.hintSign": { - "type": "string", - "description": "Text of hint sign", - "default": ">>" - }, - "diagnostic.maxWindowHeight": { - "type": "number", - "description": "Maximum height of diagnostics floating window.", - "default": 8 - }, - "diagnostic.maxWindowWidth": { - "type": "number", - "description": "Maximum width of diagnostics floating window.", - "default": 80 - }, - "diagnostic.filetypeMap": { - "type": "object", - "description": "A map between buffer filetype and the filetype assigned to diagnostics. To syntax highlight diagnostics withs their parent buffer type use `\"default\": \"bufferType\"`", - "default": {} - }, - "diagnostic.format": { - "type": "string", - "description": "Define the diagnostic format. Available parts: source, code, severity, message", - "default": "[%source%code] [%severity] %message" - }, - "diagnostic.separateRelatedInformationAsDiagnostics": { - "type": "boolean", - "default": false, - "description": "Separate related information as diagnostics" - }, - "signature.enable": { - "type": "boolean", - "description": "Enable signature help when trigger character typed, require restart service on change.", - "default": true - }, - "signature.triggerSignatureWait": { - "type": "integer", - "default": 50, - "minimum": 50, - "maximum": 300, - "description": "Timeout for trigger signature help, in miliseconds." - }, - "signature.target": { - "type": "string", - "description": "Target of signature help, use float when possible by default.", - "enum": ["float", "echo"] - }, - "signature.floatMaxWidth": { - "type": "integer", - "default": 60, - "description": "Max width of signature float window." - }, - "signature.preferShownAbove": { - "type": "boolean", - "description": "Show signature help float window above cursor when possible, require restart service on change.", - "default": true - }, - "signature.hideOnTextChange": { - "type": "boolean", - "description": "Hide signature float window when text changed, require restart service on change.", - "default": false - }, - "signature.maxWindowHeight": { - "type": "number", - "description": "Maximum height of floating signature help window.", - "default": 8 - }, - "codeLens.enable": { - "type": "boolean", - "description": "Enable codeLens feature, require neovim with set virtual text feature.", - "default": false - }, - "codeLens.separator": { - "type": "string", - "description": "Separator text for codeLens in virtual text", - "default": "‣" - }, - "codeLens.subseparator": { - "type": "string", - "description": "Subseparator between codeLenses in virtual text", - "default": " " - }, - "refactor.openCommand": { - "type": "string", - "description": "Open command for refactor window.", - "default": "vsplit" - }, - "refactor.beforeContext": { - "type": "number", - "default": 3, - "description": "Print num lines of leading context before each match." - }, - "refactor.afterContext": { - "type": "number", - "default": 3, - "description": "Print num lines of trailing context after each match." - }, - "workspace.ignoredFiletypes": { - "type": "array", - "default": ["markdown", "log", "txt", "help"], - "description": "Filetypes that should be ignored for resolve workspace folder.", - "items": { - "type": "string" - } - }, - "list.indicator": { - "type": "string", - "default": ">", - "description": "The character used as first character in prompt line" - }, - "list.interactiveDebounceTime": { - "type": "number", - "default": 100, - "description": "Debouce time for input change on interactive mode." - }, - "list.maxHeight": { - "type": "number", - "default": 10, - "description": "Maximum height of list window." - }, - "list.minHeight": { - "type": "number", - "default": 1, - "description": "Minimum height of list window." - }, - "list.signOffset": { - "type": "number", - "default": 900, - "description": "Sign offset of list, should be different from other plugins." - }, - "list.selectedSignText": { - "type": "string", - "default": "*", - "description": "Sign text for selected lines." - }, - "list.extendedSearchMode": { - "type": "boolean", - "default": true, - "description": "Enable extended search mode which allows multiple search patterns delimited by spaces." - }, - "list.autoResize": { - "type": "boolean", - "default": true, - "description": "Enable auto resize feature." - }, - "list.limitLines": { - "type": "number", - "default": 30000, - "description": "Limit lines for list buffer." - }, - "list.maxPreviewHeight": { - "type": "number", - "default": 12, - "description": "Max height for preview window of list." - }, - "list.previewSplitRight": { - "type": "boolean", - "default": false, - "description": "Use vsplit for preview window." - }, - "list.previewHighlightGroup": { - "type": "string", - "default": "Search", - "description": "Highlight group used for highlight the range in preview window." - }, - "list.nextKeymap": { - "type": "string", - "default": "", - "description": "Key used for select next line on insert mode." - }, - "list.previousKeymap": { - "type": "string", - "default": "", - "description": "Key used for select previous line on insert mode." - }, - "list.normalMappings": { - "type": "object", - "default": {}, - "description": "Custom keymappings on normal mode." - }, - "list.insertMappings": { - "type": "object", - "default": {}, - "description": "Custom keymappings on insert mode." - }, - "list.source.symbols.excludes": { - "type": "array", - "default": [], - "description": "Patterns of mimimatch for filepath to execlude from symbols list.", - "items": { - "type": "string" - } - }, - "list.source.outline.ctagsFilestypes": { - "type": "array", - "default": [], - "description": "Filetypes that should use ctags for outline instead of language server.", - "items": { - "type": "string" - } - }, - "cursors.cancelKey": { - "type": "string", - "default": "", - "description": "Key used for cancel cursors session." - }, - "cursors.nextKey": { - "type": "string", - "default": "", - "description": "Key used for jump to next cursors position. " - }, - "cursors.previousKey": { - "type": "string", - "default": "", - "description": "Key used for jump to previous cursors position." - }, - "coc.preferences.maxFileSize": { - "type": "string", - "default": "10MB", - "description": "Maximum file size in bytes that coc.nvim should handle, default '10MB'" - }, - "coc.preferences.promptWorkspaceEdit": { - "type": "boolean", - "description": "Prompt confirm from user when apply workspace edit for unloaded files.", - "default": true - }, - "coc.preferences.listOfWorkspaceEdit": { - "type": "string", - "default": "quickfix", - "description": "List should contains changed locations after workspace edit, default to vim's quickfix", - "enum": ["quickfix", "location", "none"] - }, - "coc.preferences.useQuickfixForLocations": { - "type": "boolean", - "description": "Use vim's quickfix list for jump locations,\n need restart on change.", - "default": false - }, - "coc.preferences.extensionUpdateCheck": { - "type": "string", - "default": "never", - "description": "Interval for check extension update, could be daily, weekly, never", - "enum": ["daily", "weekly", "never"] - }, - "coc.preferences.snippetStatusText": { - "type": "string", - "default": "SNIP", - "description": "Text shown in statusline to indicate snippet session is activated." - }, - "coc.preferences.hoverTarget": { - "type": "string", - "description": "Target to show hover information, default is floating window when possible.", - "enum": ["preview", "echo", "float"] - }, - "coc.preferences.colorSupport": { - "type": "boolean", - "description": "Enable color highlight if language server support it.", - "default": true - }, - "coc.preferences.previewAutoClose": { - "type": "boolean", - "description": "Auto close preview window on cursor move.", - "default": true - }, - "coc.preferences.previewMaxHeight": { - "type": "number", - "default": 12, - "description": "Max height of preview window for hover." - }, - "coc.preferences.currentFunctionSymbolAutoUpdate": { - "type": "boolean", - "description": "Automatically update the value of b:coc_current_function on CursorHold event", - "default": false - }, - "coc.preferences.formatOnSaveFiletypes": { - "type": "array", - "default": [], - "description": "Filetypes that should run format on save.", - "items": { - "type": "string" - } - }, - "coc.preferences.formatOnInsertLeave": { - "type": "boolean", - "description": "Trigger format on type when insert leave by send \n to the server.", - "default": false - }, - "coc.preferences.enableFloatHighlight": { - "type": "boolean", - "description": "Enable highlight for floating window.", - "default": true - }, - "coc.preferences.rootPatterns": { - "type": "array", - "default": [".git", ".hg", ".projections.json"], - "description": "Root patterns to resolve workspaceFolder from parent folders of opened files, resolved from up to down.", - "items": { - "type": "string" - } - }, - "coc.preferences.watchmanPath": { - "type": "string", - "description": "executable path for https://facebook.github.io/watchman/, detected from $PATH by default", - "default": null - }, - "coc.preferences.jumpCommand": { - "type": "string", - "description": "Command used for location jump, like goto definition, goto references etc.", - "default": "edit" - }, - "coc.preferences.messageLevel": { - "type": "string", - "description": "Message level for filter echoed messages, could be 'more', 'warning' and 'error'", - "default": "more", - "enum": ["more", "warning", "error"] - }, - "coc.preferences.bracketEnterImprove": { - "type": "boolean", - "description": "Improve enter inside bracket `<> {} [] ()` by add new empty line below and place cursor to it. Works with `coc#on_enter()`", - "default": true - }, - "coc.preferences.formatOnType": { - "type": "boolean", - "description": "Set to true to enable format on type", - "default": false - }, - "coc.preferences.formatOnTypeFiletypes": { - "type": "array", - "default": [], - "description": "Filetypes that should run format on typing. Only take effect when `coc.preferences.formatOnType` set `true`", - "items": { - "type": "string" - } - }, - "coc.preferences.highlightTimeout": { - "type": "integer", - "default": 500, - "minimum": 200, - "maximum": 5000, - "description": "Highlight timeout for buffer in floating window." - }, - "coc.preferences.snippets.enable": { - "type": "boolean", - "description": "Set to false to disable snippets support.", - "default": true - }, - "coc.source.around.enable": { - "type": "boolean", - "default": true - }, - "coc.source.around.firstMatch": { - "type": "boolean", - "description": "Filter complete items by first letter strict match.", - "default": true - }, - "coc.source.around.shortcut": { - "type": "string", - "default": "A" - }, - "coc.source.around.priority": { - "type": "integer", - "default": 1 - }, - "coc.source.around.disableSyntaxes": { - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "coc.source.buffer.enable": { - "type": "boolean", - "default": true - }, - "coc.source.buffer.shortcut": { - "type": "string", - "default": "B" - }, - "coc.source.buffer.priority": { - "type": "integer", - "default": 1 - }, - "coc.source.buffer.firstMatch": { - "type": "boolean", - "description": "Filter complete items by first letter strict match.", - "default": true - }, - "coc.source.buffer.ignoreGitignore": { - "type": "boolean", - "default": true, - "description": "Ignore git ignored files for buffer words" - }, - "coc.source.buffer.disableSyntaxes": { - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "coc.source.file.enable": { - "type": "boolean", - "default": true - }, - "coc.source.file.shortcut": { - "type": "string", - "default": "F" - }, - "coc.source.file.priority": { - "type": "integer", - "default": 10 - }, - "coc.source.file.disableSyntaxes": { - "type": "array", - "default": [], - "items": { - "type": "string" - } - }, - "coc.source.file.triggerCharacters": { - "type": "array", - "default": ["/"], - "items": { - "type": "string" - } - }, - "coc.source.file.trimSameExts": { - "type": "array", - "default": [".ts", ".js"], - "description": "Trim same extension on file completion", - "items": { - "type": "string" - } - }, - "coc.source.file.ignoreHidden": { - "type": "boolean", - "default": true, - "description": "Ignore completion for hidden files" - }, - "coc.source.file.ignorePatterns": { - "type": "array", - "default": [], - "description": "Ignore patterns of matcher", - "items": { - "type": "string" - } - }, - "languageserver": { - "type": "object", - "default": {}, - "description": "Dictionary of languageservers, key is used as id of languageserver.", - "patternProperties": { - "^[_a-zA-Z]+$": { - "oneOf": [ - { - "$ref": "#/definitions/languageServerModule" - }, - { - "$ref": "#/definitions/languageServerCommand" - }, - { - "$ref": "#/definitions/languageServerSocket" - } - ] - } - } - } - }, - "cSpell.ignoreWords": [ - "", - "postgresql", - "pytest", - "sigint", - "trainsets" - ], - "clangd.path": "/home/matt/.config/coc/extensions/coc-clangd-data/install/10.0.0/clangd_10.0.0/bin/clangd" - } - diff --git a/dotfiles/.config/nvim/coc-settings.json b/dotfiles/.config/nvim/coc-settings.json new file mode 120000 index 0000000..eb2b036 --- /dev/null +++ b/dotfiles/.config/nvim/coc-settings.json @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/coc-settings.json \ No newline at end of file diff --git a/dotfiles/.config/nvim/colors b/dotfiles/.config/nvim/colors new file mode 120000 index 0000000..ccc1b70 --- /dev/null +++ b/dotfiles/.config/nvim/colors @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/colors \ No newline at end of file diff --git a/dotfiles/.config/nvim/colors/PaperColor.vim b/dotfiles/.config/nvim/colors/PaperColor.vim deleted file mode 100644 index e03886b..0000000 --- a/dotfiles/.config/nvim/colors/PaperColor.vim +++ /dev/null @@ -1,2238 +0,0 @@ -" Theme: PaperColor -" Author: Nikyle Nguyen -" License: MIT -" Source: http://github.com/NLKNguyen/papercolor-theme - -let s:version = '0.9.x' - -" Note on navigating this source code: -" - Use folding feature to collapse/uncollapse blocks of marked code -" zM to fold all markers in this file to see the structure of the source code -" zR to unfold all recursively -" za to toggle a fold -" See: http://vim.wikia.com/wiki/Folding -" - The main section is at the end where the functions are called in order. - -" Theme Repository: {{{ - -let s:themes = {} - -" }}} - -fun! s:register_default_theme() - " Theme name should be lowercase - let s:themes['default'] = { - \ 'maintainer' : 'Nikyle Nguyen ', - \ 'source' : 'http://github.com/NLKNguyen/papercolor-theme', - \ 'description' : 'The original PaperColor Theme, inspired by Google Material Design', - \ 'options' : { - \ 'allow_bold': 1 - \ } - \ } - - " Theme can have 'light' and/or 'dark' color palette. - " Color values can be HEX and/or 256-color. Use empty string '' if not provided. - " Only color00 -> color15 are required. The rest are optional. - let s:themes['default'].light = { - \ 'NO_CONVERSION': 1, - \ 'TEST_256_COLOR_CONSISTENCY' : 1, - \ 'palette' : { - \ 'color00' : ['#eeeeee', '255'], - \ 'color01' : ['#af0000', '124'], - \ 'color02' : ['#008700', '28'], - \ 'color03' : ['#5f8700', '64'], - \ 'color04' : ['#0087af', '31'], - \ 'color05' : ['#878787', '102'], - \ 'color06' : ['#005f87', '24'], - \ 'color07' : ['#444444', '238'], - \ 'color08' : ['#bcbcbc', '250'], - \ 'color09' : ['#d70000', '160'], - \ 'color10' : ['#d70087', '162'], - \ 'color11' : ['#8700af', '91'], - \ 'color12' : ['#d75f00', '166'], - \ 'color13' : ['#d75f00', '166'], - \ 'color14' : ['#005faf', '25'], - \ 'color15' : ['#005f87', '24'], - \ 'color16' : ['#0087af', '31'], - \ 'color17' : ['#008700', '28'], - \ 'cursor_fg' : ['#eeeeee', '255'], - \ 'cursor_bg' : ['#005f87', '24'], - \ 'cursorline' : ['#e4e4e4', '254'], - \ 'cursorcolumn' : ['#e4e4e4', '254'], - \ 'cursorlinenr_fg' : ['#af5f00', '130'], - \ 'cursorlinenr_bg' : ['#eeeeee', '255'], - \ 'popupmenu_fg' : ['#444444', '238'], - \ 'popupmenu_bg' : ['#d0d0d0', '252'], - \ 'search_fg' : ['#444444', '238'], - \ 'search_bg' : ['#ffff5f', '227'], - \ 'linenumber_fg' : ['#b2b2b2', '249'], - \ 'linenumber_bg' : ['#eeeeee', '255'], - \ 'vertsplit_fg' : ['#005f87', '24'], - \ 'vertsplit_bg' : ['#eeeeee', '255'], - \ 'statusline_active_fg' : ['#e4e4e4', '254'], - \ 'statusline_active_bg' : ['#005f87', '24'], - \ 'statusline_inactive_fg' : ['#444444', '238'], - \ 'statusline_inactive_bg' : ['#d0d0d0', '252'], - \ 'todo_fg' : ['#00af5f', '35'], - \ 'todo_bg' : ['#eeeeee', '255'], - \ 'error_fg' : ['#af0000', '124'], - \ 'error_bg' : ['#ffd7ff', '225'], - \ 'matchparen_bg' : ['#c6c6c6', '251'], - \ 'matchparen_fg' : ['#005f87', '24'], - \ 'visual_fg' : ['#eeeeee', '255'], - \ 'visual_bg' : ['#0087af', '31'], - \ 'folded_fg' : ['#0087af', '31'], - \ 'folded_bg' : ['#afd7ff', '153'], - \ 'wildmenu_fg': ['#444444', '238'], - \ 'wildmenu_bg': ['#ffff00', '226'], - \ 'spellbad': ['#ffafd7', '218'], - \ 'spellcap': ['#ffffaf', '229'], - \ 'spellrare': ['#afff87', '156'], - \ 'spelllocal': ['#d7d7ff', '189'], - \ 'diffadd_fg': ['#008700', '28'], - \ 'diffadd_bg': ['#afffaf', '157'], - \ 'diffdelete_fg': ['#af0000', '124'], - \ 'diffdelete_bg': ['#ffd7ff', '225'], - \ 'difftext_fg': ['#0087af', '31'], - \ 'difftext_bg': ['#ffffd7', '230'], - \ 'diffchange_fg': ['#444444', '238'], - \ 'diffchange_bg': ['#ffd787', '222'], - \ 'tabline_bg': ['#005f87', '24'], - \ 'tabline_active_fg': ['#444444', '238'], - \ 'tabline_active_bg': ['#e4e4e4', '254'], - \ 'tabline_inactive_fg': ['#eeeeee', '255'], - \ 'tabline_inactive_bg': ['#0087af', '31'], - \ 'buftabline_bg': ['#005f87', '24'], - \ 'buftabline_current_fg': ['#444444', '238'], - \ 'buftabline_current_bg': ['#e4e4e4', '254'], - \ 'buftabline_active_fg': ['#eeeeee', '255'], - \ 'buftabline_active_bg': ['#005faf', '25'], - \ 'buftabline_inactive_fg': ['#eeeeee', '255'], - \ 'buftabline_inactive_bg': ['#0087af', '31'] - \ } - \ } - - " TODO: idea for subtheme options - " let s:themes['default'].light.subtheme = { - " \ 'alternative' : { - " \ 'options' : { - " \ 'transparent_background': 1 - " \ }, - " \ 'palette' : { - " \ } - " \ } - " \ } - - let s:themes['default'].dark = { - \ 'NO_CONVERSION': 1, - \ 'TEST_256_COLOR_CONSISTENCY' : 1, - \ 'palette' : { - \ 'color00' : ['#1c1c1c', '234'], - \ 'color01' : ['#af005f', '125'], - \ 'color02' : ['#5faf00', '70'], - \ 'color03' : ['#d7af5f', '179'], - \ 'color04' : ['#5fafd7', '74'], - \ 'color05' : ['#808080', '244'], - \ 'color06' : ['#d7875f', '173'], - \ 'color07' : ['#d0d0d0', '252'], - \ 'color08' : ['#585858', '240'], - \ 'color09' : ['#5faf5f', '71'], - \ 'color10' : ['#afd700', '148'], - \ 'color11' : ['#af87d7', '140'], - \ 'color12' : ['#ffaf00', '214'], - \ 'color13' : ['#ff5faf', '205'], - \ 'color14' : ['#00afaf', '37'], - \ 'color15' : ['#5f8787', '66'], - \ 'color16' : ['#5fafd7', '74'], - \ 'color17' : ['#d7af00', '178'], - \ 'cursor_fg' : ['#1c1c1c', '234'], - \ 'cursor_bg' : ['#c6c6c6', '251'], - \ 'cursorline' : ['#303030', '236'], - \ 'cursorcolumn' : ['#303030', '236'], - \ 'cursorlinenr_fg' : ['#ffff00', '226'], - \ 'cursorlinenr_bg' : ['#1c1c1c', '234'], - \ 'popupmenu_fg' : ['#c6c6c6', '251'], - \ 'popupmenu_bg' : ['#303030', '236'], - \ 'search_fg' : ['#000000', '16'], - \ 'search_bg' : ['#00875f', '29'], - \ 'linenumber_fg' : ['#585858', '240'], - \ 'linenumber_bg' : ['#1c1c1c', '234'], - \ 'vertsplit_fg' : ['#5f8787', '66'], - \ 'vertsplit_bg' : ['#1c1c1c', '234'], - \ 'statusline_active_fg' : ['#1c1c1c', '234'], - \ 'statusline_active_bg' : ['#5f8787', '66'], - \ 'statusline_inactive_fg' : ['#bcbcbc', '250'], - \ 'statusline_inactive_bg' : ['#3a3a3a', '237'], - \ 'todo_fg' : ['#ff8700', '208'], - \ 'todo_bg' : ['#1c1c1c', '234'], - \ 'error_fg' : ['#af005f', '125'], - \ 'error_bg' : ['#5f0000', '52'], - \ 'matchparen_bg' : ['#4e4e4e', '239'], - \ 'matchparen_fg' : ['#c6c6c6', '251'], - \ 'visual_fg' : ['#000000', '16'], - \ 'visual_bg' : ['#8787af', '103'], - \ 'folded_fg' : ['#d787ff', '177'], - \ 'folded_bg' : ['#5f005f', '53'], - \ 'wildmenu_fg': ['#1c1c1c', '234'], - \ 'wildmenu_bg': ['#afd700', '148'], - \ 'spellbad': ['#5f0000', '52'], - \ 'spellcap': ['#5f005f', '53'], - \ 'spellrare': ['#005f00', '22'], - \ 'spelllocal': ['#00005f', '17'], - \ 'diffadd_fg': ['#87d700', '112'], - \ 'diffadd_bg': ['#005f00', '22'], - \ 'diffdelete_fg': ['#af005f', '125'], - \ 'diffdelete_bg': ['#5f0000', '52'], - \ 'difftext_fg': ['#5fffff', '87'], - \ 'difftext_bg': ['#008787', '30'], - \ 'diffchange_fg': ['#d0d0d0', '252'], - \ 'diffchange_bg': ['#005f5f', '23'], - \ 'tabline_bg': ['#262626', '235'], - \ 'tabline_active_fg': ['#121212', '233'], - \ 'tabline_active_bg': ['#00afaf', '37'], - \ 'tabline_inactive_fg': ['#bcbcbc', '250'], - \ 'tabline_inactive_bg': ['#585858', '240'], - \ 'buftabline_bg': ['#262626', '235'], - \ 'buftabline_current_fg': ['#121212', '233'], - \ 'buftabline_current_bg': ['#00afaf', '37'], - \ 'buftabline_active_fg': ['#00afaf', '37'], - \ 'buftabline_active_bg': ['#585858', '240'], - \ 'buftabline_inactive_fg': ['#bcbcbc', '250'], - \ 'buftabline_inactive_bg': ['#585858', '240'] - \ } - \ } -endfun - -" ============================ THEME REGISTER ================================= - -" Acquire Theme Data: {{{ - -" Brief: -" Function to get theme information and store in variables for other -" functions to use -" -" Require: -" s:themes collection of all theme palettes -" -" Require Optionally: -" {g:PaperColor_Theme_[s:theme_name]} user custom theme palette -" g:PaperColor_Theme_Options user options -" -" Expose: -" s:theme_name the name of the selected theme -" s:selected_theme the selected theme object (contains palette, etc.) -" s:selected_variant 'light' or 'dark' -" s:palette the palette of selected theme -" s:options user options -fun! s:acquire_theme_data() - - " Get theme name: {{{ - let s:theme_name = 'default' - - if exists("g:PaperColor_Theme") " Users expressed theme preference - let lowercase_theme_name = tolower(g:PaperColor_Theme) - - if lowercase_theme_name !=? 'default' - let theme_identifier = 'PaperColor_' . lowercase_theme_name - let autoload_function = theme_identifier . '#register' - - call {autoload_function}() - - let theme_variable = 'g:' . theme_identifier - - if exists(theme_variable) - let s:theme_name = lowercase_theme_name - let s:themes[s:theme_name] = {theme_variable} - endif - - endif - - endif - " }}} - - if s:theme_name ==? 'default' - " Either no other theme is specified or they failed to load - " Defer loading default theme until now - call s:register_default_theme() - endif - - let s:selected_theme = s:themes[s:theme_name] - - " Get Theme Variant: either dark or light {{{ - let s:selected_variant = 'dark' - - let s:is_dark=(&background == 'dark') - - if s:is_dark - if has_key(s:selected_theme, 'dark') - let s:selected_variant = 'dark' - else " in case the theme only provides the other variant - let s:selected_variant = 'light' - endif - - else " is light background - if has_key(s:selected_theme, 'light') - let s:selected_variant = 'light' - else " in case the theme only provides the other variant - let s:selected_variant = 'dark' - endif - endif - - let s:palette = s:selected_theme[s:selected_variant].palette - - " Systematic User-Config Options: {{{ - " Example config in .vimrc - " let g:PaperColor_Theme_Options = { - " \ 'theme': { - " \ 'default': { - " \ 'allow_bold': 1, - " \ 'allow_italic': 0, - " \ 'transparent_background': 1 - " \ } - " \ }, - " \ 'language': { - " \ 'python': { - " \ 'highlight_builtins' : 1 - " \ }, - " \ 'c': { - " \ 'highlight_builtins' : 1 - " \ }, - " \ 'cpp': { - " \ 'highlight_standard_library': 1 - " \ } - " \ } - " \ } - " - let s:options = {} - - - if exists("g:PaperColor_Theme_Options") - let s:options = g:PaperColor_Theme_Options - endif - " }}} - - " }}} -endfun - - -" }}} - -" Identify Color Mode: {{{ - -fun! s:identify_color_mode() - let s:MODE_16_COLOR = 0 - let s:MODE_256_COLOR = 1 - let s:MODE_GUI_COLOR = 2 - - if has("gui_running") || has('termguicolors') && &termguicolors || has('nvim') && $NVIM_TUI_ENABLE_TRUE_COLOR - let s:mode = s:MODE_GUI_COLOR - elseif (&t_Co >= 256) - let s:mode = s:MODE_256_COLOR - else - let s:mode = s:MODE_16_COLOR - endif -endfun - -" }}} - -" ============================ OPTION HANDLER ================================= - -" Generate Them Option Variables: {{{ - - -fun! s:generate_theme_option_variables() - " 0. All possible theme option names must be registered here - let l:available_theme_options = [ - \ 'allow_bold', - \ 'allow_italic', - \ 'transparent_background', - \ ] - - " 1. Generate variables and set to default value - for l:option in l:available_theme_options - let s:{'themeOpt_' . l:option} = 0 - endfor - - let s:themeOpt_override = {} " special case, this has to be a dictionary - - " 2. Reassign value to the above variables based on theme settings - - " 2.1 In case the theme has top-level options - if has_key(s:selected_theme, 'options') - let l:theme_options = s:selected_theme['options'] - for l:opt_name in keys(l:theme_options) - let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] - " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} - endfor - endif - - " 2.2 In case the theme has specific variant options - if has_key(s:selected_theme[s:selected_variant], 'options') - let l:theme_options = s:selected_theme[s:selected_variant]['options'] - for l:opt_name in keys(l:theme_options) - let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] - " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} - endfor - endif - - - " 3. Reassign value to the above variables which the user customizes - " Part of user-config options - let s:theme_options = {} - if has_key(s:options, 'theme') - let s:theme_options = s:options['theme'] - endif - - " 3.1 In case user sets for a theme without specifying which variant - if has_key(s:theme_options, s:theme_name) - let l:theme_options = s:theme_options[s:theme_name] - for l:opt_name in keys(l:theme_options) - let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] - " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} - endfor - endif - - - " 3.2 In case user sets for a specific variant of a theme - - " Create the string that the user might have set for this theme variant - " for example, 'default.dark' - let l:specific_theme_variant = s:theme_name . '.' . s:selected_variant - - if has_key(s:theme_options, l:specific_theme_variant) - let l:theme_options = s:theme_options[l:specific_theme_variant] - for l:opt_name in keys(l:theme_options) - let s:{'themeOpt_' . l:opt_name} = l:theme_options[l:opt_name] - " echo 's:themeOpt_' . l:opt_name . ' = ' . s:{'themeOpt_' . l:opt_name} - endfor - endif - -endfun -" }}} - -" Check If Theme Has Hint: {{{ -" -" Brief: -" Function to Check if the selected theme and variant has a hint -" -" Details: -" A hint is a known key that has value 1 -" It is not part of theme design but is used for technical purposes -" -" Example: -" If a theme has hint 'NO_CONVERSION', then we can assume that every -" color value is a complete pair, so we don't have to check. - -fun! s:theme_has_hint(hint) - return has_key(s:selected_theme[s:selected_variant], a:hint) && - \ s:selected_theme[s:selected_variant][a:hint] == 1 -endfun -" }}} - -" Set Overriding Colors: {{{ - -fun! s:set_overriding_colors() - - if s:theme_has_hint('NO_CONVERSION') - " s:convert_colors will not do anything, so we take care of conversion - " for the overriding colors that need to be converted - - if s:mode == s:MODE_GUI_COLOR - " if GUI color is not provided, convert from 256 color that must be available - if !empty(s:themeOpt_override) - call s:load_256_to_GUI_converter() - endif - - for l:color in keys(s:themeOpt_override) - let l:value = s:themeOpt_override[l:color] - if l:value[0] == '' - let l:value[0] = s:to_HEX[l:value[1]] - endif - let s:palette[l:color] = l:value - endfor - - elseif s:mode == s:MODE_256_COLOR - " if 256 color is not provided, convert from GUI color that must be available - if !empty(s:themeOpt_override) - call s:load_GUI_to_256_converter() - endif - - for l:color in keys(s:themeOpt_override) - let l:value = s:themeOpt_override[l:color] - if l:value[1] == '' - let l:value[1] = s:to_256(l:value[0]) - endif - let s:palette[l:color] = l:value - endfor - endif - - else " simply set the colors and let s:convert_colors() take care of conversion - - for l:color in keys(s:themeOpt_override) - let s:palette[l:color] = s:themeOpt_override[l:color] - endfor - endif - -endfun -" }}} - -" Generate Language Option Variables: {{{ - -" Brief: -" Function to generate language option variables so that there is no need to -" look up from the dictionary every time the option value is checked in the -" function s:apply_syntax_highlightings() -" -" Require: -" s:options user options -" -" Require Optionally: -" g:PaperColor_Theme_Options user option config in .vimrc -" -" Expose: -" s:langOpt_[LANGUAGE]__[OPTION] variables for language options -" -" Example: -" g:PaperColor_Theme_Options has something like this: -" 'language': { -" \ 'python': { -" \ 'highlight_builtins': 1 -" \ } -" } -" The following variable will be generated: -" s:langOpt_python__highlight_builtins = 1 - -fun! s:generate_language_option_variables() - " 0. All possible theme option names must be registered here - let l:available_language_options = [ - \ 'c__highlight_builtins', - \ 'cpp__highlight_standard_library', - \ 'python__highlight_builtins' - \ ] - - " 1. Generate variables and set to default value - for l:option in l:available_language_options - let s:{'langOpt_' . l:option} = 0 - endfor - - " Part of user-config options - if has_key(s:options, 'language') - let l:language_options = s:options['language'] - " echo l:language_options - for l:lang in keys(l:language_options) - let l:options = l:language_options[l:lang] - " echo l:lang - " echo l:options - for l:option in keys(l:options) - let s:{'langOpt_' . l:lang . '__' . l:option} = l:options[l:option] - " echo 's:langOpt_' . l:lang . '__' . l:option . ' = ' . l:options[l:option] - endfor - endfor - - endif - -endfun -" }}} - -" =========================== COLOR CONVERTER ================================= - -fun! s:load_GUI_to_256_converter() - " GUI-color To 256-color: {{{ - " Returns an approximate grey index for the given grey level - fun! s:grey_number(x) - if &t_Co == 88 - if a:x < 23 - return 0 - elseif a:x < 69 - return 1 - elseif a:x < 103 - return 2 - elseif a:x < 127 - return 3 - elseif a:x < 150 - return 4 - elseif a:x < 173 - return 5 - elseif a:x < 196 - return 6 - elseif a:x < 219 - return 7 - elseif a:x < 243 - return 8 - else - return 9 - endif - else - if a:x < 14 - return 0 - else - let l:n = (a:x - 8) / 10 - let l:m = (a:x - 8) % 10 - if l:m < 5 - return l:n - else - return l:n + 1 - endif - endif - endif - endfun - - " Returns the actual grey level represented by the grey index - fun! s:grey_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 46 - elseif a:n == 2 - return 92 - elseif a:n == 3 - return 115 - elseif a:n == 4 - return 139 - elseif a:n == 5 - return 162 - elseif a:n == 6 - return 185 - elseif a:n == 7 - return 208 - elseif a:n == 8 - return 231 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 8 + (a:n * 10) - endif - endif - endfun - - " Returns the palette index for the given grey index - fun! s:grey_colour(n) - if &t_Co == 88 - if a:n == 0 - return 16 - elseif a:n == 9 - return 79 - else - return 79 + a:n - endif - else - if a:n == 0 - return 16 - elseif a:n == 25 - return 231 - else - return 231 + a:n - endif - endif - endfun - - " Returns an approximate colour index for the given colour level - fun! s:rgb_number(x) - if &t_Co == 88 - if a:x < 69 - return 0 - elseif a:x < 172 - return 1 - elseif a:x < 230 - return 2 - else - return 3 - endif - else - if a:x < 75 - return 0 - else - let l:n = (a:x - 55) / 40 - let l:m = (a:x - 55) % 40 - if l:m < 20 - return l:n - else - return l:n + 1 - endif - endif - endif - endfun - - " Returns the actual colour level for the given colour index - fun! s:rgb_level(n) - if &t_Co == 88 - if a:n == 0 - return 0 - elseif a:n == 1 - return 139 - elseif a:n == 2 - return 205 - else - return 255 - endif - else - if a:n == 0 - return 0 - else - return 55 + (a:n * 40) - endif - endif - endfun - - " Returns the palette index for the given R/G/B colour indices - fun! s:rgb_colour(x, y, z) - if &t_Co == 88 - return 16 + (a:x * 16) + (a:y * 4) + a:z - else - return 16 + (a:x * 36) + (a:y * 6) + a:z - endif - endfun - - " Returns the palette index to approximate the given R/G/B colour levels - fun! s:colour(r, g, b) - " Get the closest grey - let l:gx = s:grey_number(a:r) - let l:gy = s:grey_number(a:g) - let l:gz = s:grey_number(a:b) - - " Get the closest colour - let l:x = s:rgb_number(a:r) - let l:y = s:rgb_number(a:g) - let l:z = s:rgb_number(a:b) - - if l:gx == l:gy && l:gy == l:gz - " There are two possibilities - let l:dgr = s:grey_level(l:gx) - a:r - let l:dgg = s:grey_level(l:gy) - a:g - let l:dgb = s:grey_level(l:gz) - a:b - let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - let l:dr = s:rgb_level(l:gx) - a:r - let l:dg = s:rgb_level(l:gy) - a:g - let l:db = s:rgb_level(l:gz) - a:b - let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) - if l:dgrey < l:drgb - " Use the grey - return s:grey_colour(l:gx) - else - " Use the colour - return s:rgb_colour(l:x, l:y, l:z) - endif - else - " Only one possibility - return s:rgb_colour(l:x, l:y, l:z) - endif - endfun - - " Returns the palette index to approximate the '#rrggbb' hex string - fun! s:to_256(rgb) - let l:r = ("0x" . strpart(a:rgb, 1, 2)) + 0 - let l:g = ("0x" . strpart(a:rgb, 3, 2)) + 0 - let l:b = ("0x" . strpart(a:rgb, 5, 2)) + 0 - - return s:colour(l:r, l:g, l:b) - endfun - - - - " }}} -endfun - -fun! s:load_256_to_GUI_converter() -" 256-color To GUI-color: {{{ - -""" Xterm 256 color dictionary -" See: http://www.calmar.ws/vim/256-xterm-24bit-rgb-color-chart.html -" -let s:to_HEX = { - \ '00': '#000000', '01': '#800000', '02': '#008000', '03': '#808000', '04': '#000080', - \ '05': '#800080', '06': '#008080', '07': '#c0c0c0', '08': '#808080', '09': '#ff0000', - \ '10': '#00ff00', '11': '#ffff00', '12': '#0000ff', '13': '#ff00ff', '14': '#00ffff', - \ '15': '#ffffff', '16': '#000000', '17': '#00005f', '18': '#000087', '19': '#0000af', - \ '20': '#0000d7', '21': '#0000ff', '22': '#005f00', '23': '#005f5f', '24': '#005f87', - \ '25': '#005faf', '26': '#005fd7', '27': '#005fff', '28': '#008700', '29': '#00875f', - \ '30': '#008787', '31': '#0087af', '32': '#0087d7', '33': '#0087ff', '34': '#00af00', - \ '35': '#00af5f', '36': '#00af87', '37': '#00afaf', '38': '#00afd7', '39': '#00afff', - \ '40': '#00d700', '41': '#00d75f', '42': '#00d787', '43': '#00d7af', '44': '#00d7d7', - \ '45': '#00d7ff', '46': '#00ff00', '47': '#00ff5f', '48': '#00ff87', '49': '#00ffaf', - \ '50': '#00ffd7', '51': '#00ffff', '52': '#5f0000', '53': '#5f005f', '54': '#5f0087', - \ '55': '#5f00af', '56': '#5f00d7', '57': '#5f00ff', '58': '#5f5f00', '59': '#5f5f5f', - \ '60': '#5f5f87', '61': '#5f5faf', '62': '#5f5fd7', '63': '#5f5fff', '64': '#5f8700', - \ '65': '#5f875f', '66': '#5f8787', '67': '#5f87af', '68': '#5f87d7', '69': '#5f87ff', - \ '70': '#5faf00', '71': '#5faf5f', '72': '#5faf87', '73': '#5fafaf', '74': '#5fafd7', - \ '75': '#5fafff', '76': '#5fd700', '77': '#5fd75f', '78': '#5fd787', '79': '#5fd7af', - \ '80': '#5fd7d7', '81': '#5fd7ff', '82': '#5fff00', '83': '#5fff5f', '84': '#5fff87', - \ '85': '#5fffaf', '86': '#5fffd7', '87': '#5fffff', '88': '#870000', '89': '#87005f', - \ '90': '#870087', '91': '#8700af', '92': '#8700d7', '93': '#8700ff', '94': '#875f00', - \ '95': '#875f5f', '96': '#875f87', '97': '#875faf', '98': '#875fd7', '99': '#875fff', - \ '100': '#878700', '101': '#87875f', '102': '#878787', '103': '#8787af', '104': '#8787d7', - \ '105': '#8787ff', '106': '#87af00', '107': '#87af5f', '108': '#87af87', '109': '#87afaf', - \ '110': '#87afd7', '111': '#87afff', '112': '#87d700', '113': '#87d75f', '114': '#87d787', - \ '115': '#87d7af', '116': '#87d7d7', '117': '#87d7ff', '118': '#87ff00', '119': '#87ff5f', - \ '120': '#87ff87', '121': '#87ffaf', '122': '#87ffd7', '123': '#87ffff', '124': '#af0000', - \ '125': '#af005f', '126': '#af0087', '127': '#af00af', '128': '#af00d7', '129': '#af00ff', - \ '130': '#af5f00', '131': '#af5f5f', '132': '#af5f87', '133': '#af5faf', '134': '#af5fd7', - \ '135': '#af5fff', '136': '#af8700', '137': '#af875f', '138': '#af8787', '139': '#af87af', - \ '140': '#af87d7', '141': '#af87ff', '142': '#afaf00', '143': '#afaf5f', '144': '#afaf87', - \ '145': '#afafaf', '146': '#afafd7', '147': '#afafff', '148': '#afd700', '149': '#afd75f', - \ '150': '#afd787', '151': '#afd7af', '152': '#afd7d7', '153': '#afd7ff', '154': '#afff00', - \ '155': '#afff5f', '156': '#afff87', '157': '#afffaf', '158': '#afffd7', '159': '#afffff', - \ '160': '#d70000', '161': '#d7005f', '162': '#d70087', '163': '#d700af', '164': '#d700d7', - \ '165': '#d700ff', '166': '#d75f00', '167': '#d75f5f', '168': '#d75f87', '169': '#d75faf', - \ '170': '#d75fd7', '171': '#d75fff', '172': '#d78700', '173': '#d7875f', '174': '#d78787', - \ '175': '#d787af', '176': '#d787d7', '177': '#d787ff', '178': '#d7af00', '179': '#d7af5f', - \ '180': '#d7af87', '181': '#d7afaf', '182': '#d7afd7', '183': '#d7afff', '184': '#d7d700', - \ '185': '#d7d75f', '186': '#d7d787', '187': '#d7d7af', '188': '#d7d7d7', '189': '#d7d7ff', - \ '190': '#d7ff00', '191': '#d7ff5f', '192': '#d7ff87', '193': '#d7ffaf', '194': '#d7ffd7', - \ '195': '#d7ffff', '196': '#ff0000', '197': '#ff005f', '198': '#ff0087', '199': '#ff00af', - \ '200': '#ff00d7', '201': '#ff00ff', '202': '#ff5f00', '203': '#ff5f5f', '204': '#ff5f87', - \ '205': '#ff5faf', '206': '#ff5fd7', '207': '#ff5fff', '208': '#ff8700', '209': '#ff875f', - \ '210': '#ff8787', '211': '#ff87af', '212': '#ff87d7', '213': '#ff87ff', '214': '#ffaf00', - \ '215': '#ffaf5f', '216': '#ffaf87', '217': '#ffafaf', '218': '#ffafd7', '219': '#ffafff', - \ '220': '#ffd700', '221': '#ffd75f', '222': '#ffd787', '223': '#ffd7af', '224': '#ffd7d7', - \ '225': '#ffd7ff', '226': '#ffff00', '227': '#ffff5f', '228': '#ffff87', '229': '#ffffaf', - \ '230': '#ffffd7', '231': '#ffffff', '232': '#080808', '233': '#121212', '234': '#1c1c1c', - \ '235': '#262626', '236': '#303030', '237': '#3a3a3a', '238': '#444444', '239': '#4e4e4e', - \ '240': '#585858', '241': '#626262', '242': '#6c6c6c', '243': '#767676', '244': '#808080', - \ '245': '#8a8a8a', '246': '#949494', '247': '#9e9e9e', '248': '#a8a8a8', '249': '#b2b2b2', - \ '250': '#bcbcbc', '251': '#c6c6c6', '252': '#d0d0d0', '253': '#dadada', '254': '#e4e4e4', - \ '255': '#eeeeee' } - -" }}} -endfun - -" ========================== ENVIRONMENT ADAPTER ============================== - -" Set Format Attributes: {{{ - -fun! s:set_format_attributes() - " These are the default - if s:mode == s:MODE_GUI_COLOR - let s:ft_bold = " cterm=bold gui=bold " - let s:ft_none = " cterm=none gui=none " - let s:ft_reverse = " cterm=reverse gui=reverse " - let s:ft_italic = " cterm=italic gui=italic " - let s:ft_italic_bold = " cterm=italic,bold gui=italic,bold " - elseif s:mode == s:MODE_256_COLOR - let s:ft_bold = " cterm=bold " - let s:ft_none = " cterm=none " - let s:ft_reverse = " cterm=reverse " - let s:ft_italic = " cterm=italic " - let s:ft_italic_bold = " cterm=italic,bold " - else - let s:ft_bold = "" - let s:ft_none = " cterm=none " - let s:ft_reverse = " cterm=reverse " - let s:ft_italic = "" - let s:ft_italic_bold = "" - endif - - " Unless instructed otherwise either by theme setting or user overriding - - if s:themeOpt_allow_bold == 0 - let s:ft_bold = "" - endif - if s:themeOpt_allow_italic == 0 - let s:ft_italic = "" - let s:ft_italic_bold = s:ft_bold - endif - -endfun - -" }}} - -" Convert Colors If Needed: {{{ -fun! s:convert_colors() - if s:theme_has_hint('NO_CONVERSION') - return - endif - - if s:mode == s:MODE_GUI_COLOR - " if GUI color is not provided, convert from 256 color that must be available - call s:load_256_to_GUI_converter() - - for l:color in keys(s:palette) - let l:value = s:palette[l:color] - if l:value[0] == '' - let l:value[0] = s:to_HEX[l:value[1]] - endif - let s:palette[l:color] = l:value - endfor - - elseif s:mode == s:MODE_256_COLOR - " if 256 color is not provided, convert from GUI color that must be available - call s:load_GUI_to_256_converter() - - for l:color in keys(s:palette) - let l:value = s:palette[l:color] - if l:value[1] == '' - let l:value[1] = s:to_256(l:value[0]) - endif - let s:palette[l:color] = l:value - endfor - endif - " otherwise use the terminal colors and none of the theme colors are used -endfun - -" }}} - -" ============================ COLOR POPULARIZER =============================== - -" Set Color Variables: {{{ -fun! s:set_color_variables() - - " Helper: {{{ - " ------- - " Function to dynamically generate variables that store the color strings - " for setting highlighting. Each color name will have 2 variables with prefix - " s:fg_ and s:bg_. For example: - " if a:color_name is 'Normal' and a:color_value is ['#000000', '0', 'Black'], - " the following 2 variables will be created: - " s:fg_Normal that stores the string ' guifg=#000000 ' - " s:bg_Normal that stores the string ' guibg=#000000 ' - " Depending on the color mode, ctermfg and ctermbg will be either 0 or Black - " - " Rationale: - " The whole purpose is for speed. We generate these ahead of time so that we - " don't have to do look up or do any if-branch when we set the highlightings. - " - " Furthermore, multiple function definitions for each mode actually reduces - " the need for multiple if-branches inside a single function. This is not - " pretty, but Vim Script is slow, so reducing if-branches in function that is - " often called helps speeding things up quite a bit. Think of this like macro. - " - " If you are familiar with the old code base (v0.9 and ealier), this way of - " generate variables dramatically reduces the loading speed. - " None of previous optimization tricks gets anywhere near this. - if s:mode == s:MODE_GUI_COLOR - fun! s:create_color_variables(color_name, rich_color, term_color) - let {'s:fg_' . a:color_name} = ' guifg=' . a:rich_color[0] . ' ' - let {'s:bg_' . a:color_name} = ' guibg=' . a:rich_color[0] . ' ' - endfun - elseif s:mode == s:MODE_256_COLOR - fun! s:create_color_variables(color_name, rich_color, term_color) - let {'s:fg_' . a:color_name} = ' ctermfg=' . a:rich_color[1] . ' ' - let {'s:bg_' . a:color_name} = ' ctermbg=' . a:rich_color[1] . ' ' - endfun - else - fun! s:create_color_variables(color_name, rich_color, term_color) - let {'s:fg_' . a:color_name} = ' ctermfg=' . a:term_color . ' ' - let {'s:bg_' . a:color_name} = ' ctermbg=' . a:term_color . ' ' - endfun - endif - " }}} - - " Color value format: Array [, <256-Base>, <16-Base>] - " 16-Base is terminal's native color palette that can be alternated through - " the terminal settings. The 16-color names are according to `:h cterm-colors` - - " BASIC COLORS: - " color00-15 are required by all themes. - " These are also how the terminal color palette for the target theme should be. - " See README for theme design guideline - " - " An example format of the below variable's value: ['#262626', '234', 'Black'] - " Where the 1st value is HEX color for GUI Vim, 2nd value is for 256-color terminal, - " and the color name on the right is for 16-color terminal (the actual terminal colors - " can be different from what the color names suggest). See :h cterm-colors - " - " Depending on the provided color palette and current Vim, the 1st and 2nd - " parameter might not exist, for example, on 16-color terminal, the variables below - " only store the color names to use the terminal color palette which is the only - " thing available therefore no need for GUI-color or 256-color. - - let color00 = get(s:palette, 'color00') - let color01 = get(s:palette, 'color01') - let color02 = get(s:palette, 'color02') - let color03 = get(s:palette, 'color03') - let color04 = get(s:palette, 'color04') - let color05 = get(s:palette, 'color05') - let color06 = get(s:palette, 'color06') - let color07 = get(s:palette, 'color07') - let color08 = get(s:palette, 'color08') - let color09 = get(s:palette, 'color09') - let color10 = get(s:palette, 'color10') - let color11 = get(s:palette, 'color11') - let color12 = get(s:palette, 'color12') - let color13 = get(s:palette, 'color13') - let color14 = get(s:palette, 'color14') - let color15 = get(s:palette, 'color15') - - call s:create_color_variables('background', color00 , 'Black') - call s:create_color_variables('negative', color01 , 'DarkRed') - call s:create_color_variables('positive', color02 , 'DarkGreen') - call s:create_color_variables('olive', color03 , 'DarkYellow') " string - call s:create_color_variables('neutral', color04 , 'DarkBlue') - call s:create_color_variables('comment', color05 , 'DarkMagenta') - call s:create_color_variables('navy', color06 , 'DarkCyan') " storageclass - call s:create_color_variables('foreground', color07 , 'LightGray') - - call s:create_color_variables('nontext', color08 , 'DarkGray') - call s:create_color_variables('red', color09 , 'LightRed') " import / try/catch - call s:create_color_variables('pink', color10 , 'LightGreen') " statement, type - call s:create_color_variables('purple', color11 , 'LightYellow') " if / conditional - call s:create_color_variables('accent', color12 , 'LightBlue') - call s:create_color_variables('orange', color13 , 'LightMagenta') " number - call s:create_color_variables('blue', color14 , 'LightCyan') " other keyword - call s:create_color_variables('highlight', color15 , 'White') - - " Note: special case for FoldColumn group. I want to get rid of this case. - call s:create_color_variables('transparent', [color00[0], 'none'], 'none') - - " EXTENDED COLORS: - " From here on, all colors are optional and must have default values (3rd parameter of the - " `get` command) that point to the above basic colors in case the target theme doesn't - " provide the extended colors. The default values should be reasonably sensible. - " The terminal color must be provided also. - - call s:create_color_variables('aqua', get(s:palette, 'color16', color14) , 'LightCyan') - call s:create_color_variables('green', get(s:palette, 'color17', color13) , 'LightMagenta') - call s:create_color_variables('wine', get(s:palette, 'color18', color11) , 'LightYellow') - - " LineNumber: when set number - call s:create_color_variables('linenumber_fg', get(s:palette, 'linenumber_fg', color08) , 'DarkGray') - call s:create_color_variables('linenumber_bg', get(s:palette, 'linenumber_bg', color00) , 'Black') - - " Vertical Split: when there are more than 1 window side by side, ex: - call s:create_color_variables('vertsplit_fg', get(s:palette, 'vertsplit_fg', color15) , 'White') - call s:create_color_variables('vertsplit_bg', get(s:palette, 'vertsplit_bg', color00) , 'Black') - - " Statusline: when set status=2 - call s:create_color_variables('statusline_active_fg', get(s:palette, 'statusline_active_fg', color00) , 'Black') - call s:create_color_variables('statusline_active_bg', get(s:palette, 'statusline_active_bg', color15) , 'White') - call s:create_color_variables('statusline_inactive_fg', get(s:palette, 'statusline_inactive_fg', color07) , 'LightGray') - call s:create_color_variables('statusline_inactive_bg', get(s:palette, 'statusline_inactive_bg', color08) , 'DarkGray') - - - " Cursor: in normal mode - call s:create_color_variables('cursor_fg', get(s:palette, 'cursor_fg', color00) , 'Black') - call s:create_color_variables('cursor_bg', get(s:palette, 'cursor_bg', color07) , 'LightGray') - - call s:create_color_variables('cursorline', get(s:palette, 'cursorline', color00) , 'Black') - - " CursorColumn: when set cursorcolumn - call s:create_color_variables('cursorcolumn', get(s:palette, 'cursorcolumn', color00) , 'Black') - - " CursorLine Number: when set cursorline number - call s:create_color_variables('cursorlinenr_fg', get(s:palette, 'cursorlinenr_fg', color13) , 'LightMagenta') - call s:create_color_variables('cursorlinenr_bg', get(s:palette, 'cursorlinenr_bg', color00) , 'Black') - - " Popup Menu: when for autocomplete - call s:create_color_variables('popupmenu_fg', get(s:palette, 'popupmenu_fg', color07) , 'LightGray') - call s:create_color_variables('popupmenu_bg', get(s:palette, 'popupmenu_bg', color08) , 'DarkGray') " TODO: double check this, might resolve an issue - - " Search: ex: when * on a word - call s:create_color_variables('search_fg', get(s:palette, 'search_fg', color00) , 'Black') - call s:create_color_variables('search_bg', get(s:palette, 'search_bg', color15) , 'Yellow') - - " Todo: ex: TODO - call s:create_color_variables('todo_fg', get(s:palette, 'todo_fg', color05) , 'LightYellow') - call s:create_color_variables('todo_bg', get(s:palette, 'todo_bg', color00) , 'Black') - - " Error: ex: turn spell on and have invalid words - call s:create_color_variables('error_fg', get(s:palette, 'error_fg', color01) , 'DarkRed') - call s:create_color_variables('error_bg', get(s:palette, 'error_bg', color00) , 'Black') - - " Match Parenthesis: selecting an opening/closing pair and the other one will be highlighted - call s:create_color_variables('matchparen_fg', get(s:palette, 'matchparen_fg', color00) , 'LightMagenta') - call s:create_color_variables('matchparen_bg', get(s:palette, 'matchparen_bg', color05) , 'Black') - - " Visual: - call s:create_color_variables('visual_fg', get(s:palette, 'visual_fg', color08) , 'Black') - call s:create_color_variables('visual_bg', get(s:palette, 'visual_bg', color07) , 'White') - - " Folded: - call s:create_color_variables('folded_fg', get(s:palette, 'folded_fg', color00) , 'Black') - call s:create_color_variables('folded_bg', get(s:palette, 'folded_bg', color05) , 'DarkYellow') - - " WildMenu: Autocomplete command, ex: :color - call s:create_color_variables('wildmenu_fg', get(s:palette, 'wildmenu_fg', color00) , 'Black') - call s:create_color_variables('wildmenu_bg', get(s:palette, 'wildmenu_bg', color06) , 'LightGray') - - " Spelling: when spell on and there are spelling problems like this for example: papercolor. a vim color scheme - call s:create_color_variables('spellbad', get(s:palette, 'spellbad', color04) , 'DarkRed') - call s:create_color_variables('spellcap', get(s:palette, 'spellcap', color05) , 'DarkMagenta') - call s:create_color_variables('spellrare', get(s:palette, 'spellrare', color06) , 'DarkYellow') - call s:create_color_variables('spelllocal', get(s:palette, 'spelllocal', color01) , 'DarkBlue') - - " Diff: - call s:create_color_variables('diffadd_fg', get(s:palette, 'diffadd_fg', color00) , 'Black') - call s:create_color_variables('diffadd_bg', get(s:palette, 'diffadd_bg', color02) , 'DarkGreen') - - call s:create_color_variables('diffdelete_fg', get(s:palette, 'diffdelete_fg', color00) , 'Black') - call s:create_color_variables('diffdelete_bg', get(s:palette, 'diffdelete_bg', color04) , 'DarkRed') - - call s:create_color_variables('difftext_fg', get(s:palette, 'difftext_fg', color00) , 'Black') - call s:create_color_variables('difftext_bg', get(s:palette, 'difftext_bg', color06) , 'DarkYellow') - - call s:create_color_variables('diffchange_fg', get(s:palette, 'diffchange_fg', color00) , 'Black') - call s:create_color_variables('diffchange_bg', get(s:palette, 'diffchange_bg', color14) , 'LightYellow') - - " Tabline: when having tabs, ex: :tabnew - call s:create_color_variables('tabline_bg', get(s:palette, 'tabline_bg', color00) , 'Black') - call s:create_color_variables('tabline_active_fg', get(s:palette, 'tabline_active_fg', color07) , 'LightGray') - call s:create_color_variables('tabline_active_bg', get(s:palette, 'tabline_active_bg', color00) , 'Black') - call s:create_color_variables('tabline_inactive_fg', get(s:palette, 'tabline_inactive_fg', color07) , 'Black') - call s:create_color_variables('tabline_inactive_bg', get(s:palette, 'tabline_inactive_bg', color08) , 'DarkMagenta') - - " Plugin: BufTabLine https://github.com/ap/vim-buftabline - call s:create_color_variables('buftabline_bg', get(s:palette, 'buftabline_bg', color00) , 'Black') - call s:create_color_variables('buftabline_current_fg', get(s:palette, 'buftabline_current_fg', color07) , 'LightGray') - call s:create_color_variables('buftabline_current_bg', get(s:palette, 'buftabline_current_bg', color05) , 'DarkMagenta') - call s:create_color_variables('buftabline_active_fg', get(s:palette, 'buftabline_active_fg', color07) , 'LightGray') - call s:create_color_variables('buftabline_active_bg', get(s:palette, 'buftabline_active_bg', color12) , 'LightBlue') - call s:create_color_variables('buftabline_inactive_fg', get(s:palette, 'buftabline_inactive_fg', color07) , 'LightGray') - call s:create_color_variables('buftabline_inactive_bg', get(s:palette, 'buftabline_inactive_bg', color00) , 'Black') - - " Neovim terminal colors https://neovim.io/doc/user/nvim_terminal_emulator.html#nvim-terminal-emulator-configuration - " TODO: Fix this - let g:terminal_color_0 = color00[0] - let g:terminal_color_1 = color01[0] - let g:terminal_color_2 = color02[0] - let g:terminal_color_3 = color03[0] - let g:terminal_color_4 = color04[0] - let g:terminal_color_5 = color05[0] - let g:terminal_color_6 = color06[0] - let g:terminal_color_7 = color07[0] - let g:terminal_color_8 = color08[0] - let g:terminal_color_9 = color09[0] - let g:terminal_color_10 = color10[0] - let g:terminal_color_11 = color11[0] - let g:terminal_color_12 = color12[0] - let g:terminal_color_13 = color13[0] - let g:terminal_color_14 = color14[0] - let g:terminal_color_15 = color15[0] - - " Vim 8's :terminal buffer ANSI colors - if has('terminal') - let g:terminal_ansi_colors = [color00[0], color01[0], color02[0], color03[0], - \ color04[0], color05[0], color06[0], color07[0], color08[0], color09[0], - \ color10[0], color11[0], color12[0], color13[0], color14[0], color15[0]] - endif - -endfun -" }}} - -" Apply Syntax Highlightings: {{{ - -fun! s:apply_syntax_highlightings() - - if s:themeOpt_transparent_background - exec 'hi Normal' . s:fg_foreground - " Switching between dark & light variant through `set background` - " NOTE: Handle background switching right after `Normal` group because of - " God-know-why reason. Not doing this way had caused issue before - if s:is_dark " DARK VARIANT - set background=dark - else " LIGHT VARIANT - set background=light - endif - - exec 'hi NonText' . s:fg_nontext - exec 'hi LineNr' . s:fg_linenumber_fg - exec 'hi Conceal' . s:fg_linenumber_fg - exec 'hi VertSplit' . s:fg_vertsplit_fg . s:ft_none - exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_transparent . s:ft_none - else - exec 'hi Normal' . s:fg_foreground . s:bg_background - " Switching between dark & light variant through `set background` - if s:is_dark " DARK VARIANT - set background=dark - exec 'hi EndOfBuffer' . s:fg_cursor_fg . s:ft_none - else " LIGHT VARIANT - set background=light - endif - - exec 'hi NonText' . s:fg_nontext . s:bg_background - exec 'hi LineNr' . s:fg_linenumber_fg . s:bg_linenumber_bg - exec 'hi Conceal' . s:fg_linenumber_fg . s:bg_linenumber_bg - exec 'hi VertSplit' . s:fg_vertsplit_bg . s:bg_vertsplit_fg - exec 'hi FoldColumn' . s:fg_folded_fg . s:bg_background . s:ft_none - endif - - exec 'hi Cursor' . s:fg_cursor_fg . s:bg_cursor_bg - exec 'hi SpecialKey' . s:fg_nontext - exec 'hi Search' . s:fg_search_fg . s:bg_search_bg - exec 'hi StatusLine' . s:fg_statusline_active_bg . s:bg_statusline_active_fg - exec 'hi StatusLineNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg - exec 'hi StatusLineTerm' . s:fg_statusline_active_bg . s:bg_statusline_active_fg - exec 'hi StatusLineTermNC' . s:fg_statusline_inactive_bg . s:bg_statusline_inactive_fg - exec 'hi Visual' . s:fg_visual_fg . s:bg_visual_bg - exec 'hi Directory' . s:fg_blue - exec 'hi ModeMsg' . s:fg_olive - exec 'hi MoreMsg' . s:fg_olive - exec 'hi Question' . s:fg_olive - exec 'hi WarningMsg' . s:fg_pink - exec 'hi MatchParen' . s:fg_matchparen_fg . s:bg_matchparen_bg - exec 'hi Folded' . s:fg_folded_fg . s:bg_folded_bg - exec 'hi WildMenu' . s:fg_wildmenu_fg . s:bg_wildmenu_bg . s:ft_bold - - if version >= 700 - exec 'hi CursorLine' . s:bg_cursorline . s:ft_none - if s:mode == s:MODE_16_COLOR - exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg - else - exec 'hi CursorLineNr' . s:fg_cursorlinenr_fg . s:bg_cursorlinenr_bg . s:ft_none - endif - exec 'hi CursorColumn' . s:bg_cursorcolumn . s:ft_none - exec 'hi PMenu' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_none - exec 'hi PMenuSel' . s:fg_popupmenu_fg . s:bg_popupmenu_bg . s:ft_reverse - if s:themeOpt_transparent_background - exec 'hi SignColumn' . s:fg_green . s:ft_none - else - exec 'hi SignColumn' . s:fg_green . s:bg_background . s:ft_none - endif - end - if version >= 703 - exec 'hi ColorColumn' . s:bg_cursorcolumn . s:ft_none - end - - exec 'hi TabLine' . s:fg_tabline_inactive_fg . s:bg_tabline_inactive_bg . s:ft_none - exec 'hi TabLineFill' . s:fg_tabline_bg . s:bg_tabline_bg . s:ft_none - exec 'hi TabLineSel' . s:fg_tabline_active_fg . s:bg_tabline_active_bg . s:ft_none - - exec 'hi BufTabLineCurrent' . s:fg_buftabline_current_fg . s:bg_buftabline_current_bg . s:ft_none - exec 'hi BufTabLineActive' . s:fg_buftabline_active_fg . s:bg_buftabline_active_bg . s:ft_none - exec 'hi BufTabLineHidden' . s:fg_buftabline_inactive_fg . s:bg_buftabline_inactive_bg . s:ft_none - exec 'hi BufTabLineFill' . s:bg_buftabline_bg . s:ft_none - - " Standard Group Highlighting: - exec 'hi Comment' . s:fg_comment . s:ft_italic - - exec 'hi Constant' . s:fg_orange - exec 'hi String' . s:fg_olive - exec 'hi Character' . s:fg_olive - exec 'hi Number' . s:fg_orange - exec 'hi Boolean' . s:fg_green . s:ft_bold - exec 'hi Float' . s:fg_orange - - exec 'hi Identifier' . s:fg_navy - exec 'hi Function' . s:fg_foreground - - exec 'hi Statement' . s:fg_pink . s:ft_none - exec 'hi Conditional' . s:fg_purple . s:ft_bold - exec 'hi Repeat' . s:fg_purple . s:ft_bold - exec 'hi Label' . s:fg_blue - exec 'hi Operator' . s:fg_aqua . s:ft_none - exec 'hi Keyword' . s:fg_blue - exec 'hi Exception' . s:fg_red - - exec 'hi PreProc' . s:fg_blue - exec 'hi Include' . s:fg_red - exec 'hi Define' . s:fg_blue - exec 'hi Macro' . s:fg_blue - exec 'hi PreCondit' . s:fg_aqua - - exec 'hi Type' . s:fg_pink . s:ft_bold - exec 'hi StorageClass' . s:fg_navy . s:ft_bold - exec 'hi Structure' . s:fg_blue . s:ft_bold - exec 'hi Typedef' . s:fg_pink . s:ft_bold - - exec 'hi Special' . s:fg_foreground - exec 'hi SpecialChar' . s:fg_foreground - exec 'hi Tag' . s:fg_green - exec 'hi Delimiter' . s:fg_aqua - exec 'hi SpecialComment' . s:fg_comment . s:ft_bold - exec 'hi Debug' . s:fg_orange - - exec 'hi Error' . s:fg_error_fg . s:bg_error_bg - exec 'hi Todo' . s:fg_todo_fg . s:bg_todo_bg . s:ft_bold - - exec 'hi Title' . s:fg_comment - exec 'hi Global' . s:fg_blue - - - " Extension {{{ - " VimL Highlighting - exec 'hi vimCommand' . s:fg_pink - exec 'hi vimVar' . s:fg_navy - exec 'hi vimFuncKey' . s:fg_pink - exec 'hi vimFunction' . s:fg_blue . s:ft_bold - exec 'hi vimNotFunc' . s:fg_pink - exec 'hi vimMap' . s:fg_red - exec 'hi vimAutoEvent' . s:fg_aqua . s:ft_bold - exec 'hi vimMapModKey' . s:fg_aqua - exec 'hi vimFuncName' . s:fg_purple - exec 'hi vimIsCommand' . s:fg_foreground - exec 'hi vimFuncVar' . s:fg_aqua - exec 'hi vimLet' . s:fg_red - exec 'hi vimContinue' . s:fg_aqua - exec 'hi vimMapRhsExtend' . s:fg_foreground - exec 'hi vimCommentTitle' . s:fg_comment . s:ft_italic_bold - exec 'hi vimBracket' . s:fg_aqua - exec 'hi vimParenSep' . s:fg_aqua - exec 'hi vimNotation' . s:fg_aqua - exec 'hi vimOper' . s:fg_foreground - exec 'hi vimOperParen' . s:fg_foreground - exec 'hi vimSynType' . s:fg_purple - exec 'hi vimSynReg' . s:fg_pink . s:ft_none - exec 'hi vimSynRegion' . s:fg_foreground - exec 'hi vimSynMtchGrp' . s:fg_pink - exec 'hi vimSynNextgroup' . s:fg_pink - exec 'hi vimSynKeyRegion' . s:fg_green - exec 'hi vimSynRegOpt' . s:fg_blue - exec 'hi vimSynMtchOpt' . s:fg_blue - exec 'hi vimSynContains' . s:fg_pink - exec 'hi vimGroupName' . s:fg_foreground - exec 'hi vimGroupList' . s:fg_foreground - exec 'hi vimHiGroup' . s:fg_foreground - exec 'hi vimGroup' . s:fg_navy . s:ft_bold - exec 'hi vimOnlyOption' . s:fg_blue - - " Makefile Highlighting - exec 'hi makeIdent' . s:fg_blue - exec 'hi makeSpecTarget' . s:fg_olive - exec 'hi makeTarget' . s:fg_red - exec 'hi makeStatement' . s:fg_aqua . s:ft_bold - exec 'hi makeCommands' . s:fg_foreground - exec 'hi makeSpecial' . s:fg_orange . s:ft_bold - - " CMake Highlighting (Builtin) - exec 'hi cmakeStatement' . s:fg_blue - exec 'hi cmakeArguments' . s:fg_foreground - exec 'hi cmakeVariableValue' . s:fg_pink - - " CMake Highlighting (Plugin: https://github.com/pboettch/vim-cmake-syntax) - exec 'hi cmakeCommand' . s:fg_blue - exec 'hi cmakeCommandConditional' . s:fg_purple . s:ft_bold - exec 'hi cmakeKWset' . s:fg_orange - exec 'hi cmakeKWvariable_watch' . s:fg_orange - exec 'hi cmakeKWif' . s:fg_orange - exec 'hi cmakeArguments' . s:fg_foreground - exec 'hi cmakeKWproject' . s:fg_pink - exec 'hi cmakeGeneratorExpressions' . s:fg_orange - exec 'hi cmakeGeneratorExpression' . s:fg_aqua - exec 'hi cmakeVariable' . s:fg_pink - exec 'hi cmakeProperty' . s:fg_aqua - exec 'hi cmakeKWforeach' . s:fg_aqua - exec 'hi cmakeKWunset' . s:fg_aqua - exec 'hi cmakeKWmacro' . s:fg_aqua - exec 'hi cmakeKWget_property' . s:fg_aqua - exec 'hi cmakeKWset_tests_properties' . s:fg_aqua - exec 'hi cmakeKWmessage' . s:fg_aqua - exec 'hi cmakeKWinstall_targets' . s:fg_orange - exec 'hi cmakeKWsource_group' . s:fg_orange - exec 'hi cmakeKWfind_package' . s:fg_aqua - exec 'hi cmakeKWstring' . s:fg_olive - exec 'hi cmakeKWinstall' . s:fg_aqua - exec 'hi cmakeKWtarget_sources' . s:fg_orange - - " C Highlighting - exec 'hi cType' . s:fg_pink . s:ft_bold - exec 'hi cFormat' . s:fg_olive - exec 'hi cStorageClass' . s:fg_navy . s:ft_bold - - exec 'hi cBoolean' . s:fg_green . s:ft_bold - exec 'hi cCharacter' . s:fg_olive - exec 'hi cConstant' . s:fg_green . s:ft_bold - exec 'hi cConditional' . s:fg_purple . s:ft_bold - exec 'hi cSpecial' . s:fg_olive . s:ft_bold - exec 'hi cDefine' . s:fg_blue - exec 'hi cNumber' . s:fg_orange - exec 'hi cPreCondit' . s:fg_aqua - exec 'hi cRepeat' . s:fg_purple . s:ft_bold - exec 'hi cLabel' . s:fg_aqua - " exec 'hi cAnsiFunction' . s:fg_aqua . s:ft_bold - " exec 'hi cAnsiName' . s:fg_pink - exec 'hi cDelimiter' . s:fg_blue - " exec 'hi cBraces' . s:fg_foreground - " exec 'hi cIdentifier' . s:fg_blue . s:bg_pink - " exec 'hi cSemiColon' . s:bg_blue - exec 'hi cOperator' . s:fg_aqua - " exec 'hi cStatement' . s:fg_pink - " exec 'hi cTodo' . s:fg_comment . s:ft_bold - " exec 'hi cStructure' . s:fg_blue . s:ft_bold - exec 'hi cCustomParen' . s:fg_foreground - " exec 'hi cCustomFunc' . s:fg_foreground - " exec 'hi cUserFunction' . s:fg_blue . s:ft_bold - exec 'hi cOctalZero' . s:fg_purple . s:ft_bold - if s:langOpt_c__highlight_builtins == 1 - exec 'hi cFunction' . s:fg_blue - else - exec 'hi cFunction' . s:fg_foreground - endif - - " CPP highlighting - exec 'hi cppBoolean' . s:fg_green . s:ft_bold - exec 'hi cppSTLnamespace' . s:fg_purple - exec 'hi cppSTLexception' . s:fg_pink - exec 'hi cppSTLfunctional' . s:fg_foreground . s:ft_bold - exec 'hi cppSTLiterator' . s:fg_foreground . s:ft_bold - exec 'hi cppExceptions' . s:fg_red - exec 'hi cppStatement' . s:fg_blue - exec 'hi cppStorageClass' . s:fg_navy . s:ft_bold - exec 'hi cppAccess' . s:fg_orange . s:ft_bold - if s:langOpt_cpp__highlight_standard_library == 1 - exec 'hi cppSTLconstant' . s:fg_green . s:ft_bold - exec 'hi cppSTLtype' . s:fg_pink . s:ft_bold - exec 'hi cppSTLfunction' . s:fg_blue - exec 'hi cppSTLios' . s:fg_olive . s:ft_bold - else - exec 'hi cppSTLconstant' . s:fg_foreground - exec 'hi cppSTLtype' . s:fg_foreground - exec 'hi cppSTLfunction' . s:fg_foreground - exec 'hi cppSTLios' . s:fg_foreground - endif - " exec 'hi cppSTL' . s:fg_blue - - " Rust highlighting - exec 'hi rustKeyword' . s:fg_pink - exec 'hi rustModPath' . s:fg_blue - exec 'hi rustModPathSep' . s:fg_blue - exec 'hi rustLifetime' . s:fg_purple - exec 'hi rustStructure' . s:fg_aqua . s:ft_bold - exec 'hi rustAttribute' . s:fg_aqua . s:ft_bold - exec 'hi rustPanic' . s:fg_olive . s:ft_bold - exec 'hi rustTrait' . s:fg_blue . s:ft_bold - exec 'hi rustEnum' . s:fg_green . s:ft_bold - exec 'hi rustEnumVariant' . s:fg_green - exec 'hi rustSelf' . s:fg_orange - exec 'hi rustSigil' . s:fg_aqua . s:ft_bold - exec 'hi rustOperator' . s:fg_aqua . s:ft_bold - exec 'hi rustMacro' . s:fg_olive . s:ft_bold - exec 'hi rustMacroVariable' . s:fg_olive - exec 'hi rustAssert' . s:fg_olive . s:ft_bold - exec 'hi rustConditional' . s:fg_purple . s:ft_bold - - " Lex highlighting - exec 'hi lexCFunctions' . s:fg_foreground - exec 'hi lexAbbrv' . s:fg_purple - exec 'hi lexAbbrvRegExp' . s:fg_aqua - exec 'hi lexAbbrvComment' . s:fg_comment - exec 'hi lexBrace' . s:fg_navy - exec 'hi lexPat' . s:fg_aqua - exec 'hi lexPatComment' . s:fg_comment - exec 'hi lexPatTag' . s:fg_orange - " exec 'hi lexPatBlock' . s:fg_foreground . s:ft_bold - exec 'hi lexSlashQuote' . s:fg_foreground - exec 'hi lexSep' . s:fg_foreground - exec 'hi lexStartState' . s:fg_orange - exec 'hi lexPatTagZone' . s:fg_olive . s:ft_bold - exec 'hi lexMorePat' . s:fg_olive . s:ft_bold - exec 'hi lexOptions' . s:fg_olive . s:ft_bold - exec 'hi lexPatString' . s:fg_olive - - " Yacc highlighting - exec 'hi yaccNonterminal' . s:fg_navy - exec 'hi yaccDelim' . s:fg_orange - exec 'hi yaccInitKey' . s:fg_aqua - exec 'hi yaccInit' . s:fg_navy - exec 'hi yaccKey' . s:fg_purple - exec 'hi yaccVar' . s:fg_aqua - - " NASM highlighting - exec 'hi nasmStdInstruction' . s:fg_navy - exec 'hi nasmGen08Register' . s:fg_aqua - exec 'hi nasmGen16Register' . s:fg_aqua - exec 'hi nasmGen32Register' . s:fg_aqua - exec 'hi nasmGen64Register' . s:fg_aqua - exec 'hi nasmHexNumber' . s:fg_purple - exec 'hi nasmStorage' . s:fg_aqua . s:ft_bold - exec 'hi nasmLabel' . s:fg_pink - exec 'hi nasmDirective' . s:fg_blue . s:ft_bold - exec 'hi nasmLocalLabel' . s:fg_orange - - " GAS highlighting - exec 'hi gasSymbol' . s:fg_pink - exec 'hi gasDirective' . s:fg_blue . s:ft_bold - exec 'hi gasOpcode_386_Base' . s:fg_navy - exec 'hi gasDecimalNumber' . s:fg_purple - exec 'hi gasSymbolRef' . s:fg_pink - exec 'hi gasRegisterX86' . s:fg_blue - exec 'hi gasOpcode_P6_Base' . s:fg_navy - exec 'hi gasDirectiveStore' . s:fg_foreground . s:ft_bold - - " MIPS highlighting - exec 'hi mipsInstruction' . s:fg_pink - exec 'hi mipsRegister' . s:fg_navy - exec 'hi mipsLabel' . s:fg_aqua . s:ft_bold - exec 'hi mipsDirective' . s:fg_purple . s:ft_bold - - " Shell/Bash highlighting - exec 'hi bashStatement' . s:fg_foreground . s:ft_bold - exec 'hi shDerefVar' . s:fg_aqua . s:ft_bold - exec 'hi shDerefSimple' . s:fg_aqua - exec 'hi shFunction' . s:fg_orange . s:ft_bold - exec 'hi shStatement' . s:fg_foreground - exec 'hi shLoop' . s:fg_purple . s:ft_bold - exec 'hi shQuote' . s:fg_olive - exec 'hi shCaseEsac' . s:fg_aqua . s:ft_bold - exec 'hi shSnglCase' . s:fg_purple . s:ft_none - exec 'hi shFunctionOne' . s:fg_navy - exec 'hi shCase' . s:fg_navy - exec 'hi shSetList' . s:fg_navy - " @see Dockerfile Highlighting section for more sh* - - " PowerShell Highlighting - exec 'hi ps1Type' . s:fg_green . s:ft_bold - exec 'hi ps1Variable' . s:fg_navy - exec 'hi ps1Boolean' . s:fg_navy . s:ft_bold - exec 'hi ps1FunctionInvocation' . s:fg_pink - exec 'hi ps1FunctionDeclaration' . s:fg_pink - exec 'hi ps1Keyword' . s:fg_blue . s:ft_bold - exec 'hi ps1Exception' . s:fg_red - exec 'hi ps1Operator' . s:fg_aqua . s:ft_bold - exec 'hi ps1CommentDoc' . s:fg_purple - exec 'hi ps1CDocParam' . s:fg_orange - - " HTML Highlighting - exec 'hi htmlTitle' . s:fg_green . s:ft_bold - exec 'hi htmlH1' . s:fg_green . s:ft_bold - exec 'hi htmlH2' . s:fg_aqua . s:ft_bold - exec 'hi htmlH3' . s:fg_purple . s:ft_bold - exec 'hi htmlH4' . s:fg_orange . s:ft_bold - exec 'hi htmlTag' . s:fg_comment - exec 'hi htmlTagName' . s:fg_wine - exec 'hi htmlArg' . s:fg_pink - exec 'hi htmlEndTag' . s:fg_comment - exec 'hi htmlString' . s:fg_blue - exec 'hi htmlScriptTag' . s:fg_comment - exec 'hi htmlBold' . s:fg_foreground . s:ft_bold - exec 'hi htmlItalic' . s:fg_comment . s:ft_italic - exec 'hi htmlBoldItalic' . s:fg_navy . s:ft_italic_bold - " exec 'hi htmlLink' . s:fg_blue . s:ft_bold - exec 'hi htmlTagN' . s:fg_wine . s:ft_bold - exec 'hi htmlSpecialTagName' . s:fg_wine - exec 'hi htmlComment' . s:fg_comment . s:ft_italic - exec 'hi htmlCommentPart' . s:fg_comment . s:ft_italic - - " CSS Highlighting - exec 'hi cssIdentifier' . s:fg_pink - exec 'hi cssPositioningProp' . s:fg_foreground - exec 'hi cssNoise' . s:fg_foreground - exec 'hi cssBoxProp' . s:fg_foreground - exec 'hi cssTableAttr' . s:fg_purple - exec 'hi cssPositioningAttr' . s:fg_navy - exec 'hi cssValueLength' . s:fg_orange - exec 'hi cssFunctionName' . s:fg_blue - exec 'hi cssUnitDecorators' . s:fg_aqua - exec 'hi cssColor' . s:fg_blue . s:ft_bold - exec 'hi cssBraces' . s:fg_pink - exec 'hi cssBackgroundProp' . s:fg_foreground - exec 'hi cssTextProp' . s:fg_foreground - exec 'hi cssDimensionProp' . s:fg_foreground - exec 'hi cssClassName' . s:fg_pink - - " Markdown Highlighting - exec 'hi markdownHeadingRule' . s:fg_pink . s:ft_bold - exec 'hi markdownH1' . s:fg_pink . s:ft_bold - exec 'hi markdownH2' . s:fg_orange . s:ft_bold - exec 'hi markdownBlockquote' . s:fg_pink - exec 'hi markdownCodeBlock' . s:fg_olive - exec 'hi markdownCode' . s:fg_olive - exec 'hi markdownLink' . s:fg_blue . s:ft_bold - exec 'hi markdownUrl' . s:fg_blue - exec 'hi markdownLinkText' . s:fg_pink - exec 'hi markdownLinkTextDelimiter' . s:fg_purple - exec 'hi markdownLinkDelimiter' . s:fg_purple - exec 'hi markdownCodeDelimiter' . s:fg_blue - - exec 'hi mkdCode' . s:fg_olive - exec 'hi mkdLink' . s:fg_blue . s:ft_bold - exec 'hi mkdURL' . s:fg_comment - exec 'hi mkdString' . s:fg_foreground - exec 'hi mkdBlockQuote' . s:fg_pink - exec 'hi mkdLinkTitle' . s:fg_pink - exec 'hi mkdDelimiter' . s:fg_aqua - exec 'hi mkdRule' . s:fg_pink - - " reStructuredText Highlighting - exec 'hi rstSections' . s:fg_pink . s:ft_bold - exec 'hi rstDelimiter' . s:fg_pink . s:ft_bold - exec 'hi rstExplicitMarkup' . s:fg_pink . s:ft_bold - exec 'hi rstDirective' . s:fg_blue - exec 'hi rstHyperlinkTarget' . s:fg_green - exec 'hi rstExDirective' . s:fg_foreground - exec 'hi rstInlineLiteral' . s:fg_olive - exec 'hi rstInterpretedTextOrHyperlinkReference' . s:fg_blue - - " Python Highlighting - exec 'hi pythonImport' . s:fg_pink . s:ft_bold - exec 'hi pythonExceptions' . s:fg_red - exec 'hi pythonException' . s:fg_purple . s:ft_bold - exec 'hi pythonInclude' . s:fg_red - exec 'hi pythonStatement' . s:fg_pink - exec 'hi pythonConditional' . s:fg_purple . s:ft_bold - exec 'hi pythonRepeat' . s:fg_purple . s:ft_bold - exec 'hi pythonFunction' . s:fg_aqua . s:ft_bold - exec 'hi pythonPreCondit' . s:fg_purple - exec 'hi pythonExClass' . s:fg_orange - exec 'hi pythonOperator' . s:fg_purple . s:ft_bold - exec 'hi pythonBuiltin' . s:fg_foreground - exec 'hi pythonDecorator' . s:fg_orange - - exec 'hi pythonString' . s:fg_olive - exec 'hi pythonEscape' . s:fg_olive . s:ft_bold - exec 'hi pythonStrFormatting' . s:fg_olive . s:ft_bold - - exec 'hi pythonBoolean' . s:fg_green . s:ft_bold - exec 'hi pythonExClass' . s:fg_red - exec 'hi pythonBytesEscape' . s:fg_olive . s:ft_bold - exec 'hi pythonDottedName' . s:fg_purple - exec 'hi pythonStrFormat' . s:fg_foreground - - if s:langOpt_python__highlight_builtins == 1 - exec 'hi pythonBuiltinFunc' . s:fg_blue - exec 'hi pythonBuiltinObj' . s:fg_red - else - exec 'hi pythonBuiltinFunc' . s:fg_foreground - exec 'hi pythonBuiltinObj' . s:fg_foreground - endif - - " Java Highlighting - exec 'hi javaExternal' . s:fg_pink - exec 'hi javaAnnotation' . s:fg_orange - exec 'hi javaTypedef' . s:fg_aqua - exec 'hi javaClassDecl' . s:fg_aqua . s:ft_bold - exec 'hi javaScopeDecl' . s:fg_blue . s:ft_bold - exec 'hi javaStorageClass' . s:fg_navy . s:ft_bold - exec 'hi javaBoolean' . s:fg_green . s:ft_bold - exec 'hi javaConstant' . s:fg_blue - exec 'hi javaCommentTitle' . s:fg_wine - exec 'hi javaDocTags' . s:fg_aqua - exec 'hi javaDocComment' . s:fg_comment - exec 'hi javaDocParam' . s:fg_foreground - exec 'hi javaStatement' . s:fg_pink - - " JavaScript Highlighting - exec 'hi javaScriptBraces' . s:fg_blue - exec 'hi javaScriptParens' . s:fg_blue - exec 'hi javaScriptIdentifier' . s:fg_pink - exec 'hi javaScriptFunction' . s:fg_blue . s:ft_bold - exec 'hi javaScriptConditional' . s:fg_purple . s:ft_bold - exec 'hi javaScriptRepeat' . s:fg_purple . s:ft_bold - exec 'hi javaScriptBoolean' . s:fg_green . s:ft_bold - exec 'hi javaScriptNumber' . s:fg_orange - exec 'hi javaScriptMember' . s:fg_navy - exec 'hi javaScriptReserved' . s:fg_navy - exec 'hi javascriptNull' . s:fg_comment . s:ft_bold - exec 'hi javascriptGlobal' . s:fg_foreground - exec 'hi javascriptStatement' . s:fg_pink - exec 'hi javaScriptMessage' . s:fg_foreground - exec 'hi javaScriptMember' . s:fg_foreground - - " @target https://github.com/pangloss/vim-javascript - exec 'hi jsFuncParens' . s:fg_blue - exec 'hi jsFuncBraces' . s:fg_blue - exec 'hi jsParens' . s:fg_blue - exec 'hi jsBraces' . s:fg_blue - exec 'hi jsNoise' . s:fg_blue - - " Jsx Highlighting - " @target https://github.com/MaxMEllon/vim-jsx-pretty - exec 'hi jsxTagName' . s:fg_wine - exec 'hi jsxComponentName' . s:fg_wine - exec 'hi jsxAttrib' . s:fg_pink - exec 'hi jsxEqual' . s:fg_comment - exec 'hi jsxString' . s:fg_blue - exec 'hi jsxCloseTag' . s:fg_comment - exec 'hi jsxCloseString' . s:fg_comment - exec 'hi jsxDot' . s:fg_wine - exec 'hi jsxNamespace' . s:fg_wine - exec 'hi jsxPunct' . s:fg_comment - - " Json Highlighting - " @target https://github.com/elzr/vim-json - exec 'hi jsonKeyword' . s:fg_blue - exec 'hi jsonString' . s:fg_olive - exec 'hi jsonQuote' . s:fg_comment - exec 'hi jsonNoise' . s:fg_foreground - exec 'hi jsonKeywordMatch' . s:fg_foreground - exec 'hi jsonBraces' . s:fg_foreground - exec 'hi jsonNumber' . s:fg_orange - exec 'hi jsonNull' . s:fg_purple . s:ft_bold - exec 'hi jsonBoolean' . s:fg_green . s:ft_bold - exec 'hi jsonCommentError' . s:fg_pink . s:bg_background - - " Go Highlighting - exec 'hi goDirective' . s:fg_red - exec 'hi goDeclaration' . s:fg_blue . s:ft_bold - exec 'hi goStatement' . s:fg_pink - exec 'hi goConditional' . s:fg_purple . s:ft_bold - exec 'hi goConstants' . s:fg_orange - exec 'hi goFunction' . s:fg_orange - " exec 'hi goTodo' . s:fg_comment . s:ft_bold - exec 'hi goDeclType' . s:fg_blue - exec 'hi goBuiltins' . s:fg_purple - - " Systemtap Highlighting - " exec 'hi stapBlock' . s:fg_comment . s:ft_none - exec 'hi stapComment' . s:fg_comment . s:ft_none - exec 'hi stapProbe' . s:fg_aqua . s:ft_bold - exec 'hi stapStat' . s:fg_navy . s:ft_bold - exec 'hi stapFunc' . s:fg_foreground - exec 'hi stapString' . s:fg_olive - exec 'hi stapTarget' . s:fg_navy - exec 'hi stapStatement' . s:fg_pink - exec 'hi stapType' . s:fg_pink . s:ft_bold - exec 'hi stapSharpBang' . s:fg_comment - exec 'hi stapDeclaration' . s:fg_pink - exec 'hi stapCMacro' . s:fg_blue - - " DTrace Highlighting - exec 'hi dtraceProbe' . s:fg_blue - exec 'hi dtracePredicate' . s:fg_purple . s:ft_bold - exec 'hi dtraceComment' . s:fg_comment - exec 'hi dtraceFunction' . s:fg_foreground - exec 'hi dtraceAggregatingFunction' . s:fg_blue . s:ft_bold - exec 'hi dtraceStatement' . s:fg_navy . s:ft_bold - exec 'hi dtraceIdentifier' . s:fg_pink - exec 'hi dtraceOption' . s:fg_pink - exec 'hi dtraceConstant' . s:fg_orange - exec 'hi dtraceType' . s:fg_pink . s:ft_bold - - " PlantUML Highlighting - exec 'hi plantumlPreProc' . s:fg_orange . s:ft_bold - exec 'hi plantumlDirectedOrVerticalArrowRL' . s:fg_pink - exec 'hi plantumlDirectedOrVerticalArrowLR' . s:fg_pink - exec 'hi plantumlString' . s:fg_olive - exec 'hi plantumlActivityThing' . s:fg_purple - exec 'hi plantumlText' . s:fg_navy - exec 'hi plantumlClassPublic' . s:fg_olive . s:ft_bold - exec 'hi plantumlClassPrivate' . s:fg_red - exec 'hi plantumlColonLine' . s:fg_orange - exec 'hi plantumlClass' . s:fg_navy - exec 'hi plantumlHorizontalArrow' . s:fg_pink - exec 'hi plantumlTypeKeyword' . s:fg_blue . s:ft_bold - exec 'hi plantumlKeyword' . s:fg_pink . s:ft_bold - - exec 'hi plantumlType' . s:fg_blue . s:ft_bold - exec 'hi plantumlBlock' . s:fg_pink . s:ft_bold - exec 'hi plantumlPreposition' . s:fg_orange - exec 'hi plantumlLayout' . s:fg_blue . s:ft_bold - exec 'hi plantumlNote' . s:fg_orange - exec 'hi plantumlLifecycle' . s:fg_aqua - exec 'hi plantumlParticipant' . s:fg_foreground . s:ft_bold - - - " Haskell Highlighting - exec 'hi haskellType' . s:fg_aqua . s:ft_bold - exec 'hi haskellIdentifier' . s:fg_orange . s:ft_bold - exec 'hi haskellOperators' . s:fg_pink - exec 'hi haskellWhere' . s:fg_foreground . s:ft_bold - exec 'hi haskellDelimiter' . s:fg_aqua - exec 'hi haskellImportKeywords' . s:fg_pink - exec 'hi haskellStatement' . s:fg_purple . s:ft_bold - - - " SQL/MySQL Highlighting - exec 'hi sqlStatement' . s:fg_pink . s:ft_bold - exec 'hi sqlType' . s:fg_blue . s:ft_bold - exec 'hi sqlKeyword' . s:fg_pink - exec 'hi sqlOperator' . s:fg_aqua - exec 'hi sqlSpecial' . s:fg_green . s:ft_bold - - exec 'hi mysqlVariable' . s:fg_olive . s:ft_bold - exec 'hi mysqlType' . s:fg_blue . s:ft_bold - exec 'hi mysqlKeyword' . s:fg_pink - exec 'hi mysqlOperator' . s:fg_aqua - exec 'hi mysqlSpecial' . s:fg_green . s:ft_bold - - - " Octave/MATLAB Highlighting - exec 'hi octaveVariable' . s:fg_foreground - exec 'hi octaveDelimiter' . s:fg_pink - exec 'hi octaveQueryVar' . s:fg_foreground - exec 'hi octaveSemicolon' . s:fg_purple - exec 'hi octaveFunction' . s:fg_navy - exec 'hi octaveSetVar' . s:fg_blue - exec 'hi octaveUserVar' . s:fg_foreground - exec 'hi octaveArithmeticOperator' . s:fg_aqua - exec 'hi octaveBeginKeyword' . s:fg_purple . s:ft_bold - exec 'hi octaveElseKeyword' . s:fg_purple . s:ft_bold - exec 'hi octaveEndKeyword' . s:fg_purple . s:ft_bold - exec 'hi octaveStatement' . s:fg_pink - - " Ruby Highlighting - exec 'hi rubyModule' . s:fg_navy . s:ft_bold - exec 'hi rubyClass' . s:fg_pink . s:ft_bold - exec 'hi rubyPseudoVariable' . s:fg_comment . s:ft_bold - exec 'hi rubyKeyword' . s:fg_pink - exec 'hi rubyInstanceVariable' . s:fg_purple - exec 'hi rubyFunction' . s:fg_foreground . s:ft_bold - exec 'hi rubyDefine' . s:fg_pink - exec 'hi rubySymbol' . s:fg_aqua - exec 'hi rubyConstant' . s:fg_blue - exec 'hi rubyAccess' . s:fg_navy - exec 'hi rubyAttribute' . s:fg_green - exec 'hi rubyInclude' . s:fg_red - exec 'hi rubyLocalVariableOrMethod' . s:fg_orange - exec 'hi rubyCurlyBlock' . s:fg_foreground - exec 'hi rubyCurlyBlockDelimiter' . s:fg_aqua - exec 'hi rubyArrayDelimiter' . s:fg_aqua - exec 'hi rubyStringDelimiter' . s:fg_olive - exec 'hi rubyInterpolationDelimiter' . s:fg_orange - exec 'hi rubyConditional' . s:fg_purple . s:ft_bold - exec 'hi rubyRepeat' . s:fg_purple . s:ft_bold - exec 'hi rubyControl' . s:fg_purple . s:ft_bold - exec 'hi rubyException' . s:fg_purple . s:ft_bold - exec 'hi rubyExceptional' . s:fg_purple . s:ft_bold - exec 'hi rubyBoolean' . s:fg_green . s:ft_bold - - " Fortran Highlighting - exec 'hi fortranUnitHeader' . s:fg_blue . s:ft_bold - exec 'hi fortranIntrinsic' . s:fg_blue . s:bg_background . s:ft_none - exec 'hi fortranType' . s:fg_pink . s:ft_bold - exec 'hi fortranTypeOb' . s:fg_pink . s:ft_bold - exec 'hi fortranStructure' . s:fg_aqua - exec 'hi fortranStorageClass' . s:fg_navy . s:ft_bold - exec 'hi fortranStorageClassR' . s:fg_navy . s:ft_bold - exec 'hi fortranKeyword' . s:fg_pink - exec 'hi fortranReadWrite' . s:fg_aqua . s:ft_bold - exec 'hi fortranIO' . s:fg_navy - exec 'hi fortranOperator' . s:fg_aqua . s:ft_bold - exec 'hi fortranCall' . s:fg_aqua . s:ft_bold - exec 'hi fortranContinueMark' . s:fg_green - - " ALGOL Highlighting (Plugin: https://github.com/sterpe/vim-algol68) - exec 'hi algol68Statement' . s:fg_blue . s:ft_bold - exec 'hi algol68Operator' . s:fg_aqua . s:ft_bold - exec 'hi algol68PreProc' . s:fg_green - exec 'hi algol68Function' . s:fg_blue - - " R Highlighting - exec 'hi rType' . s:fg_blue - exec 'hi rArrow' . s:fg_pink - exec 'hi rDollar' . s:fg_blue - - " XXD Highlighting - exec 'hi xxdAddress' . s:fg_navy - exec 'hi xxdSep' . s:fg_pink - exec 'hi xxdAscii' . s:fg_pink - exec 'hi xxdDot' . s:fg_aqua - - " PHP Highlighting - exec 'hi phpIdentifier' . s:fg_foreground - exec 'hi phpVarSelector' . s:fg_pink - exec 'hi phpKeyword' . s:fg_blue - exec 'hi phpRepeat' . s:fg_purple . s:ft_bold - exec 'hi phpConditional' . s:fg_purple . s:ft_bold - exec 'hi phpStatement' . s:fg_pink - exec 'hi phpAssignByRef' . s:fg_aqua . s:ft_bold - exec 'hi phpSpecialFunction' . s:fg_blue - exec 'hi phpFunctions' . s:fg_blue - exec 'hi phpComparison' . s:fg_aqua - exec 'hi phpBackslashSequences' . s:fg_olive . s:ft_bold - exec 'hi phpMemberSelector' . s:fg_blue - exec 'hi phpStorageClass' . s:fg_purple . s:ft_bold - exec 'hi phpDefine' . s:fg_navy - exec 'hi phpIntVar' . s:fg_navy . s:ft_bold - - " Perl Highlighting - exec 'hi perlFiledescRead' . s:fg_green - exec 'hi perlMatchStartEnd' . s:fg_pink - exec 'hi perlStatementFlow' . s:fg_pink - exec 'hi perlStatementStorage' . s:fg_pink - exec 'hi perlFunction' . s:fg_pink . s:ft_bold - exec 'hi perlMethod' . s:fg_foreground - exec 'hi perlStatementFiledesc' . s:fg_orange - exec 'hi perlVarPlain' . s:fg_navy - exec 'hi perlSharpBang' . s:fg_comment - exec 'hi perlStatementInclude' . s:fg_aqua . s:ft_bold - exec 'hi perlStatementScalar' . s:fg_purple - exec 'hi perlSubName' . s:fg_aqua . s:ft_bold - exec 'hi perlSpecialString' . s:fg_olive . s:ft_bold - - " Pascal Highlighting - exec 'hi pascalType' . s:fg_pink . s:ft_bold - exec 'hi pascalStatement' . s:fg_blue . s:ft_bold - exec 'hi pascalPredefined' . s:fg_pink - exec 'hi pascalFunction' . s:fg_foreground - exec 'hi pascalStruct' . s:fg_navy . s:ft_bold - exec 'hi pascalOperator' . s:fg_aqua . s:ft_bold - exec 'hi pascalPreProc' . s:fg_green - exec 'hi pascalAcces' . s:fg_navy . s:ft_bold - - " Lua Highlighting - exec 'hi luaFunc' . s:fg_foreground - exec 'hi luaIn' . s:fg_blue . s:ft_bold - exec 'hi luaFunction' . s:fg_pink - exec 'hi luaStatement' . s:fg_blue - exec 'hi luaRepeat' . s:fg_blue . s:ft_bold - exec 'hi luaCondStart' . s:fg_purple . s:ft_bold - exec 'hi luaTable' . s:fg_aqua . s:ft_bold - exec 'hi luaConstant' . s:fg_green . s:ft_bold - exec 'hi luaElse' . s:fg_purple . s:ft_bold - exec 'hi luaCondElseif' . s:fg_purple . s:ft_bold - exec 'hi luaCond' . s:fg_purple . s:ft_bold - exec 'hi luaCondEnd' . s:fg_purple - - " Clojure highlighting: - exec 'hi clojureConstant' . s:fg_blue - exec 'hi clojureBoolean' . s:fg_orange - exec 'hi clojureCharacter' . s:fg_olive - exec 'hi clojureKeyword' . s:fg_pink - exec 'hi clojureNumber' . s:fg_orange - exec 'hi clojureString' . s:fg_olive - exec 'hi clojureRegexp' . s:fg_purple - exec 'hi clojureRegexpEscape' . s:fg_pink - exec 'hi clojureParen' . s:fg_aqua - exec 'hi clojureVariable' . s:fg_olive - exec 'hi clojureCond' . s:fg_blue - exec 'hi clojureDefine' . s:fg_blue . s:ft_bold - exec 'hi clojureException' . s:fg_red - exec 'hi clojureFunc' . s:fg_navy - exec 'hi clojureMacro' . s:fg_blue - exec 'hi clojureRepeat' . s:fg_blue - exec 'hi clojureSpecial' . s:fg_blue . s:ft_bold - exec 'hi clojureQuote' . s:fg_blue - exec 'hi clojureUnquote' . s:fg_blue - exec 'hi clojureMeta' . s:fg_blue - exec 'hi clojureDeref' . s:fg_blue - exec 'hi clojureAnonArg' . s:fg_blue - exec 'hi clojureRepeat' . s:fg_blue - exec 'hi clojureDispatch' . s:fg_aqua - - " Dockerfile Highlighting - " @target https://github.com/docker/docker/tree/master/contrib/syntax/vim - exec 'hi dockerfileKeyword' . s:fg_blue - exec 'hi shDerefVar' . s:fg_purple . s:ft_bold - exec 'hi shOperator' . s:fg_aqua - exec 'hi shOption' . s:fg_navy - exec 'hi shLine' . s:fg_foreground - exec 'hi shWrapLineOperator' . s:fg_pink - - " NGINX Highlighting - " @target https://github.com/evanmiller/nginx-vim-syntax - exec 'hi ngxDirectiveBlock' . s:fg_pink . s:ft_bold - exec 'hi ngxDirective' . s:fg_blue . s:ft_none - exec 'hi ngxDirectiveImportant' . s:fg_blue . s:ft_bold - exec 'hi ngxString' . s:fg_olive - exec 'hi ngxVariableString' . s:fg_purple - exec 'hi ngxVariable' . s:fg_purple . s:ft_none - - " Yaml Highlighting - exec 'hi yamlBlockMappingKey' . s:fg_blue - exec 'hi yamlKeyValueDelimiter' . s:fg_pink - exec 'hi yamlBlockCollectionItemStart' . s:fg_pink - - " Qt QML Highlighting - exec 'hi qmlObjectLiteralType' . s:fg_pink - exec 'hi qmlReserved' . s:fg_purple - exec 'hi qmlBindingProperty' . s:fg_navy - exec 'hi qmlType' . s:fg_navy - - " Dosini Highlighting - exec 'hi dosiniHeader' . s:fg_pink - exec 'hi dosiniLabel' . s:fg_blue - - " Mail highlighting - exec 'hi mailHeaderKey' . s:fg_blue - exec 'hi mailHeaderEmail' . s:fg_purple - exec 'hi mailSubject' . s:fg_pink - exec 'hi mailHeader' . s:fg_comment - exec 'hi mailURL' . s:fg_aqua - exec 'hi mailEmail' . s:fg_purple - exec 'hi mailQuoted1' . s:fg_olive - exec 'hi mailQuoted2' . s:fg_navy - - " XML Highlighting - exec 'hi xmlProcessingDelim' . s:fg_pink - exec 'hi xmlString' . s:fg_olive - exec 'hi xmlEqual' . s:fg_orange - exec 'hi xmlAttrib' . s:fg_navy - exec 'hi xmlAttribPunct' . s:fg_pink - exec 'hi xmlTag' . s:fg_blue - exec 'hi xmlTagName' . s:fg_blue - exec 'hi xmlEndTag' . s:fg_blue - exec 'hi xmlNamespace' . s:fg_orange - - " Exlixir Highlighting - " @target https://github.com/elixir-lang/vim-elixir - exec 'hi elixirAlias' . s:fg_blue . s:ft_bold - exec 'hi elixirAtom' . s:fg_navy - exec 'hi elixirVariable' . s:fg_navy - exec 'hi elixirUnusedVariable' . s:fg_foreground . s:ft_bold - exec 'hi elixirInclude' . s:fg_purple - exec 'hi elixirStringDelimiter' . s:fg_olive - exec 'hi elixirKeyword' . s:fg_purple . s:ft_bold - exec 'hi elixirFunctionDeclaration' . s:fg_aqua . s:ft_bold - exec 'hi elixirBlockDefinition' . s:fg_pink - exec 'hi elixirDefine' . s:fg_pink - exec 'hi elixirStructDefine' . s:fg_pink - exec 'hi elixirPrivateDefine' . s:fg_pink - exec 'hi elixirModuleDefine' . s:fg_pink - exec 'hi elixirProtocolDefine' . s:fg_pink - exec 'hi elixirImplDefine' . s:fg_pink - exec 'hi elixirModuleDeclaration' . s:fg_aqua . s:ft_bold - exec 'hi elixirDocString' . s:fg_olive - exec 'hi elixirDocTest' . s:fg_green . s:ft_bold - - " Erlang Highlighting - exec 'hi erlangBIF' . s:fg_purple . s:ft_bold - exec 'hi erlangBracket' . s:fg_pink - exec 'hi erlangLocalFuncCall' . s:fg_foreground - exec 'hi erlangVariable' . s:fg_foreground - exec 'hi erlangAtom' . s:fg_navy - exec 'hi erlangAttribute' . s:fg_blue . s:ft_bold - exec 'hi erlangRecordDef' . s:fg_blue . s:ft_bold - exec 'hi erlangRecord' . s:fg_blue - exec 'hi erlangRightArrow' . s:fg_blue . s:ft_bold - exec 'hi erlangStringModifier' . s:fg_olive . s:ft_bold - exec 'hi erlangInclude' . s:fg_blue . s:ft_bold - exec 'hi erlangKeyword' . s:fg_pink - exec 'hi erlangGlobalFuncCall' . s:fg_foreground - - " Cucumber Highlighting - exec 'hi cucumberFeature' . s:fg_blue . s:ft_bold - exec 'hi cucumberBackground' . s:fg_pink . s:ft_bold - exec 'hi cucumberScenario' . s:fg_pink . s:ft_bold - exec 'hi cucumberGiven' . s:fg_orange - exec 'hi cucumberGivenAnd' . s:fg_blue - exec 'hi cucumberThen' . s:fg_orange - exec 'hi cucumberThenAnd' . s:fg_blue - exec 'hi cucumberWhen' . s:fg_purple . s:ft_bold - exec 'hi cucumberScenarioOutline' . s:fg_pink . s:ft_bold - exec 'hi cucumberExamples' . s:fg_aqua - exec 'hi cucumberTags' . s:fg_aqua - exec 'hi cucumberPlaceholder' . s:fg_aqua - - " Ada Highlighting - exec 'hi adaInc' . s:fg_aqua . s:ft_bold - exec 'hi adaSpecial' . s:fg_aqua . s:ft_bold - exec 'hi adaKeyword' . s:fg_pink - exec 'hi adaBegin' . s:fg_pink - exec 'hi adaEnd' . s:fg_pink - exec 'hi adaTypedef' . s:fg_navy . s:ft_bold - exec 'hi adaAssignment' . s:fg_aqua . s:ft_bold - exec 'hi adaAttribute' . s:fg_green - - " COBOL Highlighting - exec 'hi cobolMarker' . s:fg_comment . s:bg_cursorline - exec 'hi cobolLine' . s:fg_foreground - exec 'hi cobolReserved' . s:fg_blue - exec 'hi cobolDivision' . s:fg_pink . s:ft_bold - exec 'hi cobolDivisionName' . s:fg_pink . s:ft_bold - exec 'hi cobolSection' . s:fg_navy . s:ft_bold - exec 'hi cobolSectionName' . s:fg_navy . s:ft_bold - exec 'hi cobolParagraph' . s:fg_purple - exec 'hi cobolParagraphName' . s:fg_purple - exec 'hi cobolDeclA' . s:fg_purple - exec 'hi cobolDecl' . s:fg_green - exec 'hi cobolCALLs' . s:fg_aqua . s:ft_bold - exec 'hi cobolEXECs' . s:fg_aqua . s:ft_bold - - " GNU sed highlighting - exec 'hi sedST' . s:fg_purple . s:ft_bold - exec 'hi sedFlag' . s:fg_purple . s:ft_bold - exec 'hi sedRegexp47' . s:fg_pink - exec 'hi sedRegexpMeta' . s:fg_blue . s:ft_bold - exec 'hi sedReplacement47' . s:fg_olive - exec 'hi sedReplaceMeta' . s:fg_orange . s:ft_bold - exec 'hi sedAddress' . s:fg_pink - exec 'hi sedFunction' . s:fg_aqua . s:ft_bold - exec 'hi sedBranch' . s:fg_green . s:ft_bold - exec 'hi sedLabel' . s:fg_green . s:ft_bold - - " GNU awk highlighting - exec 'hi awkPatterns' . s:fg_pink . s:ft_bold - exec 'hi awkSearch' . s:fg_pink - exec 'hi awkRegExp' . s:fg_blue . s:ft_bold - exec 'hi awkCharClass' . s:fg_blue . s:ft_bold - exec 'hi awkFieldVars' . s:fg_green . s:ft_bold - exec 'hi awkStatement' . s:fg_blue . s:ft_bold - exec 'hi awkFunction' . s:fg_blue - exec 'hi awkVariables' . s:fg_green . s:ft_bold - exec 'hi awkArrayElement' . s:fg_orange - exec 'hi awkOperator' . s:fg_foreground - exec 'hi awkBoolLogic' . s:fg_foreground - exec 'hi awkExpression' . s:fg_foreground - exec 'hi awkSpecialPrintf' . s:fg_olive . s:ft_bold - - " Elm highlighting - exec 'hi elmImport' . s:fg_navy - exec 'hi elmAlias' . s:fg_aqua - exec 'hi elmType' . s:fg_pink - exec 'hi elmOperator' . s:fg_aqua . s:ft_bold - exec 'hi elmBraces' . s:fg_aqua . s:ft_bold - exec 'hi elmTypedef' . s:fg_blue . s:ft_bold - exec 'hi elmTopLevelDecl' . s:fg_green . s:ft_bold - - " Purescript highlighting - exec 'hi purescriptModuleKeyword' . s:fg_navy - exec 'hi purescriptImportKeyword' . s:fg_navy - exec 'hi purescriptModuleName' . s:fg_pink - exec 'hi purescriptOperator' . s:fg_aqua . s:ft_bold - exec 'hi purescriptType' . s:fg_pink - exec 'hi purescriptTypeVar' . s:fg_navy - exec 'hi purescriptStructure' . s:fg_blue . s:ft_bold - exec 'hi purescriptLet' . s:fg_blue . s:ft_bold - exec 'hi purescriptFunction' . s:fg_green . s:ft_bold - exec 'hi purescriptDelimiter' . s:fg_aqua . s:ft_bold - exec 'hi purescriptStatement' . s:fg_purple . s:ft_bold - exec 'hi purescriptConstructor' . s:fg_pink - exec 'hi purescriptWhere' . s:fg_purple . s:ft_bold - - " F# highlighting - exec 'hi fsharpTypeName' . s:fg_pink - exec 'hi fsharpCoreClass' . s:fg_pink - exec 'hi fsharpType' . s:fg_pink - exec 'hi fsharpKeyword' . s:fg_blue . s:ft_bold - exec 'hi fsharpOperator' . s:fg_aqua . s:ft_bold - exec 'hi fsharpBoolean' . s:fg_green . s:ft_bold - exec 'hi fsharpFormat' . s:fg_foreground - exec 'hi fsharpLinq' . s:fg_blue - exec 'hi fsharpKeyChar' . s:fg_aqua . s:ft_bold - exec 'hi fsharpOption' . s:fg_orange - exec 'hi fsharpCoreMethod' . s:fg_purple - exec 'hi fsharpAttrib' . s:fg_orange - exec 'hi fsharpModifier' . s:fg_aqua - exec 'hi fsharpOpen' . s:fg_red - - " ASN.1 highlighting - exec 'hi asnExternal' . s:fg_green . s:ft_bold - exec 'hi asnTagModifier' . s:fg_purple - exec 'hi asnBraces' . s:fg_aqua . s:ft_bold - exec 'hi asnDefinition' . s:fg_foreground - exec 'hi asnStructure' . s:fg_blue - exec 'hi asnType' . s:fg_pink - exec 'hi asnTypeInfo' . s:fg_aqua . s:ft_bold - exec 'hi asnFieldOption' . s:fg_purple - - " }}} - - " Plugin: Netrw - exec 'hi netrwVersion' . s:fg_red - exec 'hi netrwList' . s:fg_pink - exec 'hi netrwHidePat' . s:fg_olive - exec 'hi netrwQuickHelp' . s:fg_blue - exec 'hi netrwHelpCmd' . s:fg_blue - exec 'hi netrwDir' . s:fg_aqua . s:ft_bold - exec 'hi netrwClassify' . s:fg_pink - exec 'hi netrwExe' . s:fg_green - exec 'hi netrwSuffixes' . s:fg_comment - exec 'hi netrwTreeBar' . s:fg_linenumber_fg - - " Plugin: NERDTree - exec 'hi NERDTreeUp' . s:fg_comment - exec 'hi NERDTreeHelpCommand' . s:fg_pink - exec 'hi NERDTreeHelpTitle' . s:fg_blue . s:ft_bold - exec 'hi NERDTreeHelpKey' . s:fg_pink - exec 'hi NERDTreeHelp' . s:fg_foreground - exec 'hi NERDTreeToggleOff' . s:fg_red - exec 'hi NERDTreeToggleOn' . s:fg_green - exec 'hi NERDTreeDir' . s:fg_blue . s:ft_bold - exec 'hi NERDTreeDirSlash' . s:fg_pink - exec 'hi NERDTreeFile' . s:fg_foreground - exec 'hi NERDTreeExecFile' . s:fg_green - exec 'hi NERDTreeOpenable' . s:fg_aqua . s:ft_bold - exec 'hi NERDTreeClosable' . s:fg_pink - - " Plugin: Tagbar - exec 'hi TagbarHelpTitle' . s:fg_blue . s:ft_bold - exec 'hi TagbarHelp' . s:fg_foreground - exec 'hi TagbarKind' . s:fg_pink - exec 'hi TagbarSignature' . s:fg_aqua - - " Plugin: Vimdiff - exec 'hi DiffAdd' . s:fg_diffadd_fg . s:bg_diffadd_bg . s:ft_none - exec 'hi DiffChange' . s:fg_diffchange_fg . s:bg_diffchange_bg . s:ft_none - exec 'hi DiffDelete' . s:fg_diffdelete_fg . s:bg_diffdelete_bg . s:ft_none - exec 'hi DiffText' . s:fg_difftext_fg . s:bg_difftext_bg . s:ft_none - - " Plugin: AGit - exec 'hi agitHead' . s:fg_green . s:ft_bold - exec 'hi agitHeader' . s:fg_olive - exec 'hi agitStatAdded' . s:fg_diffadd_fg - exec 'hi agitStatRemoved' . s:fg_diffdelete_fg - exec 'hi agitDiffAdd' . s:fg_diffadd_fg - exec 'hi agitDiffRemove' . s:fg_diffdelete_fg - exec 'hi agitDiffHeader' . s:fg_pink - exec 'hi agitDiff' . s:fg_foreground - exec 'hi agitDiffIndex' . s:fg_purple - exec 'hi agitDiffFileName' . s:fg_aqua - exec 'hi agitLog' . s:fg_foreground - exec 'hi agitAuthorMark' . s:fg_olive - exec 'hi agitDateMark' . s:fg_comment - exec 'hi agitHeaderLabel' . s:fg_aqua - exec 'hi agitDate' . s:fg_aqua - exec 'hi agitTree' . s:fg_pink - exec 'hi agitRef' . s:fg_blue . s:ft_bold - exec 'hi agitRemote' . s:fg_purple . s:ft_bold - exec 'hi agitTag' . s:fg_orange . s:ft_bold - - " Plugin: Spell Checking - exec 'hi SpellBad' . s:fg_foreground . s:bg_spellbad - exec 'hi SpellCap' . s:fg_foreground . s:bg_spellcap - exec 'hi SpellRare' . s:fg_foreground . s:bg_spellrare - exec 'hi SpellLocal' . s:fg_foreground . s:bg_spelllocal - - " Plugin: Indent Guides - exec 'hi IndentGuidesOdd' . s:bg_background - exec 'hi IndentGuidesEven' . s:bg_cursorline - - " Plugin: Startify - exec 'hi StartifyFile' . s:fg_blue . s:ft_bold - exec 'hi StartifyNumber' . s:fg_orange - exec 'hi StartifyHeader' . s:fg_comment - exec 'hi StartifySection' . s:fg_pink - exec 'hi StartifyPath' . s:fg_foreground - exec 'hi StartifySlash' . s:fg_navy - exec 'hi StartifyBracket' . s:fg_aqua - exec 'hi StartifySpecial' . s:fg_aqua - - " Git commit message - exec 'hi gitcommitSummary' . s:fg_blue - exec 'hi gitcommitHeader' . s:fg_green . s:ft_bold - exec 'hi gitcommitSelectedType' . s:fg_blue - exec 'hi gitcommitSelectedFile' . s:fg_pink - exec 'hi gitcommitUntrackedFile' . s:fg_diffdelete_fg - exec 'hi gitcommitBranch' . s:fg_aqua . s:ft_bold - exec 'hi gitcommitDiscardedType' . s:fg_diffdelete_fg - exec 'hi gitcommitDiff' . s:fg_comment - - exec 'hi diffFile' . s:fg_blue - exec 'hi diffSubname' . s:fg_comment - exec 'hi diffIndexLine' . s:fg_comment - exec 'hi diffAdded' . s:fg_diffadd_fg - exec 'hi diffRemoved' . s:fg_diffdelete_fg - exec 'hi diffLine' . s:fg_orange - exec 'hi diffBDiffer' . s:fg_orange - exec 'hi diffNewFile' . s:fg_comment - -endfun -" }}} - -" ================================== MISC ===================================== -" Command to show theme information {{{ -fun! g:PaperColor() - echom 'PaperColor Theme Framework' - echom ' version ' . s:version - echom ' by Nikyle Nguyen et al.' - echom ' at https://github.com/NLKNguyen/papercolor-theme/' - echom ' ' - echom 'Current theme: ' . s:theme_name - echom ' ' . s:selected_theme['description'] - echom ' by ' . s:selected_theme['maintainer'] - echom ' at ' . s:selected_theme['source'] - - " TODO: add diff display for theme color names between 'default' and current - " theme if it is a custom theme, i.e. child theme. -endfun - -" @brief command alias for g:PaperColor() -command! -nargs=0 PaperColor :call g:PaperColor() -" }}} - -" =============================== MAIN ======================================== - -hi clear -syntax reset -let g:colors_name = "PaperColor" - -call s:acquire_theme_data() -call s:identify_color_mode() - -call s:generate_theme_option_variables() -call s:generate_language_option_variables() - -call s:set_format_attributes() -call s:set_overriding_colors() - -call s:convert_colors() -call s:set_color_variables() - -call s:apply_syntax_highlightings() - -" ============================================================================= -" Cheers! -" vim: fdm=marker ff=unix diff --git a/dotfiles/.config/nvim/colors/badwolf.vim b/dotfiles/.config/nvim/colors/badwolf.vim deleted file mode 100644 index 2cf4095..0000000 --- a/dotfiles/.config/nvim/colors/badwolf.vim +++ /dev/null @@ -1,670 +0,0 @@ -" _ _ _ __ -" | |__ __ _ __| | __ _____ | |/ _| -" | '_ \ / _` |/ _` | \ \ /\ / / _ \| | |_ -" | |_) | (_| | (_| | \ V V / (_) | | _| -" |_.__/ \__,_|\__,_| \_/\_/ \___/|_|_| -" -" I am the Bad Wolf. I create myself. -" I take the words. I scatter them in time and space. -" A message to lead myself here. -" -" A Vim colorscheme pieced together by Steve Losh. -" Available at http://stevelosh.com/projects/badwolf/ -" -" Why? {{{ -" -" After using Molokai for quite a long time, I started longing for -" a replacement. -" -" I love Molokai's high contrast and gooey, saturated tones, but it can be -" a little inconsistent at times. -" -" Also it's winter here in Rochester, so I wanted a color scheme that's a bit -" warmer. A little less blue and a bit more red. -" -" And so Bad Wolf was born. I'm no designer, but designers have been scattering -" beautiful colors through time and space long before I came along. I took -" advantage of that and reused some of my favorites to lead me to this scheme. -" -" }}} - -" Supporting code ------------------------------------------------------------- -" Preamble {{{ - -if !has("gui_running") && &t_Co != 88 && &t_Co != 256 - finish -endif -color=#1f1f1f -set background=dark - -if exists("syntax_on") - syntax reset -endif - -let g:colors_name = "badwolf" - -if !exists("g:badwolf_html_link_underline") " {{{ - let g:badwolf_html_link_underline = 1 -endif " }}} - -if !exists("g:badwolf_css_props_highlight") " {{{ - let g:badwolf_css_props_highlight = 0 -endif " }}} - -" }}} -" Palette {{{ - -let s:bwc = {} - -" The most basic of all our colors is a slightly tweaked version of the Molokai -" Normal text. -let s:bwc.plain = ['f8f6f2', 15] - -" Pure and simple. -let s:bwc.snow = ['ffffff', 15] -let s:bwc.coal = ['000000', 16] - -" All of the Gravel colors are based on a brown from Clouds Midnight. -let s:bwc.brightgravel = ['d9cec3', 252] -let s:bwc.lightgravel = ['998f84', 245] -let s:bwc.gravel = ['857f78', 243] -let s:bwc.mediumgravel = ['666462', 241] -let s:bwc.deepgravel = ['45413b', 238] -let s:bwc.deepergravel = ['35322d', 236] -let s:bwc.darkgravel = ['242321', 235] -let s:bwc.blackgravel = ['1c1b1a', 233] -let s:bwc.blackestgravel = ['141413', 232] - -" A color sampled from a highlight in a photo of a glass of Dale's Pale Ale on -" my desk. -let s:bwc.dalespale = ['fade3e', 221] - -" A beautiful tan from Tomorrow Night. -let s:bwc.dirtyblonde = ['f4cf86', 222] - -" Delicious, chewy red from Made of Code for the poppiest highlights. -let s:bwc.taffy = ['ff2c4b', 196] - -" Another chewy accent, but use sparingly! -let s:bwc.saltwatertaffy = ['8cffba', 121] - -" The star of the show comes straight from Made of Code. -" -" You should almost never use this. It should be used for things that denote -" 'where the user is', which basically consists of: -" -" * The cursor -" * A REPL prompt -let s:bwc.tardis = ['0a9dff', 39] - -" This one's from Mustang, not Florida! -let s:bwc.orange = ['ffa724', 214] - -" A limier green from Getafe. -let s:bwc.lime = ['aeee00', 154] - -" Rose's dress in The Idiot's Lantern. -let s:bwc.dress = ['ff9eb8', 211] - -" Another play on the brown from Clouds Midnight. I love that color. -let s:bwc.toffee = ['b88853', 137] - -" Also based on that Clouds Midnight brown. -let s:bwc.coffee = ['c7915b', 173] -let s:bwc.darkroast = ['88633f', 95] - -" }}} -" Highlighting Function {{{ -function! s:HL(group, fg, ...) - " Arguments: group, guifg, guibg, gui, guisp - - let histring = 'hi ' . a:group . ' ' - - if strlen(a:fg) - if a:fg == 'fg' - let histring .= 'guifg=fg ctermfg=fg ' - else - let c = get(s:bwc, a:fg) - let histring .= 'guifg=#' . c[0] . ' ctermfg=' . c[1] . ' ' - endif - endif - - if a:0 >= 1 && strlen(a:1) - if a:1 == 'bg' - let histring .= 'guibg=bg ctermbg=bg ' - else - let c = get(s:bwc, a:1) - let histring .= 'guibg=#' . c[0] . ' ctermbg=' . c[1] . ' ' - endif - endif - - if a:0 >= 2 && strlen(a:2) - let histring .= 'gui=' . a:2 . ' cterm=' . a:2 . ' ' - endif - - if a:0 >= 3 && strlen(a:3) - let c = get(s:bwc, a:3) - let histring .= 'guisp=#' . c[0] . ' ' - endif - - " echom histring - - execute histring -endfunction -" }}} -" Configuration Options {{{ - -if exists('g:badwolf_darkgutter') && g:badwolf_darkgutter - let s:gutter = 'blackestgravel' -else - let s:gutter = 'blackgravel' -endif - -if exists('g:badwolf_tabline') - if g:badwolf_tabline == 0 - let s:tabline = 'blackestgravel' - elseif g:badwolf_tabline == 1 - let s:tabline = 'blackgravel' - elseif g:badwolf_tabline == 2 - let s:tabline = 'darkgravel' - elseif g:badwolf_tabline == 3 - let s:tabline = 'deepgravel' - else - let s:tabline = 'blackestgravel' - endif -else - let s:tabline = 'blackgravel' -endif - -" }}} - -" Actual colorscheme ---------------------------------------------------------- -" Vanilla Vim {{{ - -" General/UI {{{ - -call s:HL('Normal', 'plain', 'blackgravel') - -call s:HL('Folded', 'mediumgravel', 'bg', 'none') - -call s:HL('VertSplit', 'lightgravel', 'bg', 'none') - -call s:HL('CursorLine', '', 'darkgravel', 'none') -call s:HL('CursorColumn', '', 'darkgravel') -call s:HL('ColorColumn', '', 'darkgravel') - -call s:HL('TabLine', 'plain', s:tabline, 'none') -call s:HL('TabLineFill', 'plain', s:tabline, 'none') -call s:HL('TabLineSel', 'coal', 'tardis', 'none') - -call s:HL('MatchParen', 'dalespale', 'darkgravel', 'bold') - -call s:HL('NonText', 'deepgravel', 'bg') -call s:HL('SpecialKey', 'deepgravel', 'bg') - -call s:HL('Visual', '', 'deepgravel') -call s:HL('VisualNOS', '', 'deepgravel') - -call s:HL('Search', 'coal', 'dalespale', 'bold') -call s:HL('IncSearch', 'coal', 'tardis', 'bold') - -call s:HL('Underlined', 'fg', '', 'underline') - -call s:HL('StatusLine', 'coal', 'tardis', 'bold') -call s:HL('StatusLineNC', 'snow', 'deepgravel', 'bold') - -call s:HL('Directory', 'dirtyblonde', '', 'bold') - -call s:HL('Title', 'lime') - -call s:HL('ErrorMsg', 'taffy', 'bg', 'bold') -call s:HL('MoreMsg', 'dalespale', '', 'bold') -call s:HL('ModeMsg', 'dirtyblonde', '', 'bold') -call s:HL('Question', 'dirtyblonde', '', 'bold') -call s:HL('WarningMsg', 'dress', '', 'bold') - -" This is a ctags tag, not an HTML one. 'Something you can use c-] on'. -call s:HL('Tag', '', '', 'bold') - -" hi IndentGuides guibg=#373737 -" hi WildMenu guifg=#66D9EF guibg=#000000 - -" }}} -" Gutter {{{ - -call s:HL('LineNr', 'mediumgravel', s:gutter) -call s:HL('SignColumn', '', s:gutter) -call s:HL('FoldColumn', 'mediumgravel', s:gutter) - -" }}} -" Cursor {{{ - -call s:HL('Cursor', 'coal', 'tardis', 'bold') -call s:HL('vCursor', 'coal', 'tardis', 'bold') -call s:HL('iCursor', 'coal', 'tardis', 'none') - -" }}} -" Syntax highlighting {{{ - -" Start with a simple base. -call s:HL('Special', 'plain') - -" Comments are slightly brighter than folds, to make 'headers' easier to see. -call s:HL('Comment', 'gravel') -call s:HL('Todo', 'snow', 'bg', 'bold') -call s:HL('SpecialComment', 'snow', 'bg', 'bold') - -" Strings are a nice, pale straw color. Nothing too fancy. -call s:HL('String', 'dirtyblonde') - -" Control flow stuff is taffy. -call s:HL('Statement', 'taffy', '', 'bold') -call s:HL('Keyword', 'taffy', '', 'bold') -call s:HL('Conditional', 'taffy', '', 'bold') -call s:HL('Operator', 'taffy', '', 'none') -call s:HL('Label', 'taffy', '', 'none') -call s:HL('Repeat', 'taffy', '', 'none') - -" Functions and variable declarations are orange, because plain looks weird. -call s:HL('Identifier', 'orange', '', 'none') -call s:HL('Function', 'orange', '', 'none') - -" Preprocessor stuff is lime, to make it pop. -" -" This includes imports in any given language, because they should usually be -" grouped together at the beginning of a file. If they're in the middle of some -" other code they should stand out, because something tricky is -" probably going on. -call s:HL('PreProc', 'lime', '', 'none') -call s:HL('Macro', 'lime', '', 'none') -call s:HL('Define', 'lime', '', 'none') -call s:HL('PreCondit', 'lime', '', 'bold') - -" Constants of all kinds are colored together. -" I'm not really happy with the color yet... -call s:HL('Constant', 'toffee', '', 'bold') -call s:HL('Character', 'toffee', '', 'bold') -call s:HL('Boolean', 'toffee', '', 'bold') - -call s:HL('Number', 'toffee', '', 'bold') -call s:HL('Float', 'toffee', '', 'bold') - -" Not sure what 'special character in a constant' means, but let's make it pop. -call s:HL('SpecialChar', 'dress', '', 'bold') - -call s:HL('Type', 'dress', '', 'none') -call s:HL('StorageClass', 'taffy', '', 'none') -call s:HL('Structure', 'taffy', '', 'none') -call s:HL('Typedef', 'taffy', '', 'bold') - -" Make try/catch blocks stand out. -call s:HL('Exception', 'lime', '', 'bold') - -" Misc -call s:HL('Error', 'snow', 'taffy', 'bold') -call s:HL('Debug', 'snow', '', 'bold') -call s:HL('Ignore', 'gravel', '', '') - -" }}} -" Completion Menu {{{ - -call s:HL('Pmenu', 'plain', 'deepergravel') -call s:HL('PmenuSel', 'coal', 'tardis', 'bold') -call s:HL('PmenuSbar', '', 'deepergravel') -call s:HL('PmenuThumb', 'brightgravel') - -" }}} -" Diffs {{{ - -call s:HL('DiffDelete', 'coal', 'coal') -call s:HL('DiffAdd', '', 'deepergravel') -call s:HL('DiffChange', '', 'darkgravel') -call s:HL('DiffText', 'snow', 'deepergravel', 'bold') - -" }}} -" Spelling {{{ - -if has("spell") - call s:HL('SpellCap', 'dalespale', 'bg', 'undercurl,bold', 'dalespale') - call s:HL('SpellBad', '', 'bg', 'undercurl', 'dalespale') - call s:HL('SpellLocal', '', '', 'undercurl', 'dalespale') - call s:HL('SpellRare', '', '', 'undercurl', 'dalespale') -endif - -" }}} - -" }}} -" Plugins {{{ - -" CtrlP {{{ - - " the message when no match is found - call s:HL('CtrlPNoEntries', 'snow', 'taffy', 'bold') - - " the matched pattern - call s:HL('CtrlPMatch', 'orange', 'bg', 'none') - - " the line prefix '>' in the match window - call s:HL('CtrlPLinePre', 'deepgravel', 'bg', 'none') - - " the prompt’s base - call s:HL('CtrlPPrtBase', 'deepgravel', 'bg', 'none') - - " the prompt’s text - call s:HL('CtrlPPrtText', 'plain', 'bg', 'none') - - " the prompt’s cursor when moving over the text - call s:HL('CtrlPPrtCursor', 'coal', 'tardis', 'bold') - - " 'prt' or 'win', also for 'regex' - call s:HL('CtrlPMode1', 'coal', 'tardis', 'bold') - - " 'file' or 'path', also for the local working dir - call s:HL('CtrlPMode2', 'coal', 'tardis', 'bold') - - " the scanning status - call s:HL('CtrlPStats', 'coal', 'tardis', 'bold') - - " TODO: CtrlP extensions. - " CtrlPTabExtra : the part of each line that’s not matched against (Comment) - " CtrlPqfLineCol : the line and column numbers in quickfix mode (|s:HL-Search|) - " CtrlPUndoT : the elapsed time in undo mode (|s:HL-Directory|) - " CtrlPUndoBr : the square brackets [] in undo mode (Comment) - " CtrlPUndoNr : the undo number inside [] in undo mode (String) - -" }}} -" EasyMotion {{{ - -call s:HL('EasyMotionTarget', 'tardis', 'bg', 'bold') -call s:HL('EasyMotionShade', 'deepgravel', 'bg') - -" }}} -" Interesting Words {{{ - -" These are only used if you're me or have copied the hNUM mappings -" from my Vimrc. -call s:HL('InterestingWord1', 'coal', 'orange') -call s:HL('InterestingWord2', 'coal', 'lime') -call s:HL('InterestingWord3', 'coal', 'saltwatertaffy') -call s:HL('InterestingWord4', 'coal', 'toffee') -call s:HL('InterestingWord5', 'coal', 'dress') -call s:HL('InterestingWord6', 'coal', 'taffy') - - -" }}} -" Makegreen {{{ - -" hi GreenBar term=reverse ctermfg=white ctermbg=green guifg=coal guibg=#9edf1c -" hi RedBar term=reverse ctermfg=white ctermbg=red guifg=white guibg=#C50048 - -" }}} -" Rainbow Parentheses {{{ - -call s:HL('level16c', 'mediumgravel', '', 'bold') -call s:HL('level15c', 'dalespale', '', '') -call s:HL('level14c', 'dress', '', '') -call s:HL('level13c', 'orange', '', '') -call s:HL('level12c', 'tardis', '', '') -call s:HL('level11c', 'lime', '', '') -call s:HL('level10c', 'toffee', '', '') -call s:HL('level9c', 'saltwatertaffy', '', '') -call s:HL('level8c', 'coffee', '', '') -call s:HL('level7c', 'dalespale', '', '') -call s:HL('level6c', 'dress', '', '') -call s:HL('level5c', 'orange', '', '') -call s:HL('level4c', 'tardis', '', '') -call s:HL('level3c', 'lime', '', '') -call s:HL('level2c', 'toffee', '', '') -call s:HL('level1c', 'saltwatertaffy', '', '') - -" }}} -" ShowMarks {{{ - -call s:HL('ShowMarksHLl', 'tardis', 'blackgravel') -call s:HL('ShowMarksHLu', 'tardis', 'blackgravel') -call s:HL('ShowMarksHLo', 'tardis', 'blackgravel') -call s:HL('ShowMarksHLm', 'tardis', 'blackgravel') - -" }}} - -" }}} -" Filetype-specific {{{ - -" Clojure {{{ - -call s:HL('clojureSpecial', 'taffy', '', '') -call s:HL('clojureDefn', 'taffy', '', '') -call s:HL('clojureDefMacro', 'taffy', '', '') -call s:HL('clojureDefine', 'taffy', '', '') -call s:HL('clojureMacro', 'taffy', '', '') -call s:HL('clojureCond', 'taffy', '', '') - -call s:HL('clojureKeyword', 'orange', '', 'none') - -call s:HL('clojureFunc', 'dress', '', 'none') -call s:HL('clojureRepeat', 'dress', '', 'none') - -call s:HL('clojureParen0', 'lightgravel', '', 'none') - -call s:HL('clojureAnonArg', 'snow', '', 'bold') - -" }}} -" Common Lisp {{{ - -call s:HL('lispFunc', 'lime', '', 'none') -call s:HL('lispVar', 'orange', '', 'bold') -call s:HL('lispEscapeSpecial', 'orange', '', 'none') - -" }}} -" CSS {{{ - -if g:badwolf_css_props_highlight - call s:HL('cssColorProp', 'taffy', '', 'none') - call s:HL('cssBoxProp', 'taffy', '', 'none') - call s:HL('cssTextProp', 'taffy', '', 'none') - call s:HL('cssRenderProp', 'taffy', '', 'none') - call s:HL('cssGeneratedContentProp', 'taffy', '', 'none') -else - call s:HL('cssColorProp', 'fg', '', 'none') - call s:HL('cssBoxProp', 'fg', '', 'none') - call s:HL('cssTextProp', 'fg', '', 'none') - call s:HL('cssRenderProp', 'fg', '', 'none') - call s:HL('cssGeneratedContentProp', 'fg', '', 'none') -end - -call s:HL('cssValueLength', 'toffee', '', 'bold') -call s:HL('cssColor', 'toffee', '', 'bold') -call s:HL('cssBraces', 'lightgravel', '', 'none') -call s:HL('cssIdentifier', 'orange', '', 'bold') -call s:HL('cssClassName', 'orange', '', 'none') - -" }}} -" Diff {{{ - -call s:HL('gitDiff', 'lightgravel', '',) - -call s:HL('diffRemoved', 'dress', '',) -call s:HL('diffAdded', 'lime', '',) -call s:HL('diffFile', 'coal', 'taffy', 'bold') -call s:HL('diffNewFile', 'coal', 'taffy', 'bold') - -call s:HL('diffLine', 'coal', 'orange', 'bold') -call s:HL('diffSubname', 'orange', '', 'none') - -" }}} -" Django Templates {{{ - -call s:HL('djangoArgument', 'dirtyblonde', '',) -call s:HL('djangoTagBlock', 'orange', '') -call s:HL('djangoVarBlock', 'orange', '') -" hi djangoStatement guifg=#ff3853 gui=bold -" hi djangoVarBlock guifg=#f4cf86 - -" }}} -" HTML {{{ - -" Punctuation -call s:HL('htmlTag', 'darkroast', 'bg', 'none') -call s:HL('htmlEndTag', 'darkroast', 'bg', 'none') - -" Tag names -call s:HL('htmlTagName', 'coffee', '', 'bold') -call s:HL('htmlSpecialTagName', 'coffee', '', 'bold') -call s:HL('htmlSpecialChar', 'lime', '', 'none') - -" Attributes -call s:HL('htmlArg', 'coffee', '', 'none') - -" Stuff inside an tag - -if g:badwolf_html_link_underline - call s:HL('htmlLink', 'lightgravel', '', 'underline') -else - call s:HL('htmlLink', 'lightgravel', '', 'none') -endif - -" }}} -" Java {{{ - -call s:HL('javaClassDecl', 'taffy', '', 'bold') -call s:HL('javaScopeDecl', 'taffy', '', 'bold') -call s:HL('javaCommentTitle', 'gravel', '') -call s:HL('javaDocTags', 'snow', '', 'none') -call s:HL('javaDocParam', 'dalespale', '', '') - -" }}} -" LaTeX {{{ - -call s:HL('texStatement', 'tardis', '', 'none') -call s:HL('texMathZoneX', 'orange', '', 'none') -call s:HL('texMathZoneA', 'orange', '', 'none') -call s:HL('texMathZoneB', 'orange', '', 'none') -call s:HL('texMathZoneC', 'orange', '', 'none') -call s:HL('texMathZoneD', 'orange', '', 'none') -call s:HL('texMathZoneE', 'orange', '', 'none') -call s:HL('texMathZoneV', 'orange', '', 'none') -call s:HL('texMathZoneX', 'orange', '', 'none') -call s:HL('texMath', 'orange', '', 'none') -call s:HL('texMathMatcher', 'orange', '', 'none') -call s:HL('texRefLabel', 'dirtyblonde', '', 'none') -call s:HL('texRefZone', 'lime', '', 'none') -call s:HL('texComment', 'darkroast', '', 'none') -call s:HL('texDelimiter', 'orange', '', 'none') -call s:HL('texZone', 'brightgravel', '', 'none') - -augroup badwolf_tex - au! - - au BufRead,BufNewFile *.tex syn region texMathZoneV start="\\(" end="\\)\|%stopzone\>" keepend contains=@texMathZoneGroup - au BufRead,BufNewFile *.tex syn region texMathZoneX start="\$" skip="\\\\\|\\\$" end="\$\|%stopzone\>" keepend contains=@texMathZoneGroup -augroup END - -" }}} -" LessCSS {{{ - -call s:HL('lessVariable', 'lime', '', 'none') - -" }}} -" Lispyscript {{{ - -call s:HL('lispyscriptDefMacro', 'lime', '', '') -call s:HL('lispyscriptRepeat', 'dress', '', 'none') - -" }}} -" REPLs {{{ -" This isn't a specific plugin, but just useful highlight classes for anything -" that might want to use them. - -call s:HL('replPrompt', 'tardis', '', 'bold') - -" }}} -" Mail {{{ - -call s:HL('mailSubject', 'orange', '', 'bold') -call s:HL('mailHeader', 'lightgravel', '', '') -call s:HL('mailHeaderKey', 'lightgravel', '', '') -call s:HL('mailHeaderEmail', 'snow', '', '') -call s:HL('mailURL', 'toffee', '', 'underline') -call s:HL('mailSignature', 'gravel', '', 'none') - -call s:HL('mailQuoted1', 'gravel', '', 'none') -call s:HL('mailQuoted2', 'dress', '', 'none') -call s:HL('mailQuoted3', 'dirtyblonde', '', 'none') -call s:HL('mailQuoted4', 'orange', '', 'none') -call s:HL('mailQuoted5', 'lime', '', 'none') - -" }}} -" Markdown {{{ - -call s:HL('markdownHeadingRule', 'lightgravel', '', 'bold') -call s:HL('markdownHeadingDelimiter', 'lightgravel', '', 'bold') -call s:HL('markdownOrderedListMarker', 'lightgravel', '', 'bold') -call s:HL('markdownListMarker', 'lightgravel', '', 'bold') -call s:HL('markdownItalic', 'snow', '', 'bold') -call s:HL('markdownBold', 'snow', '', 'bold') -call s:HL('markdownH1', 'orange', '', 'bold') -call s:HL('markdownH2', 'lime', '', 'bold') -call s:HL('markdownH3', 'lime', '', 'none') -call s:HL('markdownH4', 'lime', '', 'none') -call s:HL('markdownH5', 'lime', '', 'none') -call s:HL('markdownH6', 'lime', '', 'none') -call s:HL('markdownLinkText', 'toffee', '', 'underline') -call s:HL('markdownIdDeclaration', 'toffee') -call s:HL('markdownAutomaticLink', 'toffee', '', 'bold') -call s:HL('markdownUrl', 'toffee', '', 'bold') -call s:HL('markdownUrldelimiter', 'lightgravel', '', 'bold') -call s:HL('markdownLinkDelimiter', 'lightgravel', '', 'bold') -call s:HL('markdownLinkTextDelimiter', 'lightgravel', '', 'bold') -call s:HL('markdownCodeDelimiter', 'dirtyblonde', '', 'bold') -call s:HL('markdownCode', 'dirtyblonde', '', 'none') -call s:HL('markdownCodeBlock', 'dirtyblonde', '', 'none') - -" }}} -" MySQL {{{ - -call s:HL('mysqlSpecial', 'dress', '', 'bold') - -" }}} -" Python {{{ - -hi def link pythonOperator Operator -call s:HL('pythonBuiltin', 'dress') -call s:HL('pythonBuiltinObj', 'dress') -call s:HL('pythonBuiltinFunc', 'dress') -call s:HL('pythonEscape', 'dress') -call s:HL('pythonException', 'lime', '', 'bold') -call s:HL('pythonExceptions', 'lime', '', 'none') -call s:HL('pythonPrecondit', 'lime', '', 'none') -call s:HL('pythonDecorator', 'taffy', '', 'none') -call s:HL('pythonRun', 'gravel', '', 'bold') -call s:HL('pythonCoding', 'gravel', '', 'bold') - -" }}} -" SLIMV {{{ - -" Rainbow parentheses -call s:HL('hlLevel0', 'gravel') -call s:HL('hlLevel1', 'orange') -call s:HL('hlLevel2', 'saltwatertaffy') -call s:HL('hlLevel3', 'dress') -call s:HL('hlLevel4', 'coffee') -call s:HL('hlLevel5', 'dirtyblonde') -call s:HL('hlLevel6', 'orange') -call s:HL('hlLevel7', 'saltwatertaffy') -call s:HL('hlLevel8', 'dress') -call s:HL('hlLevel9', 'coffee') - -" }}} -" Vim {{{ - -call s:HL('VimCommentTitle', 'lightgravel', '', 'bold') - -call s:HL('VimMapMod', 'dress', '', 'none') -call s:HL('VimMapModKey', 'dress', '', 'none') -call s:HL('VimNotation', 'dress', '', 'none') -call s:HL('VimBracket', 'dress', '', 'none') - -" }}} - -" }}} - diff --git a/dotfiles/.config/nvim/colors/jellybeans.vim b/dotfiles/.config/nvim/colors/jellybeans.vim deleted file mode 100644 index fd8e132..0000000 --- a/dotfiles/.config/nvim/colors/jellybeans.vim +++ /dev/null @@ -1,672 +0,0 @@ - -set background=dark - -hi clear - -if exists("syntax_on") - syntax reset -endif - -let colors_name = "jellybeans" - -if has("gui_running") || (has('termguicolors') && &termguicolors) - let s:true_color = 1 -else - let s:true_color = 0 -endif - -if s:true_color || &t_Co >= 88 - let s:low_color = 0 -else - let s:low_color = 1 -endif - -" Configuration Variables: -" - g:jellybeans_overrides (default = {}) -" - g:jellybeans_use_lowcolor_black (default = 0) -" - g:jellybeans_use_gui_italics (default = 1) -" - g:jellybeans_use_term_italics (default = 0) - -let s:background_color = "000" - -if exists("g:jellybeans_overrides") - let s:overrides = g:jellybeans_overrides -else - let s:overrides = {} -endif - -" Backwards compatibility -if exists("g:jellybeans_background_color") - \ || exists("g:jellybeans_background_color_256") - \ || exists("g:jellybeans_use_term_background_color") - - let s:overrides = deepcopy(s:overrides) - - if !has_key(s:overrides, "background") - let s:overrides["background"] = {} - endif - - if exists("g:jellybeans_background_color") - let s:overrides["background"]["guibg"] = g:jellybeans_background_color - endif - - if exists("g:jellybeans_background_color_256") - let s:overrides["background"]["256ctermbg"] = g:jellybeans_background_color_256 - endif - - if exists("g:jellybeans_use_term_background_color") - \ && g:jellybeans_use_term_background_color - let s:overrides["background"]["ctermbg"] = "NONE" - let s:overrides["background"]["256ctermbg"] = "NONE" - endif -endif - -if exists("g:jellybeans_use_lowcolor_black") && g:jellybeans_use_lowcolor_black - let s:termBlack = "Black" -else - let s:termBlack = "Grey" -endif - -" When `termguicolors` is set, Vim[^1] ignores `hi Normal guibg=NONE` -" after Normal's `guibg` is already set to a color. See: -" -" - https://github.com/vim/vim/issues/981 -" - https://github.com/nanotech/jellybeans.vim/issues/64 -" -" To work around this, ensure we don't set the default background -" color before an override changes it to `NONE` by ensuring that the -" background color isn't set to a value different from its override. -" -" [^1]: Tested on 8.0.567. Does not apply to Neovim. -" -if has_key(s:overrides, "background") && has_key(s:overrides["background"], "guibg") - let s:background_color = s:overrides["background"]["guibg"] -endif - -" Color approximation functions by Henry So, Jr. and David Liang {{{ -" Added to jellybeans.vim by Daniel Herbert - -if &t_Co == 88 - - " returns an approximate grey index for the given grey level - fun! s:grey_number(x) - if a:x < 23 - return 0 - elseif a:x < 69 - return 1 - elseif a:x < 103 - return 2 - elseif a:x < 127 - return 3 - elseif a:x < 150 - return 4 - elseif a:x < 173 - return 5 - elseif a:x < 196 - return 6 - elseif a:x < 219 - return 7 - elseif a:x < 243 - return 8 - else - return 9 - endif - endfun - - " returns the actual grey level represented by the grey index - fun! s:grey_level(n) - if a:n == 0 - return 0 - elseif a:n == 1 - return 46 - elseif a:n == 2 - return 92 - elseif a:n == 3 - return 115 - elseif a:n == 4 - return 139 - elseif a:n == 5 - return 162 - elseif a:n == 6 - return 185 - elseif a:n == 7 - return 208 - elseif a:n == 8 - return 231 - else - return 255 - endif - endfun - - " returns the palette index for the given grey index - fun! s:grey_color(n) - if a:n == 0 - return 16 - elseif a:n == 9 - return 79 - else - return 79 + a:n - endif - endfun - - " returns an approximate color index for the given color level - fun! s:rgb_number(x) - if a:x < 69 - return 0 - elseif a:x < 172 - return 1 - elseif a:x < 230 - return 2 - else - return 3 - endif - endfun - - " returns the actual color level for the given color index - fun! s:rgb_level(n) - if a:n == 0 - return 0 - elseif a:n == 1 - return 139 - elseif a:n == 2 - return 205 - else - return 255 - endif - endfun - - " returns the palette index for the given R/G/B color indices - fun! s:rgb_color(x, y, z) - return 16 + (a:x * 16) + (a:y * 4) + a:z - endfun - -else " assuming &t_Co == 256 - - " returns an approximate grey index for the given grey level - fun! s:grey_number(x) - if a:x < 14 - return 0 - else - let l:n = (a:x - 8) / 10 - let l:m = (a:x - 8) % 10 - if l:m < 5 - return l:n - else - return l:n + 1 - endif - endif - endfun - - " returns the actual grey level represented by the grey index - fun! s:grey_level(n) - if a:n == 0 - return 0 - else - return 8 + (a:n * 10) - endif - endfun - - " returns the palette index for the given grey index - fun! s:grey_color(n) - if a:n == 0 - return 16 - elseif a:n == 25 - return 231 - else - return 231 + a:n - endif - endfun - - " returns an approximate color index for the given color level - fun! s:rgb_number(x) - if a:x < 75 - return 0 - else - let l:n = (a:x - 55) / 40 - let l:m = (a:x - 55) % 40 - if l:m < 20 - return l:n - else - return l:n + 1 - endif - endif - endfun - - " returns the actual color level for the given color index - fun! s:rgb_level(n) - if a:n == 0 - return 0 - else - return 55 + (a:n * 40) - endif - endfun - - " returns the palette index for the given R/G/B color indices - fun! s:rgb_color(x, y, z) - return 16 + (a:x * 36) + (a:y * 6) + a:z - endfun - -endif - -" returns the palette index to approximate the given R/G/B color levels -fun! s:color(r, g, b) - " map greys directly (see xterm's 256colres.pl) - if &t_Co == 256 && a:r == a:g && a:g == a:b && a:r > 3 && a:r < 243 - return (a:r - 8) / 10 + 232 - endif - - " get the closest grey - let l:gx = s:grey_number(a:r) - let l:gy = s:grey_number(a:g) - let l:gz = s:grey_number(a:b) - - " get the closest color - let l:x = s:rgb_number(a:r) - let l:y = s:rgb_number(a:g) - let l:z = s:rgb_number(a:b) - - if l:gx == l:gy && l:gy == l:gz - " there are two possibilities - let l:dgr = s:grey_level(l:gx) - a:r - let l:dgg = s:grey_level(l:gy) - a:g - let l:dgb = s:grey_level(l:gz) - a:b - let l:dgrey = (l:dgr * l:dgr) + (l:dgg * l:dgg) + (l:dgb * l:dgb) - let l:dr = s:rgb_level(l:gx) - a:r - let l:dg = s:rgb_level(l:gy) - a:g - let l:db = s:rgb_level(l:gz) - a:b - let l:drgb = (l:dr * l:dr) + (l:dg * l:dg) + (l:db * l:db) - if l:dgrey < l:drgb - " use the grey - return s:grey_color(l:gx) - else - " use the color - return s:rgb_color(l:x, l:y, l:z) - endif - else - " only one possibility - return s:rgb_color(l:x, l:y, l:z) - endif -endfun - -fun! s:is_empty_or_none(str) - return empty(a:str) || a:str ==? "NONE" -endfun - -" returns the palette index to approximate the 'rrggbb' hex string -fun! s:rgb(rgb) - if s:is_empty_or_none(a:rgb) - return "NONE" - endif - let l:r = ("0x" . strpart(a:rgb, 0, 2)) + 0 - let l:g = ("0x" . strpart(a:rgb, 2, 2)) + 0 - let l:b = ("0x" . strpart(a:rgb, 4, 2)) + 0 - return s:color(l:r, l:g, l:b) -endfun - -fun! s:prefix_highlight_value_with(prefix, color) - if s:is_empty_or_none(a:color) - return "NONE" - else - return a:prefix . a:color - endif -endfun - -fun! s:remove_italic_attr(attr) - let l:attr = join(filter(split(a:attr, ","), "v:val !=? 'italic'"), ",") - if empty(l:attr) - let l:attr = "NONE" - endif - return l:attr -endfun - -" sets the highlighting for the given group -fun! s:X(group, fg, bg, attr, lcfg, lcbg) - if s:low_color - let l:cmd = "hi ".a:group. - \ " ctermfg=".s:prefix_highlight_value_with("", a:lcfg). - \ " ctermbg=".s:prefix_highlight_value_with("", a:lcbg) - else - let l:cmd = "hi ".a:group. - \ " guifg=".s:prefix_highlight_value_with("#", a:fg). - \ " guibg=".s:prefix_highlight_value_with("#", a:bg) - if !s:true_color - let l:cmd = l:cmd. - \ " ctermfg=".s:rgb(a:fg). - \ " ctermbg=".s:rgb(a:bg) - endif - endif - - let l:attr = s:prefix_highlight_value_with("", a:attr) - - if exists("g:jellybeans_use_term_italics") && g:jellybeans_use_term_italics - let l:cterm_attr = l:attr - else - let l:cterm_attr = s:remove_italic_attr(l:attr) - endif - - if !exists("g:jellybeans_use_gui_italics") || g:jellybeans_use_gui_italics - let l:gui_attr = l:attr - else - let l:gui_attr = s:remove_italic_attr(l:attr) - endif - - let l:cmd = l:cmd." gui=".l:gui_attr." cterm=".l:cterm_attr - exec l:cmd -endfun -" }}} - -call s:X("Normal","e8e8d3",s:background_color,"","White","") -set background=dark - -call s:X("CursorLine","","1c1c1c","","",s:termBlack) -call s:X("CursorColumn","","1c1c1c","","",s:termBlack) - -" Some of Terminal.app's default themes have a cursor color -" too close to Jellybeans' preferred MatchParen background -" color to be easily distinguishable. Other terminals tend -" to use a brighter cursor color. -" -" Use a more distinct color in Terminal.app, and also in -" low-color terminals if the preferred background color is -" not available. -if !has('gui_running') && $TERM_PROGRAM == "Apple_Terminal" - let s:matchParenGuiFg = "dd0093" - let s:matchParenGuiBg = "000000" -else - let s:matchParenGuiFg = "ffffff" - let s:matchParenGuiBg = "556779" -endif -if s:termBlack != "Black" - let s:matchParenTermFg = "Magenta" - let s:matchParenTermBg = "" -else - let s:matchParenTermFg = "" - let s:matchParenTermBg = s:termBlack -endif -call s:X("MatchParen",s:matchParenGuiFg,s:matchParenGuiBg,"bold", -\ s:matchParenTermFg,s:matchParenTermBg) - -call s:X("TabLine","000000","b0b8c0","italic","",s:termBlack) -call s:X("TabLineFill","9098a0","","","",s:termBlack) -call s:X("TabLineSel","000000","f0f0f0","italic,bold",s:termBlack,"White") - -" Auto-completion -call s:X("Pmenu","ffffff","606060","","White",s:termBlack) -call s:X("PmenuSel","101010","eeeeee","",s:termBlack,"White") - -call s:X("Visual","","404040","","",s:termBlack) -call s:X("Cursor",s:background_color,"b0d0f0","","","") - -call s:X("LineNr","605958",s:background_color,"NONE",s:termBlack,"") -call s:X("CursorLineNr","ccc5c4","","NONE","White","") -call s:X("Comment","888888","","italic","Grey","") -call s:X("Todo","c7c7c7","","bold","White",s:termBlack) - -call s:X("StatusLine","000000","dddddd","italic","","White") -call s:X("StatusLineNC","ffffff","403c41","italic","White","Black") -call s:X("VertSplit","777777","403c41","",s:termBlack,s:termBlack) -call s:X("WildMenu","f0a0c0","302028","","Magenta","") - -call s:X("Folded","a0a8b0","384048","italic",s:termBlack,"") -call s:X("FoldColumn","535D66","1f1f1f","","",s:termBlack) -call s:X("SignColumn","777777","333333","","",s:termBlack) -call s:X("ColorColumn","","000000","","",s:termBlack) - -call s:X("Title","70b950","","bold","Green","") - -call s:X("Constant","cf6a4c","","","Red","") -call s:X("Special","799d6a","","","Green","") -call s:X("Delimiter","668799","","","Grey","") - -call s:X("String","99ad6a","","","Green","") -call s:X("StringDelimiter","556633","","","DarkGreen","") - -call s:X("Identifier","c6b6ee","","","LightCyan","") -call s:X("Structure","8fbfdc","","","LightCyan","") -call s:X("Function","fad07a","","","Yellow","") -call s:X("Statement","8197bf","","","DarkBlue","") -call s:X("PreProc","8fbfdc","","","LightBlue","") - -hi! link Operator Structure -hi! link Conceal Operator - -call s:X("Type","ffb964","","","Yellow","") -call s:X("NonText","606060",s:background_color,"",s:termBlack,"") - -call s:X("SpecialKey","444444","1c1c1c","",s:termBlack,"") - -call s:X("Search","f0a0c0","302028","underline","Magenta","") - -call s:X("Directory","dad085","","","Yellow","") -call s:X("ErrorMsg","","902020","","","DarkRed") -hi! link Error ErrorMsg -hi! link MoreMsg Special -call s:X("Question","65C254","","","Green","") - - -" Spell Checking - -call s:X("SpellBad","","902020","underline","","DarkRed") -call s:X("SpellCap","","0000df","underline","","Blue") -call s:X("SpellRare","","540063","underline","","DarkMagenta") -call s:X("SpellLocal","","2D7067","underline","","Green") - -" Diff - -hi! link diffRemoved Constant -hi! link diffAdded String - -" VimDiff - -call s:X("DiffAdd","D2EBBE","437019","","White","DarkGreen") -call s:X("DiffDelete","40000A","700009","","DarkRed","DarkRed") -call s:X("DiffChange","","2B5B77","","White","DarkBlue") -call s:X("DiffText","8fbfdc","000000","reverse","Yellow","") - -" PHP - -hi! link phpFunctions Function -call s:X("StorageClass","c59f6f","","","Red","") -hi! link phpSuperglobal Identifier -hi! link phpQuoteSingle StringDelimiter -hi! link phpQuoteDouble StringDelimiter -hi! link phpBoolean Constant -hi! link phpNull Constant -hi! link phpArrayPair Operator -hi! link phpOperator Normal -hi! link phpRelation Normal -hi! link phpVarSelector Identifier - -" Python - -hi! link pythonOperator Statement - -" Ruby - -hi! link rubySharpBang Comment -call s:X("rubyClass","447799","","","DarkBlue","") -call s:X("rubyIdentifier","c6b6fe","","","Cyan","") -hi! link rubyConstant Type -hi! link rubyFunction Function - -call s:X("rubyInstanceVariable","c6b6fe","","","Cyan","") -call s:X("rubySymbol","7697d6","","","Blue","") -hi! link rubyGlobalVariable rubyInstanceVariable -hi! link rubyModule rubyClass -call s:X("rubyControl","7597c6","","","Blue","") - -hi! link rubyString String -hi! link rubyStringDelimiter StringDelimiter -hi! link rubyInterpolationDelimiter Identifier - -call s:X("rubyRegexpDelimiter","540063","","","Magenta","") -call s:X("rubyRegexp","dd0093","","","DarkMagenta","") -call s:X("rubyRegexpSpecial","a40073","","","Magenta","") - -call s:X("rubyPredefinedIdentifier","de5577","","","Red","") - -" Erlang - -hi! link erlangAtom rubySymbol -hi! link erlangBIF rubyPredefinedIdentifier -hi! link erlangFunction rubyPredefinedIdentifier -hi! link erlangDirective Statement -hi! link erlangNode Identifier - -" Elixir - -hi! link elixirAtom rubySymbol - - -" JavaScript - -hi! link javaScriptValue Constant -hi! link javaScriptRegexpString rubyRegexp -hi! link javaScriptTemplateVar StringDelim -hi! link javaScriptTemplateDelim Identifier -hi! link javaScriptTemplateString String - -" CoffeeScript - -hi! link coffeeRegExp javaScriptRegexpString - -" Lua - -hi! link luaOperator Conditional - -" C - -hi! link cFormat Identifier -hi! link cOperator Constant - -" Objective-C/Cocoa - -hi! link objcClass Type -hi! link cocoaClass objcClass -hi! link objcSubclass objcClass -hi! link objcSuperclass objcClass -hi! link objcDirective rubyClass -hi! link objcStatement Constant -hi! link cocoaFunction Function -hi! link objcMethodName Identifier -hi! link objcMethodArg Normal -hi! link objcMessageName Identifier - -" Vimscript - -hi! link vimOper Normal - -" HTML - -hi! link htmlTag Statement -hi! link htmlEndTag htmlTag -hi! link htmlTagName htmlTag - -" XML - -hi! link xmlTag Statement -hi! link xmlEndTag xmlTag -hi! link xmlTagName xmlTag -hi! link xmlEqual xmlTag -hi! link xmlEntity Special -hi! link xmlEntityPunct xmlEntity -hi! link xmlDocTypeDecl PreProc -hi! link xmlDocTypeKeyword PreProc -hi! link xmlProcessingDelim xmlAttrib - -" Debugger.vim - -call s:X("DbgCurrent","DEEBFE","345FA8","","White","DarkBlue") -call s:X("DbgBreakPt","","4F0037","","","DarkMagenta") - -" vim-indent-guides - -if !exists("g:indent_guides_auto_colors") - let g:indent_guides_auto_colors = 0 -endif -call s:X("IndentGuidesOdd","","232323","","","") -call s:X("IndentGuidesEven","","1b1b1b","","","") - -" Plugins, etc. - -hi! link TagListFileName Directory -call s:X("PreciseJumpTarget","B9ED67","405026","","White","Green") - -" Manual overrides for 256-color terminals. Dark colors auto-map badly. -if !s:low_color - hi StatusLineNC ctermbg=235 - hi Folded ctermbg=236 - hi DiffText ctermfg=81 - hi DbgBreakPt ctermbg=53 - hi IndentGuidesOdd ctermbg=235 - hi IndentGuidesEven ctermbg=234 -endif - -if !empty("s:overrides") - fun! s:current_attr(group) - let l:synid = synIDtrans(hlID(a:group)) - let l:attrs = [] - for l:attr in ["bold", "italic", "reverse", "standout", "underline", "undercurl"] - if synIDattr(l:synid, l:attr, "gui") == 1 - call add(l:attrs, l:attr) - endif - endfor - return join(l:attrs, ",") - endfun - fun! s:current_color(group, what, mode) - let l:color = synIDattr(synIDtrans(hlID(a:group)), a:what, a:mode) - if l:color == -1 - return "" - else - return substitute(l:color, "^#", "", "") - endif - endfun - fun! s:load_color_def(group, def) - call s:X(a:group, get(a:def, "guifg", s:current_color(a:group, "fg", "gui")), - \ get(a:def, "guibg", s:current_color(a:group, "bg", "gui")), - \ get(a:def, "attr", s:current_attr(a:group)), - \ get(a:def, "ctermfg", s:current_color(a:group, "fg", "cterm")), - \ get(a:def, "ctermbg", s:current_color(a:group, "bg", "cterm"))) - if !s:low_color - for l:prop in ["ctermfg", "ctermbg"] - let l:override_key = "256".l:prop - if has_key(a:def, l:override_key) - exec "hi ".a:group." ".l:prop."=".a:def[l:override_key] - endif - endfor - endif - endfun - fun! s:load_colors(defs) - for [l:group, l:def] in items(a:defs) - if l:group == "background" - call s:load_color_def("LineNr", l:def) - call s:load_color_def("NonText", l:def) - call s:load_color_def("Normal", l:def) - else - call s:load_color_def(l:group, l:def) - endif - unlet l:group - unlet l:def - endfor - endfun - call s:load_colors(s:overrides) - delf s:load_colors - delf s:load_color_def - delf s:current_color - delf s:current_attr -endif - -" delete functions {{{ -delf s:X -delf s:remove_italic_attr -delf s:prefix_highlight_value_with -delf s:rgb -delf s:is_empty_or_none -delf s:color -delf s:rgb_color -delf s:rgb_level -delf s:rgb_number -delf s:grey_color -delf s:grey_level -delf s:grey_number -" }}} diff --git a/dotfiles/.config/nvim/colors/quantum.vim b/dotfiles/.config/nvim/colors/quantum.vim deleted file mode 100644 index edfb739..0000000 --- a/dotfiles/.config/nvim/colors/quantum.vim +++ /dev/null @@ -1,261 +0,0 @@ -" Quantum - A 24-bit Material color scheme for Vim -" Author: Brandon Siders -" License: MIT - -highlight clear - -if exists('syntax_on') - syntax reset -endif - -set background=dark -let g:colors_name = 'quantum' - -let g:quantum_italics = get(g:, 'quantum_italics', 0) -let g:quantum_black = get(g:, 'quantum_black', 0) - -" Color Palette -let s:gray1 = g:quantum_black ? '#000000' : '#000' -let s:gray2 = g:quantum_black ? '#292929' : '#2c3a41' -let s:gray3 = g:quantum_black ? '#474646' : '#425762' -let s:gray4 = g:quantum_black ? '#6a6c6c' : '#658494' -let s:gray5 = g:quantum_black ? '#b7bdc0' : '#aebbc5' -let s:red = '#dd7186' -let s:green = '#87bb7c' -let s:yellow = '#d5b875' -let s:blue = '#70ace5' -let s:purple = '#a48add' -let s:cyan = '#69c5ce' -let s:orange = '#d7956e' -let s:indigo = '#7681de' - -function! s:HL(group, fg, bg, attr) - let l:attr = a:attr - if !g:quantum_italics && l:attr ==# 'italic' - let l:attr = 'none' - endif - - if !empty(a:fg) - exec 'hi ' . a:group . ' guifg=' . a:fg - endif - if !empty(a:bg) - exec 'hi ' . a:group . ' guibg=' . a:bg - endif - if !empty(a:attr) - exec 'hi ' . a:group . ' gui=' . l:attr . ' cterm=' . l:attr - endif -endfun - -" Vim Editor -call s:HL('ColorColumn', '', s:gray2, '') -call s:HL('Cursor', s:gray2, s:gray5, '') -call s:HL('CursorColumn', '', s:gray2, '') -call s:HL('CursorLine', '', s:gray2, 'none') -call s:HL('CursorLineNr', s:cyan, s:gray2, 'none') -call s:HL('Directory', s:blue, '', '') -call s:HL('DiffAdd', s:green, s:gray2, 'none') -call s:HL('DiffChange', s:yellow, s:gray2, 'none') -call s:HL('DiffDelete', s:red, s:gray2, 'none') -call s:HL('DiffText', s:blue, s:gray2, 'none') -call s:HL('ErrorMsg', s:red, s:gray1, 'bold') -call s:HL('FoldColumn', s:gray4, s:gray1, '') -call s:HL('Folded', s:gray3, s:gray1, '') -call s:HL('IncSearch', s:gray1, 's:gray5', '') -call s:HL('LineNr', s:gray3, '', '') -call s:HL('MatchParen', s:gray4, s:cyan, 'bold') -call s:HL('ModeMsg', s:green, '', '') -call s:HL('MoreMsg', s:green, '', '') -call s:HL('NonText', s:gray4, '', 'none') -call s:HL('Normal', s:gray5, s:gray1, 'none') -call s:HL('Pmenu', s:gray5, s:gray3, '') -call s:HL('PmenuSbar', '', s:gray2, '') -call s:HL('PmenuSel', s:gray2, s:cyan, '') -call s:HL('PmenuThumb', '', s:gray4, '') -call s:HL('Question', s:blue, '', 'none') -call s:HL('Search', s:yellow, s:gray1, '') -call s:HL('SignColumn', s:gray5, s:gray1, '') -call s:HL('SpecialKey', s:gray4, '', '') -call s:HL('SpellCap', s:blue, s:gray2, 'undercurl') -call s:HL('SpellBad', s:red, s:gray2, 'undercurl') -call s:HL('StatusLine', s:gray5, s:gray3, 'none') -call s:HL('StatusLineNC', s:gray2, s:gray4, '') -call s:HL('TabLine', s:gray4, s:gray2, 'none') -call s:HL('TabLineFill', s:gray4, s:gray2, 'none') -call s:HL('TabLineSel', s:yellow, s:gray3, 'none') -call s:HL('Title', s:green, '', 'none') -call s:HL('VertSplit', s:gray4, s:gray1, 'none') -call s:HL('Visual', s:gray5, s:gray3, '') -call s:HL('WarningMsg', s:red, '', '') -call s:HL('WildMenu', s:gray2, s:cyan, '') - -" Standard Syntax -call s:HL('Comment', s:gray4, '', 'italic') -call s:HL('Constant', s:orange, '', '') -call s:HL('String', s:green, '', '') -call s:HL('Character', s:green, '', '') -call s:HL('Identifier', s:red, '', 'none') -call s:HL('Function', s:blue, '', '') -call s:HL('Statement', s:purple, '', 'none') -call s:HL('Operator', s:cyan, '', '') -call s:HL('PreProc', s:cyan, '', '') -call s:HL('Include', s:blue, '', '') -call s:HL('Define', s:purple, '', 'none') -call s:HL('Macro', s:purple, '', '') -call s:HL('Type', s:yellow, '', 'none') -call s:HL('Structure', s:cyan, '', '') -call s:HL('Special', s:indigo, '', '') -call s:HL('Underlined', s:blue, '', 'none') -call s:HL('Error', s:red, s:gray1, 'bold') -call s:HL('Todo', s:orange, s:gray1, 'bold') - -" CSS -call s:HL('cssAttrComma', s:gray5, '', '') -call s:HL('cssPseudoClassId', s:yellow, '', '') -call s:HL('cssBraces', s:gray5, '', '') -call s:HL('cssClassName', s:yellow, '', '') -call s:HL('cssClassNameDot', s:yellow, '', '') -call s:HL('cssFunctionName', s:blue, '', '') -call s:HL('cssImportant', s:cyan, '', '') -call s:HL('cssIncludeKeyword', s:purple, '', '') -call s:HL('cssTagName', s:red, '', '') -call s:HL('cssMediaType', s:orange, '', '') -call s:HL('cssProp', s:gray5, '', '') -call s:HL('cssSelectorOp', s:cyan, '', '') -call s:HL('cssSelectorOp2', s:cyan, '', '') - -" Commit Messages (Git) -call s:HL('gitcommitHeader', s:purple, '', '') -call s:HL('gitcommitUnmerged', s:green, '', '') -call s:HL('gitcommitSelectedFile', s:green, '', '') -call s:HL('gitcommitDiscardedFile', s:red, '', '') -call s:HL('gitcommitUnmergedFile', s:yellow, '', '') -call s:HL('gitcommitSelectedType', s:green, '', '') -call s:HL('gitcommitSummary', s:blue, '', '') -call s:HL('gitcommitDiscardedType', s:red, '', '') -hi link gitcommitNoBranch gitcommitBranch -hi link gitcommitUntracked gitcommitComment -hi link gitcommitDiscarded gitcommitComment -hi link gitcommitSelected gitcommitComment -hi link gitcommitDiscardedArrow gitcommitDiscardedFile -hi link gitcommitSelectedArrow gitcommitSelectedFile -hi link gitcommitUnmergedArrow gitcommitUnmergedFile - -" HTML -call s:HL('htmlEndTag', s:blue, '', '') -call s:HL('htmlLink', s:red, '', '') -call s:HL('htmlTag', s:blue, '', '') -call s:HL('htmlTitle', s:gray5, '', '') -call s:HL('htmlSpecialTagName', s:purple, '', '') - -" Javascript -call s:HL('javaScriptBraces', s:gray5, '', '') -call s:HL('javaScriptNull', s:orange, '', '') -call s:HL('javaScriptIdentifier', s:purple, '', '') -call s:HL('javaScriptNumber', s:orange, '', '') -call s:HL('javaScriptRequire', s:cyan, '', '') -call s:HL('javaScriptReserved', s:purple, '', '') -" pangloss/vim-javascript -call s:HL('jsArrowFunction', s:purple, '', '') -call s:HL('jsAsyncKeyword', s:purple, '', '') -call s:HL('jsExtendsKeyword', s:purple, '', '') -call s:HL('jsClassKeyword', s:purple, '', '') -call s:HL('jsDocParam', s:green, '', '') -call s:HL('jsDocTags', s:cyan, '', '') -call s:HL('jsForAwait', s:purple, '', '') -call s:HL('jsFlowArgumentDef', s:yellow, '', '') -call s:HL('jsFrom', s:purple, '', '') -call s:HL('jsImport', s:purple, '', '') -call s:HL('jsExport', s:purple, '', '') -call s:HL('jsExportDefault', s:purple, '', '') -call s:HL('jsFuncCall', s:blue, '', '') -call s:HL('jsFunction', s:purple, '', '') -call s:HL('jsGlobalObjects', s:yellow, '', '') -call s:HL('jsGlobalNodeObjects', s:yellow, '', '') -call s:HL('jsModuleAs', s:purple, '', '') -call s:HL('jsNull', s:orange, '', '') -call s:HL('jsStorageClass', s:purple, '', '') -call s:HL('jsTemplateBraces', s:red, '', '') -call s:HL('jsTemplateExpression', s:red, '', '') -call s:HL('jsThis', s:red, '', '') -call s:HL('jsUndefined', s:orange, '', '') - -" JSON -call s:HL('jsonBraces', s:gray5, '', '') - -" Less -call s:HL('lessAmpersand', s:red, '', '') -call s:HL('lessClassChar', s:yellow, '', '') -call s:HL('lessCssAttribute', s:gray5, '', '') -call s:HL('lessFunction', s:blue, '', '') -call s:HL('lessVariable', s:purple, '', '') - -" Markdown -call s:HL('markdownBold', s:yellow, '', 'bold') -call s:HL('markdownCode', s:cyan, '', '') -call s:HL('markdownCodeBlock', s:cyan, '', '') -call s:HL('markdownCodeDelimiter', s:cyan, '', '') -call s:HL('markdownHeadingDelimiter', s:green, '', '') -call s:HL('markdownHeadingRule', s:gray4, '', '') -call s:HL('markdownId', s:purple, '', '') -call s:HL('markdownItalic', s:blue, '', 'italic') -call s:HL('markdownListMarker', s:orange, '', '') -call s:HL('markdownOrderedListMarker', s:orange, '', '') -call s:HL('markdownRule', s:gray4, '', '') -call s:HL('markdownUrl', s:purple, '', '') -call s:HL('markdownUrlTitleDelimiter', s:green, '', '') - -" Ruby -call s:HL('rubyInterpolation', s:cyan, '', '') -call s:HL('rubyInterpolationDelimiter', s:indigo, '', '') -call s:HL('rubyRegexp', s:cyan, '', '') -call s:HL('rubyRegexpDelimiter', s:indigo, '', '') -call s:HL('rubyStringDelimiter', s:green, '', '') - -" Sass -call s:HL('sassAmpersand', s:red, '', '') -call s:HL('sassClassChar', s:yellow, '', '') -call s:HL('sassMixinName', s:blue, '', '') -call s:HL('sassVariable', s:purple, '', '') - -" Vim-Fugitive -call s:HL('diffAdded', s:green, '', '') -call s:HL('diffRemoved', s:red, '', '') - -" Vim-Gittgutter -call s:HL('GitGutterAdd', s:green, '', '') -call s:HL('GitGutterChange', s:yellow, '', '') -call s:HL('GitGutterChangeDelete', s:orange, '', '') -call s:HL('GitGutterDelete', s:red, '', '') - -" Vim-Signify -hi link SignifySignAdd GitGutterAdd -hi link SignifySignChange GitGutterChange -hi link SignifySignDelete GitGutterDelete - -" XML -call s:HL('xmlAttrib', s:yellow, '', '') -call s:HL('xmlEndTag', s:blue, '', '') -call s:HL('xmlTag', s:blue, '', '') -call s:HL('xmlTagName', s:blue, '', '') - -" Neovim terminal colors -if has('nvim') - let g:terminal_color_0 = s:gray1 - let g:terminal_color_1 = s:red - let g:terminal_color_2 = s:green - let g:terminal_color_3 = s:yellow - let g:terminal_color_4 = s:blue - let g:terminal_color_5 = s:purple - let g:terminal_color_6 = s:cyan - let g:terminal_color_7 = s:gray5 - let g:terminal_color_8 = s:gray3 - let g:terminal_color_9 = s:red - let g:terminal_color_10 = s:green - let g:terminal_color_11 = s:yellow - let g:terminal_color_12 = s:blue - let g:terminal_color_13 = s:purple - let g:terminal_color_14 = s:cyan - let g:terminal_color_15 = s:gray4 - let g:terminal_color_background = g:terminal_color_0 - let g:terminal_color_foreground = g:terminal_color_7 -endif diff --git a/dotfiles/.config/nvim/custom.vim b/dotfiles/.config/nvim/custom.vim deleted file mode 100644 index 0852b2e..0000000 --- a/dotfiles/.config/nvim/custom.vim +++ /dev/null @@ -1,216 +0,0 @@ - -" Goyo mappings -nmap :Goyo 60x60 - -" Enable the Vue Language server -let g:LanguageClient_serverCommands = { - \ 'vue': ['vls'] - \ } - -" init rainbow brackets -"set to 0 if you want to enable it later via :RainbowToggle -let g:rainbow_active = 0 - -" Emmet mappings -let g:user_emmet_mode='a' " enable all functions in all modes -let g:user_emmet_leader_key='' - -" Devicon Configurations -" loading the plugin -let g:webdevicons_enable = 1 - -" Indention Config -let g:indentLine_char = '┊' - - -" Lightline Themes Configurations -let g:lightline = { - \ 'colorscheme': 'simpleblack', - \ 'active': { - \ 'left': [ [ 'mode', 'paste' ], - \ [ 'cocstatus', 'readonly', 'filename', 'modified' ] ] - \ }, - \ 'component_function': { - \ 'cocstatus': 'coc#status' - \ }, - \ } - - -" Use auocmd to force lightline update. -autocmd User CocStatusChange,CocDiagnosticChange call lightline#update() - -" Fancy markdown syntax -let g:markdown_fenced_languages = ['css', 'js=javascript'] - -" +++++++++++++++++++++ vim-float-term configuration +++++++++++++++++++++++++ - -let g:floaterm_keymap_new = '.' -let g:floaterm_position = 'center' -let g:floaterm_type = 'normal' - -" custom mappings for my person tools in normal mode only -nnoremap :FloatermNew ipython -nnoremap :FloatermNew lf -nnoremap :FloatermNew sefr - -" +++++++++++++++++++++++++ Conquer of Completion +++++++++++++++++++++++++ - -" if hidden is not set, TextEdit might fail. -set hidden - -" Some servers have issues with backup files, see #649 -set nobackup -set nowritebackup - -" Better display for messages -set cmdheight=2 - -" You will have bad experience for diagnostic messages when it's default 4000. -set updatetime=300 - -" don't give |ins-completion-menu| messages. -set shortmess+=c - -" always show signcolumns -set signcolumn=yes - -" Use tab for trigger completion with characters ahead and navigate. -" Use command ':verbose imap ' to make sure tab is not mapped by other plugin. -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() -inoremap pumvisible() ? "\" : "\" - -function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Use to trigger completion. -inoremap coc#refresh() - -" Use to confirm completion, `u` means break undo chain at current position. -" Coc only does snippet and additional edit on confirm. -inoremap pumvisible() ? "\" : "\u\" -" Or use `complete_info` if your vim support it, like: -" inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" - -" Use `[g` and `]g` to navigate diagnostics -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) - -" Remap keys for gotos -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) - -" Use K to show documentation in preview window -"nnoremap K :call show_documentation() - -function! s:show_documentation() - if (index(['vim','help'], &filetype) >= 0) - execute 'h '.expand('') - else - call CocAction('doHover') - endif -endfunction - -" Highlight symbol under cursor on CursorHold -autocmd CursorHold * silent call CocActionAsync('highlight') - -" Remap for rename current word -nmap rn (coc-rename) - -" Remap for format selected region -xmap fr (coc-format-selected) -nmap fr (coc-format-selected) - -augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -augroup end - -" Remap for do codeAction of selected region, ex: `aap` for current paragraph -xmap a (coc-codeaction-selected) -nmap a (coc-codeaction-selected) - -" Remap for do codeAction of current line -nmap ac (coc-codeaction) -" Fix autofix problem of current line -nmap qf (coc-fix-current) - -" Create mappings for function text object, requires document symbols feature of languageserver. -xmap if (coc-funcobj-i) -xmap af (coc-funcobj-a) -omap if (coc-funcobj-i) -omap af (coc-funcobj-a) - -" Use for select selections ranges, needs server support, like: coc-tsserver, coc-python -nmap (coc-range-select) -xmap (coc-range-select) - -" Use `:Format` to format current buffer -command! -nargs=0 Format :call CocAction('format') - -" Use `:Fold` to fold current buffer -command! -nargs=? Fold :call CocAction('fold', ) - -" use `:OR` for organize import of current buffer -command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') - -" Add status line support, for integration with other plugin, checkout `:h coc-status` -set statusline^=%{StatusDiagnostic()} - -" Using CocList -" Show all diagnostics -nnoremap a :CocList diagnostics -" Manage extensions -nnoremap e :CocList extensions -" Show commands -nnoremap c :CocList commands -" Find symbol of current document -nnoremap o :CocList outline -" Search workspace symbols -nnoremap s :CocList -I symbols -" Do default action for next item. -nnoremap j :CocNext -" Do default action for previous item. -nnoremap k :CocPrev -" Resume latest coc list -nnoremap p :CocListResume - -" Auto command for python projects -autocmd FileType python let b:coc_root_patterns = ['.git', '.env'] - -" Auto command for correct comment highlighting in Json files - autocmd FileType json syntax match Comment +\/\/.\+$+ -" status line function -function! StatusDiagnostic() abort - let info = get(b:, 'coc_diagnostic_info', {}) - if empty(info) | return '' | endif - let msgs = [] - if get(info, 'error', 0) - call add(msgs, 'E' . info['error']) - endif - if get(info, 'warning', 0) - call add(msgs, 'W' . info['warning']) - endif - return join(msgs, ' ') . ' ' . get(g:, 'coc_status', '') -endfunction - -" Disable node version warning -let g:coc_disable_startup_warning = 1 - -" Vim script coc extension -let g:markdown_fenced_languages = [ - \ 'vim', - \ 'help' - \] - -" Emoji completion -set completefunc=emoji#complete diff --git a/dotfiles/.config/nvim/custom.vim b/dotfiles/.config/nvim/custom.vim new file mode 120000 index 0000000..15245db --- /dev/null +++ b/dotfiles/.config/nvim/custom.vim @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/custom.vim \ No newline at end of file diff --git a/dotfiles/.config/nvim/init.vim b/dotfiles/.config/nvim/init.vim deleted file mode 100644 index 9e359ed..0000000 --- a/dotfiles/.config/nvim/init.vim +++ /dev/null @@ -1,339 +0,0 @@ -" Vim-plug initialization -let vim_plug_just_installed = 0 -let vim_plug_path = expand('~/.config/nvim/autoload/plug.vim') -if !filereadable(vim_plug_path) - echo "Installing Vim-plug..." - echo "" silent !mkdir -p ~/.config/nvim/autoload - silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim - let vim_plug_just_installed = 1 -endif - -" manually load vim-plug the first time -if vim_plug_just_installed - :execute 'source '.fnameescape(vim_plug_path) - :PlugInstall -endif - -" ============================================================================ -" Active plugins -call plug#begin('~/.config/nvim/plugged') - -" Now the actual plugins: -" rainbow brackets -Plug 'luochen1990/rainbow' - -" Vim emoji -Plug 'junegunn/vim-emoji' - -" quick commenter -Plug 'preservim/nerdcommenter' - -" Conquer of Completion -Plug 'neoclide/coc.nvim', {'branch': 'release'} - -" Override configs by directory -Plug 'arielrossanigo/dir-configs-override.vim' - -" Better file browser -Plug 'scrooloose/nerdtree' - -" Class/module browser -Plug 'majutsushi/tagbar' -" TODO known problems: -" * current block not refreshing' - -" Search results counter -Plug 'vim-scripts/IndexedSearch' - -" Plugin for live preview of LaTex -Plug 'donRaphaco/neotex', {'for': 'tex'} - -" Integrated Floating terminal -Plug 'voldikss/vim-floaterm' - -" Lightline -Plug 'itchyny/lightline.vim' - -" Code and files fuzzy finder -Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' } -Plug 'junegunn/fzf.vim' - -" Pending tasks list -Plug 'fisadev/FixedTaskList.vim' - -" Completion from other opened files -Plug 'Shougo/context_filetype.vim' - -" Automatically close parenthesis, etc -Plug 'Townk/vim-autoclose' - -" Indent text object -Plug 'michaeljsmith/vim-indent-object' - -" Indentation based movements -Plug 'jeetsukumaran/vim-indentwise' - -" Better language packs -Plug 'sheerun/vim-polyglot' - -" Ack code search (requires ack installed in the system) -Plug 'mileszs/ack.vim' -" TODO is there a way to prevent the progress which hides the editor? - -" Paint css colors with the real color -Plug 'lilydjwg/colorizer' -" TODO is there a better option for neovim? - -" Generate html in a simple way -Plug 'mattn/emmet-vim' - -" Git integration -Plug 'tpope/vim-fugitive' - -" Git/mercurial/others diff icons on the side of the file lines -Plug 'mhinz/vim-signify' - -" Linters -Plug 'neomake/neomake' -" TODO is it running on save? or when? -" TODO not detecting errors, just style, is it using pylint? - -" Nice icons: Need to install patched font for this to work -Plug 'ryanoasis/vim-devicons' - -" add or override individual additional filetypes -let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols = {} " needed -let g:WebDevIconsUnicodeDecorateFileNodesExtensionSymbols['mkv'] = 'ƛ' - -" Show indention level through lines -Plug 'Yggdroot/indentLine' - -" Distraction free programming -Plug 'junegunn/goyo.vim' - -" Tell vim-plug we finished declaring plugins, so it can load them -call plug#end() - -" ============================================================================ -" Install plugins the first time vim runs -if vim_plug_just_installed - echo "Installing Bundles, please ignore key map error messages" - :PlugInstall -endif - -" ============================================================================ -" Vim settings and mappings - -" remap default leader key to comma -let mapleader = "," -nnoremap vr :source $MYVIMRC -nnoremap vc :e $MYVIMRC - - -" Change Ctrl N mapping to Ctrl Space " -inoremap - -"" Make vim scroll faster -set ttyfast -set mouse=a -set lazyredraw -set nu -set nowrap -set relativenumber -set encoding=UTF-8 -" set tabline to not display full path -set guitablabel=%t - - -" Set tabs for certain file types -" for html and css js and vue -autocmd FileType html setlocal ts=2 sw=2 expandtab -autocmd FileType css setlocal ts=2 sw=2 expandtab -autocmd FileType scss setlocal ts=2 sw=2 expandtab -autocmd FileType javascript setlocal ts=2 sw=2 expandtab -autocmd FileType json setlocal ts=4 sw=4 expandtab -autocmd FileType vue setlocal ts=2 sw=2 expandtab -" Set expand width to 2 for C/C++ -autocmd FileType cpp setlocal ts=2 sw=2 expandtab -autocmd FileType c setlocal ts=2 sw=2 expandtab -" Set expand width to 2 for Shell scripts and perl -autocmd FileType sh setlocal ts=2 sw=2 expandtab -autocmd FileType zsh setlocal ts=2 sw=2 expandtab -autocmd FileType bash setlocal ts=2 sw=2 expandtab -autocmd FileType perl setlocal ts=2 sw=2 expandtab -" Set expand width to 2 for markdown -autocmd FileType md setlocal ts=2 sw=2 expandtab -autocmd FileType markdown setlocal ts=2 sw=2 expandtab - -" " Copy to clipboard -vnoremap y "+y -nnoremap Y "+yg_ -nnoremap y "+y -nnoremap yy "+yy - -" " Paste from clipboard -nnoremap p "+p -nnoremap P "+P -vnoremap p "+p -vnoremap P "+P - - -" Run xrdb whenever Xdefaults or Xresources are updated. -autocmd BufWritePost *Xresources,*Xdefaults !xrdb % - -" Recompile suckless programs. only for files that are config.h -autocmd BufWritePost config.h,config.def.h !sudo make install; make clean - -" Comile any latex document into pdf form -autocmd BufWritePost answers.tex !pdflatex answers.tex - -" Compile VIU markdown notes to pdf -autocmd BufWritePost notes.md !pandoc -s -o notes.pdf notes.md - - -" tabs and spaces handling -set expandtab -set tabstop=4 -set softtabstop=4 -set shiftwidth=4 -" remove ugly vertical lines on window division -set fillchars+=vert:\ - -"" Color Scheme set up for Material =============================== -if (has("nvim")) - "For Neovim 0.1.3 and 0.1.4 < https://github.com/neovim/neovim/pull/2198 > - let $NVIM_TUI_ENABLE_TRUE_COLOR=1 -endif - -" < https://github.com/neovim/neovim/wiki/Following-HEAD #20160511 > -if (has("termguicolors")) - set termguicolors -endif - -" use 256 colors when possible -if (&term =~? 'mlterm\|xterm\|xterm-256\|screen-256') || has('nvim') - let &t_Co = 256 - syntax on - set background=light - colorscheme quantum -else - colorscheme jellybeans -endif - - -" autocompletion of files and commands behaves like shell -" (complete only the common part, list the options that match) -set wildmode=list:longest - -" save as sudo -ca w!! w !sudo tee "%" - -" tab navigation mappings -map tt :tabnew -map :tabn -imap :tabn -map :tabp -imap :tabp - - -" when scrolling, keep cursor 3 lines away from screen border -set scrolloff=3 - -" clear search results -nnoremap // :noh - -" clear empty spaces at the end of lines on save of python files -"autocmd BufWritePre *.py :%s/\s\+$//e - -" fix problems with uncommon shells (fish, xonsh) and plugins running commands -" (neomake, ...) -set shell=$SHELL - -" Ability to add python breakpoints -" (I use ipdb, but you can change it to whatever tool you use for debugging) -au FileType python map b Oimport ipdb; ipdb.set_trace() - -" ============================================================================ -" Plugins settings and mappings -" Edit them as you wish. - -" Tagbar ----------------------------- -" toggle tagbar display -nmap tb :TagbarToggle -" autofocus on tagbar open -let g:tagbar_autofocus = 1 - -" NERDTree ----------------------------- -" toggle nerdtree display -map nn :NERDTreeToggle -" open nerdtree with the current file selected -nmap nf :NERDTreeFind -" don;t show these file types -let NERDTreeIgnore = ['\.pyc$', '\.pyo$'] - -" Tasklist ------------------------------ -" show pending tasks list -map tl :TaskList - -" Neomake ------------------------------ -" Run linter on write -autocmd! BufWritePost * Neomake - -" Check code as python3 by default -let g:neomake_python_python_maker = neomake#makers#ft#python#python() -let g:neomake_python_flake8_maker = neomake#makers#ft#python#flake8() -let g:neomake_python_python_maker.exe = 'python3 -m py_compile' -let g:neomake_python_flake8_maker.exe = 'python3 -m flake8' - -" Disable error messages inside the buffer, next to the problematic line -let g:neomake_virtualtext_current_error = 1 - - -" Fzf ------------------------------ -" file finder mapping -nmap e :Files -" tags (symbols) in current file finder mapping -nmap g :BTag -" tags (symbols) in all files finder mapping -nmap G :Tags -" general code finder in current file mapping -nmap f :BLines -" general code finder in all files mapping -nmap F :Lines -" commands finder mapping -nmap c :Commands - - -" Signify ------------------------------ -" this first setting decides in which order try to guess your current vcs -" UPDATE it to reflect your preferences, it will speed up opening files -let g:signify_vcs_list = [ 'git', 'hg' ] -" mappings to jump to changed blocks -nmap sn (signify-next-hunk) -nmap sp (signify-prev-hunk) - -" nicer colors -highlight DiffAdd cterm=bold ctermbg=none ctermfg=119 -highlight DiffDelete cterm=bold ctermbg=none ctermfg=167 -highlight DiffChange cterm=bold ctermbg=none ctermfg=227 -highlight SignifySignAdd cterm=bold ctermbg=237 ctermfg=119 -highlight SignifySignDelete cterm=bold ctermbg=237 ctermfg=167 -highlight SignifySignChange cterm=bold ctermbg=237 ctermfg=227 - -" Autoclose ------------------------------ -" Fix to let ESC work as espected with Autoclose plugin -" (without this, when showing an autocompletion window, ESC won't leave insert -" mode) - -let g:AutoClosePumvisible = {"ENTER": "\", "ESC": "\"} -let g:AutoClosePairs = "() {} [] ' ` \" " - -" This is solves a bug in devicons that appears when sourcing vimrc -if exists("g:loaded_webdevicons") - call webdevicons#refresh() -endif - -" Include user's custom nvim configurations -if filereadable(expand("~/.config/nvim/custom.vim")) - source ~/.config/nvim/custom.vim -endif diff --git a/dotfiles/.config/nvim/init.vim b/dotfiles/.config/nvim/init.vim new file mode 120000 index 0000000..471c23c --- /dev/null +++ b/dotfiles/.config/nvim/init.vim @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/init.vim \ No newline at end of file diff --git a/dotfiles/.config/nvim/plugged b/dotfiles/.config/nvim/plugged new file mode 120000 index 0000000..9831815 --- /dev/null +++ b/dotfiles/.config/nvim/plugged @@ -0,0 +1 @@ +library/MattDev_NvimConfig⛺/plugged \ No newline at end of file diff --git a/dotfiles/.config/nvim_bak/.gitignore b/dotfiles/.config/nvim_bak/.gitignore deleted file mode 100644 index bbcb24b..0000000 --- a/dotfiles/.config/nvim_bak/.gitignore +++ /dev/null @@ -1,4 +0,0 @@ -.netrwhist -MattDev_NvimConfig/ -colors -localdata diff --git a/dotfiles/.config/nvim_bak/LICENSE b/dotfiles/.config/nvim_bak/LICENSE deleted file mode 100644 index f288702..0000000 --- a/dotfiles/.config/nvim_bak/LICENSE +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git "a/dotfiles/.config/nvim_bak/\\" "b/dotfiles/.config/nvim_bak/\\" deleted file mode 100644 index da731fd..0000000 --- "a/dotfiles/.config/nvim_bak/\\" +++ /dev/null @@ -1,593 +0,0 @@ -" _____ _ ___ _ -" / ___|| | / _ \ | | -" \ `--. | |__ __ _ __ __ _ __ / /_\ \ _ __ __| | ___ _ __ ___ ___ _ __ -" `--. \| '_ \ / _` |\ \ /\ / /| '_ \ | _ || '_ \ / _` | / _ \| '__|/ __| / _ \ | '_ \ -" /\__/ /| | | || (_| | \ V V / | | | | | | | || | | || (_| || __/| | \__ \| (_) || | | | -" \____/ |_| |_| \__,_| \_/\_/ |_| |_| \_| |_/|_| |_| \__,_| \___||_| |___/ \___/ |_| |_| -" -" _ _ _ _____ __ _ _ _ -" | | | |(_) / __ \ / _|(_) | | (_) -" | | | | _ _ __ ___ | / \/ ___ _ __ | |_ _ __ _ _ _ _ __ __ _ | |_ _ ___ _ __ -" | | | || || '_ ` _ \ | | / _ \ | '_ \ | _|| | / _` || | | || '__| / _` || __|| | / _ \ | '_ \ -" \ \_/ /| || | | | | | | \__/\| (_) || | | || | | || (_| || |_| || | | (_| || |_ | || (_) || | | | -" Neo \___/ |_||_| |_| |_| \____/ \___/ |_| |_||_| |_| \__, | \__,_||_| \__,_| \__||_| \___/ |_| |_| -" __/ | -" |___/ -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Originally a fork of: -" https://github.com/novln/nvim/blob/master/init.vim -" -" Key shortcuts -" -> ctrl-p -" -> nerdtree toggle -" ... -" -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" -" First and foremost, set the cache directory. This is needed to coordinate -" plugins. -" -let b:cache_directory = $HOME . '/.cache/nvim' -" -" Plugins are the beauty of vim! Use the awesome plugged plugin manager in -" neovim. -" -call plug#begin('~/.local/share/nvim/plugged') -" -" Plugins are in ascending chronological order relative to when they were -" added to the configuration. -" -" -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Plug 'junegunn/vim-emoji' -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Add words in visible tmux panes to vims completefunc -Plug 'wellle/tmux-complete.vim' -" -" FZF Fuzzy Finder! Careful, things are about to get FAAAAASSSTTT -" -" A command line fuzzy finder Very powerful -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -Plug 'junegunn/fzf.vim' -Plug 'airblade/vim-rooter' -" -" -" This command tells fzf to skip filenames during its :Rg search command. -" -command! -bang -nargs=* Rg call fzf#vim#grep("rg --column --line-number --no-heading --color=always --smart-case ".shellescape(), 1, {'options': '--delimiter : --nth 4..'}, 0) -" -" -" Images in vim! Using NeoVim, FZF and termpix. -" -" Original inspiration: to preview image files: https://www.youtube.com/watch?v=vzWibjhLBUs -" See gist here: https://gist.github.com/LinuxIsCool/457658f5298e4186f23f3731324b68cb -" -let g:fzf_layout = { 'down': '~60%' } -let g:fzf_files_options = - \ '--preview "(~/.cargo/bin/termpix --width 50 --true-color {} || cat {}) 2> /dev/null "' - -" Map ctrl-t to bring up fzf fuzzy finder for files -noremap :Files -" -" Vim Minimap! -" Very cool concept but it's causing a bit of lag, and it raises an error when -" I open it. I very well could take a look at the code. I could probably fix -" that bug and also increase the performance. -" Also, it would need a way to be controlled, like I need to access that -" window. It seems like that's actually what's bugging out. -" I should probably get back to work. I can probably leave it installed for -" now, and not use to too often. I'll take a look at the source too. -Plug 'lleixat/vim-minimap' -let g:minimap_show='mm' -let g:minimap_close='mc' -let g:minimap_update='mu' -let g:minimap_toggle='mt' -" This one seems sketch as well .. -" Plug 'koron/minimap-vim' -" No minimap for now. Sept 2020 -" Although, I couls see how the minimap could be super useful. Let's take -" a look at the code of the original python one. - -" Get the dot operator (repeat) functional on plugin commands -Plug 'tpope/vim-repeat' -" A collection of symetric commands shortcuts the use [ and ] as access keys. -Plug 'tpope/vim-unimpaired' - -" This one has a lot of potential. 95 contributors on github, and it's 83% -" python -Plug 'Shougo/denite.nvim' - -" ES2015 code snippets (Optional) -" Plug 'epilande/vim-es2015-snippets' - -" React code snippets -" Plug 'epilande/vim-react-snippets' - -" Ultisnips -" Plug 'SirVer/ultisnips' - -" Snippets are separated from the engine. Add this if you want them: -" Plug 'honza/vim-snippets' - -" Plug 'dsznajder/vscode-es7-javascript-react-snippets', { - " \ 'do': 'yarn install --frozen-lockfile && yarn compile' } - -" Trigger configuration (Optional) -" let g:UltiSnipsExpandTrigger="" -" -" Vimagit inspired by magit for emacs -Plug 'jreybert/vimagit' - -Plug 'jiangmiao/auto-pairs' -let g:AutoPairsFlyMode = 1 -au FileType html let b:AutoPairs = AutoPairsDefine({''}, []) -au FileType vim let b:AutoPairs = AutoPairsDefine({}, ['"']) - -Plug 'alvan/vim-closetag' -let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.js' - -" Polyglot language pack -Plug 'sheerun/vim-polyglot' - -" Show indentation level -Plug 'Yggdroot/indentLine' - -" NeoMake -Plug 'neomake/neomake' - -" COC -" Javascript configuration from: https://thoughtbot.com/blog/modern-typescript-and-react-development-in-vim -Plug 'neoclide/coc.nvim', {'branch': 'release'} -let g:coc_global_extensions = [ - \ 'coc-tsserver' - \ ] -" if isdirectory('./node_modules') && isdirectory('./node_modules/prettier') -" let g:coc_global_extensions += ['coc-prettier'] -" endif - -if isdirectory('./node_modules') && isdirectory('./node_modules/eslint') - let g:coc_global_extensions += ['coc-eslint'] -endif -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gr (coc-references) -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) -nmap do (coc-codeaction) -nmap rn (coc-rename) - -Plug 'neoclide/coc-eslint' -Plug 'neoclide/coc-prettier' - -" Automatically generate ctags for files -Plug 'xolox/vim-easytags' - -" Language Server Protocol -" View and search Language Server Protocol symbols and tags -Plug 'liuchengxu/vista.vim' - -" Goyo for distraction free editing! And T-shirts! -Plug 'junegunn/goyo.vim' - -" Limelight for focused editing -Plug 'junegunn/limelight.vim' - -" Make sure you use single quotes -" -Plug 'tomlion/vim-solidity' -"Jupyter Support for VIM -" Plug 'szymonmaszke/vimpyter' -" autocmd Filetype ipynb nmap b :VimpyterInsertPythonBlock -" autocmd Filetype ipynb nmap i :VimpyterStartJupyter -" autocmd Filetype ipynb nmap n :VimpyterStartNteract -Plug 'jeffkreeftmeijer/vim-numbertoggle' -Plug 'tpope/vim-surround' -"------------------------------------------------------------------------------- -"Color Theme -Plug 'tomasiser/vim-code-dark' -Plug 'ajmwagar/vim-deus' -Plug 'arcticicestudio/nord-vim' -"------------------------------------------------------------------------------- -Plug 'jceb/vim-orgmode' -Plug 'tpope/vim-speeddating' -Plug 'junegunn/vim-easy-align' - -"------------------------------------------------------------------------------- -" Git Section -" -" Github dashboard in vim! -Plug 'junegunn/vim-github-dashboard' - -" Git commands in vim -Plug 'tpope/vim-fugitive' - -" A git commit browser. -Plug 'junegunn/gv.vim' - -" Show git diff in the sign column -Plug 'airblade/vim-gitgutter' -"------------------------------------------------------------------------------- - - -Plug 'tpope/vim-rhubarb' - -"--------------- -" For Javascript and Typescript -" INVESTIGATE THESE -Plug 'pangloss/vim-javascript' -Plug 'leafgarland/typescript-vim' -Plug 'peitalin/vim-jsx-typescript' -Plug 'styled-components/vim-styled-components', { 'branch': 'main' } -Plug 'jparise/vim-graphql' -Plug 'yuezk/vim-js' -Plug 'maxmellon/vim-jsx-pretty' - -" Start interactive EasyAlign in visual mode (e.g. vipga) -xmap ga (EasyAlign) - -" Start interactive EasyAlign for a motion/text object (e.g. gaip) -nmap ga (EasyAlign) - -"------------------------------------------------------------------------------- -" Trying out vim lightline as an alternative to vim-airline, sticking with -" airline. -" Plug 'itchyny/lightline.vim' - -Plug 'vim-airline/vim-airline' -Plug 'vim-airline/vim-airline-themes' -"Enable tabline extension -let g:airline#extensions#tabline#enabled = 1 -let g:airline#extensions#tabline#left_sep = '|' -let g:airline#extensions#tabline#left_alt_sep = '|' -let g:airline#extensions#tabline#formatter = 'unique_tail' - -"------------------------------------------------------------------------------- -" Markdown Composer -function! BuildComposer(info) - if a:info.status != 'unchanged' || a:info.force - if has('nvim') - !cargo build --release - else - !cargo build --release --no-default-features --features json-rpc - endif - endif -endfunction -" -Plug 'euclio/vim-markdown-composer', { 'do': function('BuildComposer') } -let g:markdown_composer_open_browser = 0 -"------------------------------------------------------------------------------- -" -set wildignore+=*/tmp/*,*.so,*.swp,*.zip,__pycache__/ " MacOSX/Linux -Plug 'ctrlpvim/ctrlp.vim' -"The below 4 lines are for speed!from https://stackoverflow.com/questions/21346068/slow-performance-on-ctrlp-it-doesnt-work-to-ignore-some-folders/22784889#22784889 - let g:ctrlp_cache_dir = $HOME . '/.cache/ctrlp' - if executable('ag') - let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' - endif - let g:ctrlp_cmd = 'CtrlPMixed' " search anything (in files, buffers and MRU files at the same time.) - let g:ctrlp_working_path_mode = '' " search for nearest ancestor like .git, .hg, and the directory of the current file - let g:ctrlp_match_window_bottom = 1 " show the match window at the top of the screen - let g:ctrlp_by_filename = 0 - let g:ctrlp_max_height = 10 " maximum height of match window - let g:ctrlp_switch_buffer = 'et' " jump to a file if it's open already - let g:ctrlp_use_caching = 1 " enable caching - let g:ctrlp_cache_dir = b:cache_directory . '/ctrlp' " define cache path - let g:ctrlp_clear_cache_on_exit = 0 " speed up by not removing clearing cache everytime - let g:ctrlp_mruf_max = 250 " number of recently opened files - let g:ctrlp_show_hidden = 1 - let g:ctrlp_custom_ignore = { - \ 'py': '__pycache__/', - \ } - " \'py':__pycache__/' - " 'bin' - " 'develop-eggs', - " 'eggs' - " 'parts' - " 'src/*.egg-info' - " set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux - -"------------------------------------------------------------------------------- - -Plug 'scrooloose/nerdcommenter' -"Comment manager -" Allow commenting and inverting empty lines (useful when commenting a region) -let g:NERDCommentEmptyLines = 1 -" Enable trimming of trailing whitespace when uncommenting -let g:NERDTrimTrailingWhitespace = 1 -" Add spaces after comment delimiters by default -let g:NERDSpaceDelims = 1 -" Align line-wise comment delimiters flush left instead of following code indentation -let g:NERDDefaultAlign = 'left' - -"------------------------------------------------------------------------------- - -Plug 'goerz/ipynb_notedown.vim' - -"------------------------------------------------------------------------------- -" Modified vim start screen -Plug 'mhinz/vim-startify' - -Plug 'preservim/nerdtree' | - \ Plug 'Xuyuanp/nerdtree-git-plugin' | - \ Plug 'ryanoasis/vim-devicons' -let g:NERDTreeGitStatusIndicatorMapCustom = { - \ 'Modified' :'✹', - \ 'Staged' :'✚', - \ 'Untracked' :'✭', - \ 'Renamed' :'➜', - \ 'Unmerged' :'═', - \ 'Deleted' :'✖', - \ 'Dirty' :'✗', - \ 'Ignored' :'☒', - \ 'Clean' :'✔︎', - \ 'Unknown' :'?', - \ } -let g:NERDTreeGitStatusUseNerdFonts = 1 " you should install nerdfonts by yourself. default: 0 -" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " On-demand loading -":help NERDTreeOptions -map :NERDTreeToggle -map r :NERDTreeFind -let NERDTreeIgnore=['\.pyc$', '\~$'] - -" This makes the location of the current open file always the current working -" directory of vim. Experimental - Sept 15th 2020 -autocmd BufEnter * lcd %:p:h - -"------------------------------------------------------------------------------- - -Plug 'bfredl/nvim-ipy' -let g:nvim_ipy_perform_mappings = 0 -map s (IPy-Run) -map (IPy-RunCell) -map (IPy-Complete) -map (IPy-WordObjInfo) -map ? (IPy-Interrupt) -map (IPy-Terminate) - -""--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Fix for slimux: -set shell=/bin/sh -Plug 'lotabout/slimux' -"Send text between tmux panes! -nmap s :SlimuxREPLSendLinej -vmap s :SlimuxREPLSendSelection -" map :SlimuxREPLConfigure -let g:slimux_pane_format = "#W #P " - -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Plug 'vimwiki/vimwiki' - set nocompatible - filetype plugin on - syntax on -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -" Initialize plugin system -call plug#end() - -" DVC -autocmd! BufNewFile,BufRead Dvcfile,*.dvc,dvc.lock setfiletype yaml - -"============u============u============u============u============u============u -" VIM BEHAVIOUR - Settings -" Highlight character at column 80 -:set colorcolumn=80 - -" Tab completion in command mode -set wildmenu - -"These filetypes are ignored when expanding wildcard searches -set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc - -" show line numbers -set number - -" using only 1 column (and 1 space) while possible -set numberwidth=1 - -" Set vim system timeouts -set timeoutlen=1000 -set ttimeoutlen=5 - -" Set numbers relative or -" set relativenumber -set norelativenumber - -" Vim Arithmetic -" -> increase the count of a number -" -> decrease the count of a number -nnoremap :exe "normal \" - -" Vim date key -" I would like this to put behind the cursor. -" nnoremap d :r !date - -" Vim ls key -" Wed 16 Sep 2020 09:32:44 PM PDT -nnoremap l :r ! ls - -" Here we map the leader key! This is where things get spicy! The leader key -" in vim is extremely powerful. Wielded by great mages, it unlocks the ability -" to cast spells through one's very own fingertips by merely thinking a string -" of words. Once the energetic vibration of these thoughts pass through the -" keys into the keyboard, the spell is activated and it's consequences take -" effect. Use this key in normal mode to run commands through key bindings! -" * Why do we define it twice? Once with no g, then with a g, what is the -" difference? -" -" Set the leader key - #setleader -let mapleader="," -let g:mapleader="," - -" I was about to make something bad ass here. It escapes me. It was something -" about doing something in vim. - -" Here I make shortcuts to various system locations. -" ssh config, fish config, vim config, my personal notes, -nnoremap ev :e $MYVIMRC -nnoremap ef :e ~/.config/fish/config.fish -nnoremap et :e ~/.tmux.conf -nnoremap es :e ~/.ssh/config -nnoremap ed :e ~/Workspace/dotfiles/ -nnoremap ew :e ~/Workspace/ -" let current_week "=strftime('%V') -" nnoremap en :e ~/Notes/strftime('%V')/strftime('%V').mdG -function Edit() - let n = '~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - edit(n) -endfunction - -function! Edit() - let n = '~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - execute "e ".fnameescape(n) -endfunction - -" nnoremap en :Edit() -" nnoremap en :ex "e ".fnameescape('~/Notes/'.=strftime('%V').'/'.=strftime('%V').'.md') -nnoremap en "='~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - - -nnoremap en :e strftime('%V') - -" Date utilities -:nnoremap "=strftime("%c")P -:inoremap =strftime("%c") - -" funct! Exec(command) -" redir =>output -" silent exec a:command -" redir END -" return output -" endfunct! - -nnoremap i^R=Exec('ls') - -" Force reload vimrc -nnoremap rv :source $MYVIMRC -" stow -v -R dotfiles -t ~/ - -" For copying text out of VIM -set mouse=a - -" Syntax Highlighting -syntax enable - -" set background=dark -"colorscheme solarized -set t_Co=256 -set t_ut= -colorscheme nord -" colorscheme iceberg -" colorscheme codedark -hi Normal guibg=NONE ctermbg=NONE -" colors deus - -"Highlight Cursor line -set cursorline -" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" -" Enable Intuitive copy and paste -" vnoremap "*y -" vnoremap "+y -" nnoremap "+p -" inoremap + -set pastetoggle= - -"Use modifier to jump to beginning and end of lines -map j $ -map f 0 - -" This keeps the cursor at the center of the screen. -set scrolloff=999 - -"split more naturally -set splitbelow -set splitright -" Searching -set incsearch " show 'best match so far' as you type -set hlsearch " hilight the items found by the search -set ignorecase " ignores case of letters on searches -set smartcase " Override the 'ignorecase' option if the search pattern contains upper case characters -"Manually turn off the search highlight -map / :nohl - -set nowrap - -"Abbreviations -ab h1 hi - -" Disable these mappings that I don't want. -" Hmm.. Better look into this. I should know what these do. -noremap -noremap f -noremap -noremap - -" Make buffer movement similar to vimium/vimfx for firefox using let -" g:airline#extensions#tabline#enabled v 1 -" -" Cycle tabs -" Don't fuckin save, it makes things slow, wish I changed this -" earlier...(removing save - Sept 12 2020) -" I've been mixing up the terminology of tabs and windows. -" A Buffer is what's drawn on the screen -" A window is a view of particular text -" A tab page is a utility for organizing multiple windows -nnoremap :bn:NERDTreeFindl -nnoremap :bp:NERDTreeFindl -" noremap :tabnew split -" Let's shuffle windows just as easy. Then we can get into nerd tree smoother -" Whatabout shift n and shift p to cycle tabs? -" What do shipt p and shift n do? -" shift p is print behind, and shift n is previous search result. -" OK, we are not changing the above, they actually match vimium in firefox -" Fix Cycle tabs -" nnoremap -" nnoremap :w:bp -" -" nnoremap -" nnoremap :w:bn - -" Tab spacing on html -autocmd Filetype html setlocal ts=2 sw=2 expandtab -autocmd Filetype djangohtml setlocal ts=2 sw=2 expandtab -autocmd Filetype css setlocal ts=2 sw=2 expandtab -autocmd Filetype scss setlocal ts=2 sw=2 expandtab -autocmd Filetype javascript setlocal ts=2 sw=2 expandtab -autocmd Filetype json setlocal ts=2 sw=2 expandtab -autocmd Filetype cpp setlocal ts=2 sw=2 expandtab -autocmd Filetype c setlocal ts=2 sw=2 expandtab -autocmd Filetype sh setlocal ts=2 sw=2 expandtab -autocmd Filetype fish setlocal ts=2 sw=2 expandtab -autocmd Filetype bash setlocal ts=2 sw=2 expandtab -autocmd Filetype perl setlocal ts=2 sw=2 expandtab - -"Maintain cursor and window position when switching buffers -if v:version >= 700 - au BufLeave * let b:winview = winsaveview() - au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif -endif - -" For COC -if filereadable(expand("~/.config/nvim/coc.vim")) - source ~/.config/nvim/coc.vim -endif -" " `--. `|/ _\` ( _/-" / -" |\_b_9-"" ___) -"-"//' -" | --/`--_o"_/' (6_// -" P I C C O L O / ,' -"" .),-' -" ( "-__ `-( -" \ |HHH/ / \ -" \ - _./ `-._..._ -" 7----",'/ ..-" .-- "--.._ -" _.._.-/) .-',/ .-" -" ""--.. -" _..--"|=""--..--""""""./' . .-"""-.\ -" ,' .-',' ,' /. / .' \\ -" .:' ,' ,: / ,/'/ /' _....' _..--""" ) -" ,"/ / /( / _,/' / ,/' /. .-" __| -" / / /' ( ""----"""" / ,/ / `:.-" _.--"" / -" || ( \_ __.-' / |`-.`:=._-" _.-:| -" \/ \ """"""" / ""-` `-"===="-' \ -" | "-. __..-" \._.====.. ` -" | ""--"""" //..---""\\ . -" \ /'| __...---.\ | -" diff --git a/dotfiles/.config/nvim_bak/coc-settings.json b/dotfiles/.config/nvim_bak/coc-settings.json deleted file mode 100644 index fe77cf7..0000000 --- a/dotfiles/.config/nvim_bak/coc-settings.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "coc.preferences.formatOnSaveFiletypes": [ - "javascript", - "javascriptreact", - "typescript", - "typescriptreact" - ], - "tsserver.formatOnType": true, - "coc.preferences.formatOnType": true, - "eslint.autoFixOnSave": true, - "eslint.filetypes": ["javascript", "javascriptreact", "typescript", "typescriptreact"] -} - diff --git a/dotfiles/.config/nvim_bak/coc.vim b/dotfiles/.config/nvim_bak/coc.vim deleted file mode 100644 index 5cb7918..0000000 --- a/dotfiles/.config/nvim_bak/coc.vim +++ /dev/null @@ -1,149 +0,0 @@ -" TextEdit might fail if hidden is not set. -set hidden - -" Some servers have issues with backup files, see #649. -set nobackup -set nowritebackup - -" Give more space for displaying messages. -set cmdheight=2 - -" Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable -" delays and poor user experience. -set updatetime=300 - -" Don't pass messages to |ins-completion-menu|. -set shortmess+=c - -" Always show the signcolumn, otherwise it would shift the text each time -" diagnostics appear/become resolved. -if has("patch-8.1.1564") - " Recently vim can merge signcolumn and number column into one - set signcolumn=number -else - set signcolumn=yes -endif - -" Use tab for trigger completion with characters ahead and navigate. -" NOTE: Use command ':verbose imap ' to make sure tab is not mapped by -" other plugin before putting this into your config. -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() -inoremap pumvisible() ? "\" : "\" - -function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction - -" Use to trigger completion. -inoremap coc#refresh() - -" Use to confirm completion, `u` means break undo chain at current -" position. Coc only does snippet and additional edit on confirm. -" could be remapped by other vim plugin, try `:verbose imap `. -if exists('*complete_info') - inoremap complete_info()["selected"] != "-1" ? "\" : "\u\" -else - inoremap pumvisible() ? "\" : "\u\" -endif - -" Use `[g` and `]g` to navigate diagnostics -" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) - -" GoTo code navigation. -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gi (coc-implementation) -nmap gr (coc-references) - -" Use K to show documentation in preview window. -" nnoremap K :call show_documentation() -" -function! s:show_documentation() - if (index(['vim','help'], &filetype) >= 0) - execute 'h '.expand('') - else - call CocAction('doHover') - endif -endfunction - -" Highlight the symbol and its references when holding the cursor. -autocmd CursorHold * silent call CocActionAsync('highlight') - -" Symbol renaming. -nmap rn (coc-rename) - -" Formatting selected code. -" xmap f (coc-format-selected) -" nmap f (coc-format-selected) - -augroup mygroup - autocmd! - " Setup formatexpr specified filetype(s). - autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') - " Update signature help on jump placeholder. - autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') -augroup end - -" Applying codeAction to the selected region. -" Example: `aap` for current paragraph -xmap a (coc-codeaction-selected) -nmap a (coc-codeaction-selected) - -" Remap keys for applying codeAction to the current buffer. -nmap ac (coc-codeaction) -" Apply AutoFix to problem on the current line. -nmap qf (coc-fix-current) - -" Map function and class text objects -" NOTE: Requires 'textDocument.documentSymbol' support from the language server. -xmap if (coc-funcobj-i) -omap if (coc-funcobj-i) -xmap af (coc-funcobj-a) -omap af (coc-funcobj-a) -xmap ic (coc-classobj-i) -omap ic (coc-classobj-i) -xmap ac (coc-classobj-a) -omap ac (coc-classobj-a) - -" Use CTRL-S for selections ranges. -" Requires 'textDocument/selectionRange' support of LS, ex: coc-tsserver -nmap (coc-range-select) -xmap (coc-range-select) - -" Add `:Format` command to format current buffer. -command! -nargs=0 Format :call CocAction('format') - -" Add `:Fold` command to fold current buffer. -command! -nargs=? Fold :call CocAction('fold', ) - -" Add `:OR` command for organize imports of the current buffer. -command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') - -" Add (Neo)Vim's native statusline support. -" NOTE: Please see `:h coc-status` for integrations with external plugins that -" provide custom statusline: lightline.vim, vim-airline. -set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} - -" Mappings for CoCList -" Show all diagnostics. -nnoremap a :CocList diagnostics -" Manage extensions. -nnoremap e :CocList extensions -" Show commands. -nnoremap c :CocList commands -" Find symbol of current document. -nnoremap o :CocList outline -" Search workspace symbols. -nnoremap s :CocList -I symbols -" Do default action for next item. -nnoremap j :CocNext -" Do default action for previous item. -nnoremap k :CocPrev -" Resume latest coc list. -nnoremap p :CocListResume diff --git a/dotfiles/.config/nvim_bak/init.vim b/dotfiles/.config/nvim_bak/init.vim deleted file mode 100755 index 25a43ab..0000000 --- a/dotfiles/.config/nvim_bak/init.vim +++ /dev/null @@ -1,615 +0,0 @@ -" _____ _ ___ _ -" / ___|| | / _ \ | | -" \ `--. | |__ __ _ __ __ _ __ / /_\ \ _ __ __| | ___ _ __ ___ ___ _ __ -" `--. \| '_ \ / _` |\ \ /\ / /| '_ \ | _ || '_ \ / _` | / _ \| '__|/ __| / _ \ | '_ \ -" /\__/ /| | | || (_| | \ V V / | | | | | | | || | | || (_| || __/| | \__ \| (_) || | | | -" \____/ |_| |_| \__,_| \_/\_/ |_| |_| \_| |_/|_| |_| \__,_| \___||_| |___/ \___/ |_| |_| -" -" _ _ _ _____ __ _ _ _ -" | | | |(_) / __ \ / _|(_) | | (_) -" | | | | _ _ __ ___ | / \/ ___ _ __ | |_ _ __ _ _ _ _ __ __ _ | |_ _ ___ _ __ -" | | | || || '_ ` _ \ | | / _ \ | '_ \ | _|| | / _` || | | || '__| / _` || __|| | / _ \ | '_ \ -" \ \_/ /| || | | | | | | \__/\| (_) || | | || | | || (_| || |_| || | | (_| || |_ | || (_) || | | | -" Neo \___/ |_||_| |_| |_| \____/ \___/ |_| |_||_| |_| \__, | \__,_||_| \__,_| \__||_| \___/ |_| |_| -" __/ | -" |___/ -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Originally a fork of: -" https://github.com/novln/nvim/blob/master/init.vim -" -" Key shortcuts -" -> ctrl-p -" -> nerdtree toggle -" ... -" -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" -" First and foremost, set the cache directory. This is needed to coordinate -" plugins. -" -let b:cache_directory = $HOME . '/.cache/nvim' -" -" Plugins are the beauty of vim! Use the awesome plugged plugin manager in -" neovim. -" -call plug#begin('~/.local/share/nvim/plugged') -" -" Plugins are in ascending chronological order relative to when they were -" added to the configuration. -" -Plug 'junegunn/rainbow_parentheses.vim' -Plug 'psliwka/vim-smoothie' -Plug 'jez/vim-superman' - -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Plug 'junegunn/vim-emoji' -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Add words in visible tmux panes to vims completefunc -Plug 'wellle/tmux-complete.vim' -" -" FZF Fuzzy Finder! Careful, things are about to get FAAAAASSSTTT -" -" A command line fuzzy finder Very powerful -Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } -Plug 'yuki-ycino/fzf-preview.vim', { 'branch': 'release', 'do': ':UpdateRemotePlugins' } -Plug 'junegunn/fzf.vim' -Plug 'airblade/vim-rooter' -" -" -" This command tells fzf to skip filenames during its :Rg search command. -" Why do that? I don't know.. needs experimentation. -command! -bang -nargs=* Rg call fzf#vim#grep("rg --column --line-number --no-heading --color=always --smart-case ".shellescape(), 1, {'options': '--delimiter : --nth 4..'}, 0) - -" https://dev.to/iggredible/how-to-search-faster-in-vim-with-fzf-vim-36ko -" This overides the vim :grep command -set grepprg=rg\ --vimgrep\ --smart-case\ --follow -" It allows for search and replace across our entire project with the -" following: -" :grep "pizza" -" :cfdo %s/pizza/donut/g | update -" cfdo executes any command we pass on all entries in our quickfix list. -" -" Video - https://www.youtube.com/watch?v=vzWibjhLBUs -" Gist - https://gist.github.com/LinuxIsCool/457658f5298e4186f23f3731324b68cb -" Images in vim! Using NeoVim, FZF and termpix. -if executable('fish') - " use fish for embedded terminals - set shell=fish - " use bash for else - let $SHELL = 'bash' -endif -let g:fzf_layout = { 'down': '~60%' } -let g:fzf_files_options = - \ '--preview "(termpix --width 50 {} || bat {}) 2> /dev/null "' - -" Map ctrl-t to bring up fzf fuzzy finder for files -noremap :Files -" -" Vim Minimap! -" Very cool concept but it's causing a bit of lag, and it raises an error when -" I open it. I very well could take a look at the code. I could probably fix -" that bug and also increase the performance. -" Also, it would need a way to be controlled, like I need to access that -" window. It seems like that's actually what's bugging out. -" I should probably get back to work. I can probably leave it installed for -" now, and not use to too often. I'll take a look at the source too. -Plug 'lleixat/vim-minimap' -let g:minimap_show='mm' -let g:minimap_close='mc' -let g:minimap_update='mu' -let g:minimap_toggle='mt' -" This one seems sketch as well .. -" Plug 'koron/minimap-vim' -" No minimap for now. Sept 2020 -" Although, I couls see how the minimap could be super useful. Let's take -" a look at the code of the original python one. - -" Get the dot operator (repeat) functional on plugin commands -Plug 'tpope/vim-repeat' -" A collection of symetric commands shortcuts the use [ and ] as access keys. -Plug 'tpope/vim-unimpaired' - -" This one has a lot of potential. 95 contributors on github, and it's 83% -" python -Plug 'Shougo/denite.nvim' - -" ES2015 code snippets (Optional) -" Plug 'epilande/vim-es2015-snippets' - -" React code snippets -" Plug 'epilande/vim-react-snippets' - -" Ultisnips -" Plug 'SirVer/ultisnips' - -" Snippets are separated from the engine. Add this if you want them: -" Plug 'honza/vim-snippets' - -" Plug 'dsznajder/vscode-es7-javascript-react-snippets', { - " \ 'do': 'yarn install --frozen-lockfile && yarn compile' } - -" Trigger configuration (Optional) -" let g:UltiSnipsExpandTrigger="" -" -" Vimagit inspired by magit for emacs -Plug 'jreybert/vimagit' - -Plug 'jiangmiao/auto-pairs' -let g:AutoPairsFlyMode = 1 -au FileType html let b:AutoPairs = AutoPairsDefine({''}, []) -au FileType vim let b:AutoPairs = AutoPairsDefine({}, ['"']) - -Plug 'alvan/vim-closetag' -let g:closetag_filenames = '*.html,*.xhtml,*.phtml,*.js' - -" Polyglot language pack -Plug 'sheerun/vim-polyglot' - -" Show indentation level -Plug 'Yggdroot/indentLine' - -" NeoMake -Plug 'neomake/neomake' - -" COC -" Javascript configuration from: https://thoughtbot.com/blog/modern-typescript-and-react-development-in-vim -Plug 'neoclide/coc.nvim', {'branch': 'release'} -let g:coc_global_extensions = [ - \ 'coc-tsserver' - \ ] -" if isdirectory('./node_modules') && isdirectory('./node_modules/prettier') -" let g:coc_global_extensions += ['coc-prettier'] -" endif - -if isdirectory('./node_modules') && isdirectory('./node_modules/eslint') - let g:coc_global_extensions += ['coc-eslint'] -endif -nmap gd (coc-definition) -nmap gy (coc-type-definition) -nmap gr (coc-references) -nmap [g (coc-diagnostic-prev) -nmap ]g (coc-diagnostic-next) -nmap do (coc-codeaction) -nmap rn (coc-rename) - -Plug 'neoclide/coc-eslint' -Plug 'neoclide/coc-prettier' - -" Automatically generate ctags for files -Plug 'xolox/vim-easytags' - -" Language Server Protocol -" View and search Language Server Protocol symbols and tags -Plug 'liuchengxu/vista.vim' - -" Goyo for distraction free editing! And T-shirts! -Plug 'junegunn/goyo.vim' - -" Limelight for focused editing -Plug 'junegunn/limelight.vim' - -" Make sure you use single quotes -" -Plug 'tomlion/vim-solidity' -"Jupyter Support for VIM -" Plug 'szymonmaszke/vimpyter' -" autocmd Filetype ipynb nmap b :VimpyterInsertPythonBlock -" autocmd Filetype ipynb nmap i :VimpyterStartJupyter -" autocmd Filetype ipynb nmap n :VimpyterStartNteract -Plug 'jeffkreeftmeijer/vim-numbertoggle' -Plug 'tpope/vim-surround' -"------------------------------------------------------------------------------- -"Color Theme -Plug 'tomasiser/vim-code-dark' -Plug 'ajmwagar/vim-deus' -Plug 'arcticicestudio/nord-vim' -"------------------------------------------------------------------------------- -Plug 'jceb/vim-orgmode' -Plug 'tpope/vim-speeddating' -Plug 'junegunn/vim-easy-align' - -"------------------------------------------------------------------------------- -" Git Section -" -" Github dashboard in vim! -Plug 'junegunn/vim-github-dashboard' - -" Git commands in vim -Plug 'tpope/vim-fugitive' - -" A git commit browser. -Plug 'junegunn/gv.vim' - -" Show git diff in the sign column -Plug 'airblade/vim-gitgutter' -"------------------------------------------------------------------------------- - - -Plug 'tpope/vim-rhubarb' - -"--------------- -" For Javascript and Typescript -" INVESTIGATE THESE -Plug 'pangloss/vim-javascript' -Plug 'leafgarland/typescript-vim' -Plug 'peitalin/vim-jsx-typescript' -Plug 'styled-components/vim-styled-components', { 'branch': 'main' } -Plug 'jparise/vim-graphql' -Plug 'yuezk/vim-js' -Plug 'maxmellon/vim-jsx-pretty' - -" Start interactive EasyAlign in visual mode (e.g. vipga) -xmap ga (EasyAlign) - -" Start interactive EasyAlign for a motion/text object (e.g. gaip) -nmap ga (EasyAlign) - -"------------------------------------------------------------------------------- -" Trying out vim lightline as an alternative to vim-airline, sticking with -" airline. -" Plug 'itchyny/lightline.vim' - -Plug 'vim-airline/vim-airline' -Plug 'vim-airline/vim-airline-themes' -"Enable tabline extension -let g:airline#extensions#tabline#enabled = 1 -let g:airline#extensions#tabline#left_sep = '|' -let g:airline#extensions#tabline#left_alt_sep = '|' -let g:airline#extensions#tabline#formatter = 'unique_tail' - -"------------------------------------------------------------------------------- -" Markdown Composer -function! BuildComposer(info) - if a:info.status != 'unchanged' || a:info.force - if has('nvim') - !cargo build --release - else - !cargo build --release --no-default-features --features json-rpc - endif - endif -endfunction -" -Plug 'euclio/vim-markdown-composer', { 'do': function('BuildComposer') } -let g:markdown_composer_open_browser = 0 -"------------------------------------------------------------------------------- -" -set wildignore+=*/tmp/*,*.so,*.swp,*.zip,__pycache__/ " MacOSX/Linux -Plug 'ctrlpvim/ctrlp.vim' -"The below 4 lines are for speed!from https://stackoverflow.com/questions/21346068/slow-performance-on-ctrlp-it-doesnt-work-to-ignore-some-folders/22784889#22784889 - let g:ctrlp_cache_dir = $HOME . '/.cache/ctrlp' - if executable('ag') - let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' - endif - let g:ctrlp_cmd = 'CtrlPMixed' " search anything (in files, buffers and MRU files at the same time.) - let g:ctrlp_working_path_mode = '' " search for nearest ancestor like .git, .hg, and the directory of the current file - let g:ctrlp_match_window_bottom = 1 " show the match window at the top of the screen - let g:ctrlp_by_filename = 0 - let g:ctrlp_max_height = 10 " maximum height of match window - let g:ctrlp_switch_buffer = 'et' " jump to a file if it's open already - let g:ctrlp_use_caching = 1 " enable caching - let g:ctrlp_cache_dir = b:cache_directory . '/ctrlp' " define cache path - let g:ctrlp_clear_cache_on_exit = 0 " speed up by not removing clearing cache everytime - let g:ctrlp_mruf_max = 250 " number of recently opened files - let g:ctrlp_show_hidden = 1 - let g:ctrlp_custom_ignore = { - \ 'py': '__pycache__/', - \ } - " \'py':__pycache__/' - " 'bin' - " 'develop-eggs', - " 'eggs' - " 'parts' - " 'src/*.egg-info' - " set wildignore+=*/tmp/*,*.so,*.swp,*.zip " MacOSX/Linux - -"------------------------------------------------------------------------------- - -Plug 'scrooloose/nerdcommenter' -"Comment manager -" Allow commenting and inverting empty lines (useful when commenting a region) -let g:NERDCommentEmptyLines = 1 -" Enable trimming of trailing whitespace when uncommenting -let g:NERDTrimTrailingWhitespace = 1 -" Add spaces after comment delimiters by default -let g:NERDSpaceDelims = 1 -" Align line-wise comment delimiters flush left instead of following code indentation -let g:NERDDefaultAlign = 'left' - -"------------------------------------------------------------------------------- - -Plug 'goerz/ipynb_notedown.vim' - -"------------------------------------------------------------------------------- -" Modified vim start screen -Plug 'mhinz/vim-startify' - -Plug 'preservim/nerdtree' | - \ Plug 'Xuyuanp/nerdtree-git-plugin' | - \ Plug 'ryanoasis/vim-devicons' -let g:NERDTreeGitStatusIndicatorMapCustom = { - \ 'Modified' :'✹', - \ 'Staged' :'✚', - \ 'Untracked' :'✭', - \ 'Renamed' :'➜', - \ 'Unmerged' :'═', - \ 'Deleted' :'✖', - \ 'Dirty' :'✗', - \ 'Ignored' :'☒', - \ 'Clean' :'✔︎', - \ 'Unknown' :'?', - \ } -let g:NERDTreeGitStatusUseNerdFonts = 1 " you should install nerdfonts by yourself. default: 0 -" Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } " On-demand loading -":help NERDTreeOptions -map :NERDTreeToggle -map r :NERDTreeFind -let NERDTreeIgnore=['\.pyc$', '\~$'] - -" This makes the location of the current open file always the current working -" directory of vim. Experimental - Sept 15th 2020 -autocmd BufEnter * lcd %:p:h - -"------------------------------------------------------------------------------- - -Plug 'bfredl/nvim-ipy' -let g:nvim_ipy_perform_mappings = 0 -map s (IPy-Run) -map (IPy-RunCell) -map (IPy-Complete) -map (IPy-WordObjInfo) -map ? (IPy-Interrupt) -map (IPy-Terminate) - -""--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -" Fix for slimux: -set shell=/bin/sh -Plug 'lotabout/slimux' -"Send text between tmux panes! -nmap s :SlimuxREPLSendLinej -vmap s :SlimuxREPLSendSelection -" map :SlimuxREPLConfigure -let g:slimux_pane_format = "#W #P " - -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -Plug 'vimwiki/vimwiki' - set nocompatible - filetype plugin on - syntax on -"--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- - -" Initialize plugin system -call plug#end() - -" DVC -autocmd! BufNewFile,BufRead Dvcfile,*.dvc,dvc.lock setfiletype yaml - -"============u============u============u============u============u============u -" VIM BEHAVIOUR - Settings -" Highlight character at column 80 -:set colorcolumn=80 - -" Tab completion in command mode -set wildmenu - -"These filetypes are ignored when expanding wildcard searches -set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc - -" show line numbers -set number - -" using only 1 column (and 1 space) while possible -set numberwidth=1 - -" Set vim system timeouts -set timeoutlen=1000 -set ttimeoutlen=5 - -" Set numbers relative or -set relativenumber -" set norelativenumber - -" Vim Arithmetic -" -> increase the count of a number -" -> decrease the count of a number -nnoremap :exe "normal \" - -" Vim date key -" I would like this to put behind the cursor. -" nnoremap d :r !date - -" Vim ls key -" Wed 16 Sep 2020 09:32:44 PM PDT -nnoremap l :r ! ls - -" Here we map the leader key! This is where things get spicy! The leader key -" in vim is extremely powerful. Wielded by great mages, it unlocks the ability -" to cast spells through one's very own fingertips by merely thinking a string -" of words. Once the energetic vibration of these thoughts pass through the -" keys into the keyboard, the spell is activated and it's consequences take -" effect. Use this key in normal mode to run commands through key bindings! -" * Why do we define it twice? Once with no g, then with a g, what is the -" difference? -" -" Set the leader key - #setleader -let mapleader="," -let g:mapleader="," - -" I was about to make something bad ass here. It escapes me. It was something -" about doing something in vim. - -" Here I make shortcuts to various system locations. -" ssh config, fish config, vim config, my personal notes, -nnoremap ev :e $MYVIMRC -nnoremap ef :e ~/.config/fish/config.fish -nnoremap et :e ~/.tmux.conf -nnoremap es :e ~/.ssh/config -nnoremap ed :e ~/Workspace/dotfiles/ -nnoremap ew :e ~/Workspace/ -" let current_week "=strftime('%V') -" nnoremap en :e ~/Notes/strftime('%V')/strftime('%V').mdG -function Edit() - let n = '~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - edit(n) -endfunction - -function! Edit() - let n = '~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - execute "e ".fnameescape(n) -endfunction - -" nnoremap en :Edit() -" nnoremap en :ex "e ".fnameescape('~/Notes/'.=strftime('%V').'/'.=strftime('%V').'.md') -nnoremap en "='~/Notes/'.strftime('%V').'/'.strftime('%V').'.md' - - -nnoremap en :e strftime('%V') - -" Date utilities -:nnoremap "=strftime("%c")P -:inoremap =strftime("%c") - -" funct! Exec(command) -" redir =>output -" silent exec a:command -" redir END -" return output -" endfunct! - -nnoremap i^R=Exec('ls') - -" Force reload vimrc -nnoremap rv :source $MYVIMRC -" stow -v -R dotfiles -t ~/ - -" For copying text out of VIM -set mouse=a - -" Syntax Highlighting -syntax enable - -" set background=dark -"colorscheme solarized -set t_Co=256 -set t_ut= -" set t_AB=^[[48;5;%dm -" set t_AF=^[[38;5;%dm -" let NVIM_TUI_ENABLE_TRUE_COLOR=1 -" colorscheme desert-warm-256 -colorscheme quantum -" colorscheme nord -" colorscheme iceberg -" colorscheme codedark - -hi Normal guibg=NONE ctermbg=NONE -" colors deus -"Highlight Cursor line -set cursorline -" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" -" -" Enable Intuitive copy and paste -" vnoremap "*y -" vnoremap "+y -" nnoremap "+p -" inoremap + -set pastetoggle= - -"Use modifier to jump to beginning and end of lines -map j $ -map f 0 - -" This keeps the cursor at the center of the screen. -" set scrolloff=0 -set scrolloff=999 - -"split more naturally -set splitbelow -set splitright -" Searching -set incsearch " show 'best match so far' as you type -set hlsearch " hilight the items found by the search -set ignorecase " ignores case of letters on searches -set smartcase " Override the 'ignorecase' option if the search pattern contains upper case characters -"Manually turn off the search highlight -map / :nohl - -set nowrap - -"Abbreviations -ab h1 hi - -" Disable these mappings that I don't want. -" Hmm.. Better look into this. I should know what these do. -noremap -noremap f -noremap -noremap - -" Make buffer movement similar to vimium/vimfx for firefox using let -" g:airline#extensions#tabline#enabled v 1 -" -" Cycle tabs -" Don't fuckin save, it makes things slow, wish I changed this -" earlier...(removing save - Sept 12 2020) -" I've been mixing up the terminology of tabs and windows. -" A Buffer is what's drawn on the screen -" A window is a view of particular text -" A tab page is a utility for organizing multiple windows -nnoremap :bn:NERDTreeFindl -nnoremap :bp:NERDTreeFindl -" noremap :tabnew split -" Let's shuffle windows just as easy. Then we can get into nerd tree smoother -" Whatabout shift n and shift p to cycle tabs? -" What do shipt p and shift n do? -" shift p is print behind, and shift n is previous search result. -" OK, we are not changing the above, they actually match vimium in firefox -" Fix Cycle tabs -" nnoremap -" nnoremap :w:bp -" -" nnoremap -" nnoremap :w:bn - -" Tab spacing on html -autocmd Filetype html setlocal ts=2 sw=2 expandtab -autocmd Filetype djangohtml setlocal ts=2 sw=2 expandtab -autocmd Filetype css setlocal ts=2 sw=2 expandtab -autocmd Filetype scss setlocal ts=2 sw=2 expandtab -autocmd Filetype javascript setlocal ts=2 sw=2 expandtab -autocmd Filetype json setlocal ts=2 sw=2 expandtab -autocmd Filetype cpp setlocal ts=2 sw=2 expandtab -autocmd Filetype c setlocal ts=2 sw=2 expandtab -autocmd Filetype sh setlocal ts=2 sw=2 expandtab -autocmd Filetype fish setlocal ts=2 sw=2 expandtab -autocmd Filetype bash setlocal ts=2 sw=2 expandtab -autocmd Filetype perl setlocal ts=2 sw=2 expandtab - -"Maintain cursor and window position when switching buffers -if v:version >= 700 - au BufLeave * let b:winview = winsaveview() - au BufEnter * if(exists('b:winview')) | call winrestview(b:winview) | endif -endif - -" For COC -if filereadable(expand("~/.config/nvim/coc.vim")) - source ~/.config/nvim/coc.vim -endif -" " `--. `|/ _\` ( _/-" / -" |\_b_9-"" ___) -"-"//' -" | --/`--_o"_/' (6_// -" P I C C O L O / ,' -"" .),-' -" ( "-__ `-( -" \ |HHH/ / \ -" \ - _./ `-._..._ -" 7----",'/ ..-" .-- "--.._ -" _.._.-/) .-',/ .-" -" ""--.. -" _..--"|=""--..--""""""./' . .-"""-.\ -" ,' .-',' ,' /. / .' \\ -" .:' ,' ,: / ,/'/ /' _....' _..--""" ) -" ,"/ / /( / _,/' / ,/' /. .-" __| -" / / /' ( ""----"""" / ,/ / `:.-" _.--"" / -" || ( \_ __.-' / |`-.`:=._-" _.-:| -" \/ \ """"""" / ""-` `-"===="-' \ -" | "-. __..-" \._.====.. ` -" | ""--"""" //..---""\\ . -" \ /'| __...---.\ | -" diff --git a/dotfiles/.config/nvim_bak/tmux-client-175843.log b/dotfiles/.config/nvim_bak/tmux-client-175843.log deleted file mode 100644 index 6ecddf6..0000000 --- a/dotfiles/.config/nvim_bak/tmux-client-175843.log +++ /dev/null @@ -1,86 +0,0 @@ -1601205341.298278 client started (175843): version 3.0a, socket /tmp//tmux-1000/default, protocol 8 -1601205341.298290 on Linux 5.4.0-7642-generic #46~1598628707~20.04~040157c-Ubuntu SMP Fri Aug 28 18:02:16 UTC ; libevent 2.1.11-stable (poll) -1601205341.298296 socket is /tmp//tmux-1000/default -1601205341.298304 trying connect -1601205341.298329 add peer 0x5582eff8d5e0: 6 ((nil)) -1601205341.298379 sending message 100 to peer 0x5582eff8d5e0 (4 bytes) -1601205341.298382 sending message 101 to peer 0x5582eff8d5e0 (7 bytes) -1601205341.298384 sending message 102 to peer 0x5582eff8d5e0 (11 bytes) -1601205341.298385 sending message 108 to peer 0x5582eff8d5e0 (60 bytes) -1601205341.298387 sending message 104 to peer 0x5582eff8d5e0 (0 bytes) -1601205341.298389 sending message 107 to peer 0x5582eff8d5e0 (4 bytes) -1601205341.298391 sending message 105 to peer 0x5582eff8d5e0 (63 bytes) -1601205341.298392 sending message 105 to peer 0x5582eff8d5e0 (19 bytes) -1601205341.298394 sending message 105 to peer 0x5582eff8d5e0 (16 bytes) -1601205341.298395 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298397 sending message 105 to peer 0x5582eff8d5e0 (54 bytes) -1601205341.298398 sending message 105 to peer 0x5582eff8d5e0 (48 bytes) -1601205341.298400 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298401 sending message 105 to peer 0x5582eff8d5e0 (11 bytes) -1601205341.298403 sending message 105 to peer 0x5582eff8d5e0 (12 bytes) -1601205341.298404 sending message 105 to peer 0x5582eff8d5e0 (15 bytes) -1601205341.298406 sending message 105 to peer 0x5582eff8d5e0 (44 bytes) -1601205341.298411 sending message 105 to peer 0x5582eff8d5e0 (29 bytes) -1601205341.298413 sending message 105 to peer 0x5582eff8d5e0 (86 bytes) -1601205341.298415 sending message 105 to peer 0x5582eff8d5e0 (29 bytes) -1601205341.298416 sending message 105 to peer 0x5582eff8d5e0 (52 bytes) -1601205341.298418 sending message 105 to peer 0x5582eff8d5e0 (47 bytes) -1601205341.298435 sending message 105 to peer 0x5582eff8d5e0 (15 bytes) -1601205341.298436 sending message 105 to peer 0x5582eff8d5e0 (18 bytes) -1601205341.298438 sending message 105 to peer 0x5582eff8d5e0 (47 bytes) -1601205341.298439 sending message 105 to peer 0x5582eff8d5e0 (23 bytes) -1601205341.298441 sending message 105 to peer 0x5582eff8d5e0 (17 bytes) -1601205341.298443 sending message 105 to peer 0x5582eff8d5e0 (18 bytes) -1601205341.298444 sending message 105 to peer 0x5582eff8d5e0 (23 bytes) -1601205341.298445 sending message 105 to peer 0x5582eff8d5e0 (30 bytes) -1601205341.298447 sending message 105 to peer 0x5582eff8d5e0 (27 bytes) -1601205341.298448 sending message 105 to peer 0x5582eff8d5e0 (24 bytes) -1601205341.298450 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298451 sending message 105 to peer 0x5582eff8d5e0 (23 bytes) -1601205341.298453 sending message 105 to peer 0x5582eff8d5e0 (21 bytes) -1601205341.298454 sending message 105 to peer 0x5582eff8d5e0 (25 bytes) -1601205341.298456 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298457 sending message 105 to peer 0x5582eff8d5e0 (35 bytes) -1601205341.298459 sending message 105 to peer 0x5582eff8d5e0 (12 bytes) -1601205341.298460 sending message 105 to peer 0x5582eff8d5e0 (16 bytes) -1601205341.298462 sending message 105 to peer 0x5582eff8d5e0 (51 bytes) -1601205341.298463 sending message 105 to peer 0x5582eff8d5e0 (33 bytes) -1601205341.298465 sending message 105 to peer 0x5582eff8d5e0 (36 bytes) -1601205341.298466 sending message 105 to peer 0x5582eff8d5e0 (17 bytes) -1601205341.298468 sending message 105 to peer 0x5582eff8d5e0 (17 bytes) -1601205341.298469 sending message 105 to peer 0x5582eff8d5e0 (387 bytes) -1601205341.298471 sending message 105 to peer 0x5582eff8d5e0 (64 bytes) -1601205341.298473 sending message 105 to peer 0x5582eff8d5e0 (19 bytes) -1601205341.298474 sending message 105 to peer 0x5582eff8d5e0 (18 bytes) -1601205341.298476 sending message 105 to peer 0x5582eff8d5e0 (15 bytes) -1601205341.298477 sending message 105 to peer 0x5582eff8d5e0 (82 bytes) -1601205341.298479 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298484 sending message 105 to peer 0x5582eff8d5e0 (8 bytes) -1601205341.298485 sending message 105 to peer 0x5582eff8d5e0 (19 bytes) -1601205341.298487 sending message 105 to peer 0x5582eff8d5e0 (41 bytes) -1601205341.298488 sending message 105 to peer 0x5582eff8d5e0 (12 bytes) -1601205341.298490 sending message 105 to peer 0x5582eff8d5e0 (24 bytes) -1601205341.298491 sending message 105 to peer 0x5582eff8d5e0 (36 bytes) -1601205341.298493 sending message 105 to peer 0x5582eff8d5e0 (14 bytes) -1601205341.298494 sending message 105 to peer 0x5582eff8d5e0 (9 bytes) -1601205341.298496 sending message 105 to peer 0x5582eff8d5e0 (13 bytes) -1601205341.298498 sending message 105 to peer 0x5582eff8d5e0 (17 bytes) -1601205341.298499 sending message 105 to peer 0x5582eff8d5e0 (13 bytes) -1601205341.298501 sending message 105 to peer 0x5582eff8d5e0 (41 bytes) -1601205341.298502 sending message 105 to peer 0x5582eff8d5e0 (42 bytes) -1601205341.298504 sending message 105 to peer 0x5582eff8d5e0 (30 bytes) -1601205341.298505 sending message 105 to peer 0x5582eff8d5e0 (158 bytes) -1601205341.298507 sending message 105 to peer 0x5582eff8d5e0 (23 bytes) -1601205341.298509 sending message 105 to peer 0x5582eff8d5e0 (31 bytes) -1601205341.298510 sending message 105 to peer 0x5582eff8d5e0 (23 bytes) -1601205341.298512 sending message 105 to peer 0x5582eff8d5e0 (24 bytes) -1601205341.298513 sending message 105 to peer 0x5582eff8d5e0 (21 bytes) -1601205341.298514 sending message 105 to peer 0x5582eff8d5e0 (20 bytes) -1601205341.298516 sending message 105 to peer 0x5582eff8d5e0 (56 bytes) -1601205341.298518 sending message 106 to peer 0x5582eff8d5e0 (0 bytes) -1601205341.298519 sending message 200 to peer 0x5582eff8d5e0 (4 bytes) -1601205341.298521 client loop enter -1601205341.298781 peer 0x5582eff8d5e0 message 211 -1601205341.298786 client_write: sessions should be nested with care, unset $TMUX to force\n -1601205341.298791 peer 0x5582eff8d5e0 message 203 -1601205341.298794 client loop exit diff --git a/dotfiles/.config/omf/theme b/dotfiles/.config/omf/theme index 92f7828..23574f3 100644 --- a/dotfiles/.config/omf/theme +++ b/dotfiles/.config/omf/theme @@ -1 +1 @@ -serious +gentoo diff --git a/dotfiles/.local/bin/blsd b/dotfiles/.local/bin/blsd new file mode 100755 index 0000000..cdc5f28 Binary files /dev/null and b/dotfiles/.local/bin/blsd differ diff --git a/dotfiles/.local/share/fzf/github_orgs b/dotfiles/.local/share/fzf/github_orgs index b16a85a..7359ca6 100644 --- a/dotfiles/.local/share/fzf/github_orgs +++ b/dotfiles/.local/share/fzf/github_orgs @@ -1,4 +1,3 @@ longtailfinancial holoviz -cadcad blockscience diff --git a/dotfiles/index.wiki b/dotfiles/index.wiki new file mode 100644 index 0000000..c1317fb --- /dev/null +++ b/dotfiles/index.wiki @@ -0,0 +1,29 @@ += Welcome to the serious vim wiki = +This wiki will link web of thoughts and ideas that I have expressed throughout +my computer. + +== Header2 == + +=== Header3 === + +*bold text* +_italic text_ + +[[vimwiki.md]] + +[[test2.md]] +[[wiki link|description]] + +* bullet list item 1 +* bullet list item 2 + a) numbered list item 1 + b) numbered list item 2 + +{{{python +def greet(s): + print("Hello, " + s) +}}} + +| a table | | +|---------|---| +| | |