diff --git a/.gitignore b/.gitignore
index 56dee29f..55273366 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,6 +4,7 @@ temp_dirs/yankring_history_v2.txt
sources_forked/yankring/doc/tags
sources_non_forked/tlib/doc/tags
sources_non_forked/ctrlp.vim/doc/tags*
+my_plugins/
my_configs.vim
tags
.DS_Store
diff --git a/README.md b/README.md
index 52efaaaa..ea93e17d 100644
--- a/README.md
+++ b/README.md
@@ -11,20 +11,32 @@ There are two versions:
I would, of course, recommend using the awesome version.
+
## How to install the Awesome version?
+
The awesome version includes a lot of great plugins, configurations and color schemes that make Vim a lot better. To install it simply do following from your terminal:
- git clone https://github.com/amix/vimrc.git ~/.vim_runtime
- sh ~/.vim_runtime/install_awesome_vimrc.sh
+ git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
+ sh ~/.vim_runtime/install_awesome_vimrc.sh
+
+
+## Fonts
+
+I recommend using [IBM Plex Mono font](https://ibm.github.io/type/) (it's an open-source and awesome font that can make your code beautiful). The Awesome vimrc is already setup to try to use it.
+
+Some other fonts that Awesome will try to use:
+
+* [Hack](http://sourcefoundry.org/hack/)
+* [Source Code Pro](https://adobe-fonts.github.io/source-code-pro/)
-I also recommend using [the Hack font](http://sourcefoundry.org/hack/) (it's a free and awesome font designed for source code). The Awesome vimrc is already setup to try to use it.
## How to install the Basic version?
+
The basic version is just one file and no plugins. Just copy [basic.vim](https://github.com/amix/vimrc/blob/master/vimrcs/basic.vim) and paste it into your vimrc.
The basic version is useful to install on remote servers where you don't need many plugins, and you don't do many edits.
- git clone git://github.com/amix/vimrc.git ~/.vim_runtime
+ git clone --depth=1 git://github.com/amix/vimrc.git ~/.vim_runtime
sh ~/.vim_runtime/install_basic_vimrc.sh
@@ -37,6 +49,7 @@ Use [msysgit](http://msysgit.github.com/) to checkout the repository and run the
If you have vim aliased as `vi` instead of `vim`, make sure to either alias it: `alias vi=vim`. Otherwise, `apt-get install vim`
+
## How to update to latest version?
Just do a git rebase!
diff --git a/my_plugins/.gitkeep b/my_plugins/.gitkeep
new file mode 100644
index 00000000..e69de29b
diff --git a/sources_non_forked/ack.vim/README.md b/sources_non_forked/ack.vim/README.md
index fca907fa..378fc3e3 100644
--- a/sources_non_forked/ack.vim/README.md
+++ b/sources_non_forked/ack.vim/README.md
@@ -76,9 +76,9 @@ The quickfix results window is augmented with these convenience mappings:
? a quick summary of these keys, repeat to close
o to open (same as Enter)
O to open and close the quickfix window
- go to preview file, keeping focus on the results
+ go to preview file, open but maintain focus on ack.vim results
t to open in new tab
- T to open in new tab, keeping focus on the results
+ T to open in new tab without moving to it
h to open in horizontal split
H to open in horizontal split, keeping focus on the results
v to open in vertical split
@@ -87,6 +87,10 @@ The quickfix results window is augmented with these convenience mappings:
### Gotchas
+To search for a pattern that contains whitespace, you need to enclose the
+pattern in single quotes. For example: `:Ack 'foo bar'` to search for
+'foo bar'.
+
Some characters have special meaning, and need to be escaped in your search
pattern. For instance, `#`. You need to escape it with `:Ack '\\\#define
foo'` to search for '#define foo'. See [issue #5].
diff --git a/sources_non_forked/ctrlp.vim/autoload/ctrlp.vim b/sources_non_forked/ctrlp.vim/autoload/ctrlp.vim
index de60d77a..2a8ae888 100644
--- a/sources_non_forked/ctrlp.vim/autoload/ctrlp.vim
+++ b/sources_non_forked/ctrlp.vim/autoload/ctrlp.vim
@@ -1006,7 +1006,9 @@ fu! s:KeyLoop()
wh exists('s:init') && s:keyloop
try
set t_ve=
- set guicursor=a:NONE
+ if guicursor != ''
+ set guicursor=a:NONE
+ en
let nr = getchar()
fina
let &t_ve = t_ve
@@ -2009,7 +2011,7 @@ fu! s:bufnrfilpath(line)
if (a:line =~ '[\/]\?\[\d\+\*No Name\]$')
let bufnr = str2nr(matchstr(a:line, '[\/]\?\[\zs\d\+\ze\*No Name\]$'))
let filpath = bufnr
- else
+ els
let bufnr = bufnr(a:line)
retu [bufnr, a:line]
en
@@ -2414,7 +2416,7 @@ fu! s:buildpat(lst)
let c = a:lst[item - 1]
let pat .= (c == '/' ? '[^/]\{-}' : '[^'.c.'/]\{-}').a:lst[item]
endfo
- else
+ els
for item in range(1, len(a:lst) - 1)
let pat .= '[^'.a:lst[item - 1].']\{-}'.a:lst[item]
endfo
diff --git a/sources_non_forked/ctrlp.vim/doc/ctrlp.txt b/sources_non_forked/ctrlp.vim/doc/ctrlp.txt
index 455e368c..4dc2e4ec 100644
--- a/sources_non_forked/ctrlp.vim/doc/ctrlp.txt
+++ b/sources_non_forked/ctrlp.vim/doc/ctrlp.txt
@@ -638,7 +638,6 @@ Set this to 1 to save every MRU file path $HOME/$filepath in the $HOME dir
let g:ctrlp_tilde_homedir = 0
<
Note: This applies also to all dir paths stored by :CtrlPBookmarkDirAdd!
-<
*'g:ctrlp_mruf_relative'*
Set this to 1 to show only MRU files in the current working directory: >
@@ -873,12 +872,12 @@ COMMANDS *ctrlp-commands*
*:CtrlPCurFile*
:CtrlPCurFile
- This acts like |:CtrlP| with |g:ctrlp_working_path_mode| = '' and ignores
+ This acts like |:CtrlP| with |g:ctrlp_working_path_mode| = 'c' and ignores
the variable's current value.
*:CtrlPCurWD*
:CtrlPCurWD
- This acts like |:CtrlP| with |g:ctrlp_working_path_mode| = '' and ignores
+ This acts like |:CtrlP| with |g:ctrlp_working_path_mode| = 'd' and ignores
the variable's current value.
*:CtrlPMRU*
diff --git a/sources_non_forked/gruvbox/README.md b/sources_non_forked/gruvbox/README.md
index 917abdb9..4269786c 100644
--- a/sources_non_forked/gruvbox/README.md
+++ b/sources_non_forked/gruvbox/README.md
@@ -1,4 +1,4 @@
-
+
gruvbox is heavily inspired by [badwolf][], [jellybeans][] and [solarized][].
@@ -65,8 +65,8 @@ Features
--------
* Lots of style-customization options (contrast, color invertion, italics usage etc.)
-* Extended filetype highlighting: Html, Xml, Vim (and ES6 with [yajs.vim](https://github.com/othree/yajs.vim)), Clojure, C, Python, JavaScript, CoffeeScript, Ruby, Objective-C, Go, Lua, MoonScript, Java, Markdown, Haskell
-* Supported plugins: [EasyMotion][], [vim-sneak][], [Indent Guides][], [indentLine][], [Rainbow Parentheses][], [Airline][], [Lightline][], [GitGutter][], [Signify][], [ShowMarks][], [Signature][], [Syntastic][], [CtrlP][], [Startify][]
+* Extended filetype highlighting: Html, Xml, Vim, Clojure, C, Python, JavaScript, TypeScript, PureScript, CoffeeScript, Ruby, Objective-C, Go, Lua, MoonScript, Java, Markdown, Haskell, Elixir
+* Supported plugins: [EasyMotion][], [vim-sneak][], [Indent Guides][], [indentLine][], [Rainbow Parentheses][], [Airline][], [Lightline][], [GitGutter][], [Signify][], [ShowMarks][], [Signature][], [Syntastic][], [Ale][], [CtrlP][], [Startify][], [NERDTree][], [Dirvish][]
[EasyMotion]: https://github.com/Lokaltog/vim-easymotion
[vim-sneak]: https://github.com/justinmk/vim-sneak
@@ -80,8 +80,11 @@ Features
[ShowMarks]: http://www.vim.org/scripts/script.php?script_id=152
[Signature]: https://github.com/kshenoy/vim-signature
[Syntastic]: https://github.com/scrooloose/syntastic
+ [Ale]: https://github.com/w0rp/ale
[CtrlP]: https://github.com/kien/ctrlp.vim
[Startify]: https://github.com/mhinz/vim-startify
+ [NERDTree]: https://github.com/scrooloose/nerdtree
+ [Dirvish]: https://github.com/justinmk/vim-dirvish
Contributions
-------------
@@ -93,8 +96,8 @@ See [gruvbox-contrib][] repo for contributions, ports and extras.
ToDo
----
-* Filetype syntax highlighting (R, TeX, Swift, Erlang, Purescript and I'm still dissatisfied with CSS)
-* Plugin support (MiniBufExplorer, Tagbar, Netrw, VimPLug)
+* Filetype syntax highlighting (R, TeX, Swift, Erlang)
+* Plugin support (Tagbar, VimPlug)
Self-Promotion
--------------
diff --git a/sources_non_forked/gruvbox/autoload/airline/themes/gruvbox.vim b/sources_non_forked/gruvbox/autoload/airline/themes/gruvbox.vim
index 84793190..6862a818 100644
--- a/sources_non_forked/gruvbox/autoload/airline/themes/gruvbox.vim
+++ b/sources_non_forked/gruvbox/autoload/airline/themes/gruvbox.vim
@@ -3,7 +3,7 @@
" Description: Retro groove color scheme for Airline
" Author: morhetz
" Source: https://github.com/morhetz/gruvbox
-" Last Modified: 22 Aug 2014
+" Last Modified: 12 Aug 2017
" -----------------------------------------------------------------------------
let g:airline#themes#gruvbox#palette = {}
@@ -17,7 +17,7 @@ function! airline#themes#gruvbox#refresh()
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'], ['StatusLineNC', 'fg'])
+ 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 }
@@ -28,7 +28,7 @@ function! airline#themes#gruvbox#refresh()
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'], ['StatusLineNC', 'fg'])
+ 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
@@ -46,7 +46,7 @@ function! airline#themes#gruvbox#refresh()
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'], ['ModeMsg', 'fg'])
+ 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)
diff --git a/sources_non_forked/gruvbox/autoload/lightline/colorscheme/gruvbox.vim b/sources_non_forked/gruvbox/autoload/lightline/colorscheme/gruvbox.vim
index 78babce5..4730c094 100644
--- a/sources_non_forked/gruvbox/autoload/lightline/colorscheme/gruvbox.vim
+++ b/sources_non_forked/gruvbox/autoload/lightline/colorscheme/gruvbox.vim
@@ -3,7 +3,7 @@
" Description: Gruvbox colorscheme for Lightline (itchyny/lightline.vim)
" Author: gmoe
" Source: https://github.com/morhetz/gruvbox
-" Last Modified: 31 Oct 2015
+" Last Modified: 20 Sep 2017
" -----------------------------------------------------------------------------
function! s:getGruvColor(group)
@@ -25,21 +25,25 @@ if exists('g:lightline')
let s:blue = s:getGruvColor('GruvboxBlue')
let s:aqua = s:getGruvColor('GruvboxAqua')
let s:orange = s:getGruvColor('GruvboxOrange')
+ let s:green = s:getGruvColor('GruvboxGreen')
- let s:p = {'normal':{}, 'inactive':{}, 'insert':{}, 'replace':{}, 'visual':{}, 'tabline':{}}
- let s:p.normal.left = [ [ s:bg0, s:fg4 ], [ s:fg4, s:bg2 ] ]
+ let s:p = {'normal':{}, 'inactive':{}, 'insert':{}, 'replace':{}, 'visual':{}, 'tabline':{}, 'terminal':{}}
+ let s:p.normal.left = [ [ s:bg0, s:fg4, 'bold' ], [ s:fg4, s:bg2 ] ]
let s:p.normal.right = [ [ s:bg0, s:fg4 ], [ s:fg4, s:bg2 ] ]
let s:p.normal.middle = [ [ s:fg4, s:bg1 ] ]
let s:p.inactive.right = [ [ s:bg4, s:bg1 ], [ s:bg4, s:bg1 ] ]
let s:p.inactive.left = [ [ s:bg4, s:bg1 ], [ s:bg4, s:bg1 ] ]
let s:p.inactive.middle = [ [ s:bg4, s:bg1 ] ]
- let s:p.insert.left = [ [ s:bg0, s:blue ], [ s:fg1, s:bg2 ] ]
+ let s:p.insert.left = [ [ s:bg0, s:blue, 'bold' ], [ s:fg1, s:bg2 ] ]
let s:p.insert.right = [ [ s:bg0, s:blue ], [ s:fg1, s:bg2 ] ]
let s:p.insert.middle = [ [ s:fg4, s:bg2 ] ]
- let s:p.replace.left = [ [ s:bg0, s:aqua ], [ s:fg1, s:bg2 ] ]
+ let s:p.terminal.left = [ [ s:bg0, s:green, 'bold' ], [ s:fg1, s:bg2 ] ]
+ let s:p.terminal.right = [ [ s:bg0, s:green ], [ s:fg1, s:bg2 ] ]
+ let s:p.terminal.middle = [ [ s:fg4, s:bg2 ] ]
+ let s:p.replace.left = [ [ s:bg0, s:aqua, 'bold' ], [ s:fg1, s:bg2 ] ]
let s:p.replace.right = [ [ s:bg0, s:aqua ], [ s:fg1, s:bg2 ] ]
let s:p.replace.middle = [ [ s:fg4, s:bg2 ] ]
- let s:p.visual.left = [ [ s:bg0, s:orange ], [ s:bg0, s:bg4 ] ]
+ let s:p.visual.left = [ [ s:bg0, s:orange, 'bold' ], [ s:bg0, s:bg4 ] ]
let s:p.visual.right = [ [ s:bg0, s:orange ], [ s:bg0, s:bg4 ] ]
let s:p.visual.middle = [ [ s:fg4, s:bg1 ] ]
let s:p.tabline.left = [ [ s:fg4, s:bg2 ] ]
diff --git a/sources_non_forked/gruvbox/colors/gruvbox.vim b/sources_non_forked/gruvbox/colors/gruvbox.vim
index ebc9efff..33e5763d 100644
--- a/sources_non_forked/gruvbox/colors/gruvbox.vim
+++ b/sources_non_forked/gruvbox/colors/gruvbox.vim
@@ -3,7 +3,7 @@
" Description: Retro groove color scheme for Vim
" Author: morhetz
" Source: https://github.com/morhetz/gruvbox
-" Last Modified: 04 Sep 2015
+" Last Modified: 12 Aug 2017
" -----------------------------------------------------------------------------
" Supporting code -------------------------------------------------------------
@@ -18,7 +18,7 @@ endif
let g:colors_name='gruvbox'
-if !has('gui_running') && &t_Co != 256
+if !(has('termguicolors') && &termguicolors) && !has('gui_running') && &t_Co != 256
finish
endif
@@ -269,7 +269,35 @@ let s:gb.aqua = s:aqua
let s:gb.orange = s:orange
" }}}
+" Setup Terminal Colors For Neovim: {{{
+if has('nvim')
+ let g:terminal_color_0 = s:bg0[0]
+ let g:terminal_color_8 = s:gray[0]
+
+ let g:terminal_color_1 = s:gb.neutral_red[0]
+ let g:terminal_color_9 = s:red[0]
+
+ let g:terminal_color_2 = s:gb.neutral_green[0]
+ let g:terminal_color_10 = s:green[0]
+
+ let g:terminal_color_3 = s:gb.neutral_yellow[0]
+ let g:terminal_color_11 = s:yellow[0]
+
+ let g:terminal_color_4 = s:gb.neutral_blue[0]
+ let g:terminal_color_12 = s:blue[0]
+
+ let g:terminal_color_5 = s:gb.neutral_purple[0]
+ let g:terminal_color_13 = s:purple[0]
+
+ let g:terminal_color_6 = s:gb.neutral_aqua[0]
+ let g:terminal_color_14 = s:aqua[0]
+
+ let g:terminal_color_7 = s:fg4[0]
+ let g:terminal_color_15 = s:fg1[0]
+endif
+
+" }}}
" Overload Setting: {{{
let s:hls_cursor = s:orange
@@ -300,7 +328,7 @@ if exists('g:gruvbox_color_column')
let s:color_column = get(s:gb, g:gruvbox_color_column)
endif
-let s:vert_split = s:bg2
+let s:vert_split = s:bg0
if exists('g:gruvbox_vert_split')
let s:vert_split = get(s:gb, g:gruvbox_vert_split)
endif
@@ -451,9 +479,9 @@ if version >= 700
hi! link CursorColumn CursorLine
" Tab pages line filler
- call s:HL('TabLineFill', s:bg4, s:vim_bg, s:invert_tabline)
+ call s:HL('TabLineFill', s:bg4, s:bg1, s:invert_tabline)
" Active tab page label
- call s:HL('TabLineSel', s:vim_bg, s:bg4, s:bold . s:invert_tabline)
+ call s:HL('TabLineSel', s:green, s:bg1, s:invert_tabline)
" Not active tab page label
hi! link TabLine TabLineFill
@@ -483,11 +511,11 @@ call s:HL('IncSearch', s:hls_cursor, s:bg0, s:inverse)
call s:HL('Underlined', s:blue, s:none, s:underline)
-call s:HL('StatusLine', s:bg4, s:bg0, s:bold . s:inverse)
-call s:HL('StatusLineNC', s:bg2, s:fg4, s:bold . s:inverse)
+call s:HL('StatusLine', s:bg2, s:fg1, s:inverse)
+call s:HL('StatusLineNC', s:bg1, s:fg4, s:inverse)
" The column separating vertically split windows
-call s:HL('VertSplit', s:fg4, s:vert_split)
+call s:HL('VertSplit', s:bg3, s:vert_split)
" Current match in wildmenu completion
call s:HL('WildMenu', s:blue, s:bg2, s:bold)
@@ -541,7 +569,7 @@ hi! link lCursor Cursor
if g:gruvbox_improved_strings == 0
hi! link Special GruvboxOrange
else
- call s:HL('Special', s:bg1, s:orange, s:italic)
+ call s:HL('Special', s:orange, s:bg1, s:italicize_strings)
endif
call s:HL('Comment', s:gray, s:none, s:italicize_comments)
@@ -587,7 +615,7 @@ hi! link Character GruvboxPurple
if g:gruvbox_improved_strings == 0
call s:HL('String', s:green, s:none, s:italicize_strings)
else
- call s:HL('String', s:bg1, s:fg1, s:italicize_strings)
+ call s:HL('String', s:fg1, s:bg1, s:italicize_strings)
endif
" Boolean constant: TRUE, false
hi! link Boolean GruvboxPurple
@@ -660,10 +688,8 @@ hi! link EasyMotionShade Comment
" }}}
" Sneak: {{{
-hi! link SneakPluginTarget Search
-hi! link SneakStreakTarget Search
-call s:HL('SneakStreakMask', s:yellow, s:yellow)
-hi! link SneakStreakStatusLine Search
+autocmd ColorScheme gruvbox hi! link Sneak Search
+autocmd ColorScheme gruvbox hi! link SneakLabel Search
" }}}
" Indent Guides: {{{
@@ -779,7 +805,7 @@ call s:HL('CtrlPStats', s:fg4, s:bg2, s:bold)
" Startify: {{{
hi! link StartifyBracket GruvboxFg3
-hi! link StartifyFile GruvboxFg0
+hi! link StartifyFile GruvboxFg1
hi! link StartifyNumber GruvboxBlue
hi! link StartifyPath GruvboxGray
hi! link StartifySlash GruvboxGray
@@ -806,6 +832,62 @@ call s:HL('BufTabLineActive', s:fg4, s:bg2)
call s:HL('BufTabLineHidden', s:bg4, s:bg1)
call s:HL('BufTabLineFill', s:bg0, s:bg0)
+" }}}
+" Asynchronous Lint Engine: {{{
+
+call s:HL('ALEError', s:none, s:none, s:undercurl, s:red)
+call s:HL('ALEWarning', s:none, s:none, s:undercurl, s:yellow)
+call s:HL('ALEInfo', s:none, s:none, s:undercurl, s:blue)
+
+hi! link ALEErrorSign GruvboxRedSign
+hi! link ALEWarningSign GruvboxYellowSign
+hi! link ALEInfoSign GruvboxBlueSign
+
+" }}}
+" Dirvish: {{{
+
+hi! link DirvishPathTail GruvboxAqua
+hi! link DirvishArg GruvboxYellow
+
+" }}}
+" Netrw: {{{
+
+hi! link netrwDir GruvboxAqua
+hi! link netrwClassify GruvboxAqua
+hi! link netrwLink GruvboxGray
+hi! link netrwSymLink GruvboxFg1
+hi! link netrwExe GruvboxYellow
+hi! link netrwComment GruvboxGray
+hi! link netrwList GruvboxBlue
+hi! link netrwHelpCmd GruvboxAqua
+hi! link netrwCmdSep GruvboxFg3
+hi! link netrwVersion GruvboxGreen
+
+" }}}
+" NERDTree: {{{
+
+hi! link NERDTreeDir GruvboxAqua
+hi! link NERDTreeDirSlash GruvboxAqua
+
+hi! link NERDTreeOpenable GruvboxOrange
+hi! link NERDTreeClosable GruvboxOrange
+
+hi! link NERDTreeFile GruvboxFg1
+hi! link NERDTreeExecFile GruvboxYellow
+
+hi! link NERDTreeUp GruvboxGray
+hi! link NERDTreeCWD GruvboxGreen
+hi! link NERDTreeHelp GruvboxFg1
+
+hi! link NERDTreeToggleOn GruvboxGreen
+hi! link NERDTreeToggleOff GruvboxRed
+
+" }}}
+" Vim Multiple Cursors: {{{
+
+call s:HL('multiple_cursors_cursor', s:none, s:none, s:inverse)
+call s:HL('multiple_cursors_visual', s:none, s:bg2)
+
" }}}
" Filetype specific -----------------------------------------------------------
@@ -932,9 +1014,13 @@ hi! link pythonImport GruvboxBlue
hi! link pythonRun GruvboxBlue
hi! link pythonCoding GruvboxBlue
hi! link pythonOperator GruvboxRed
+hi! link pythonException GruvboxRed
hi! link pythonExceptions GruvboxPurple
hi! link pythonBoolean GruvboxPurple
hi! link pythonDot GruvboxFg3
+hi! link pythonConditional GruvboxRed
+hi! link pythonRepeat GruvboxRed
+hi! link pythonDottedName GruvboxGreenBold
" }}}
" CSS: {{{
@@ -999,9 +1085,24 @@ hi! link javascriptEndColons GruvboxFg1
hi! link javascriptFuncArg GruvboxFg1
hi! link javascriptGlobalMethod GruvboxFg1
hi! link javascriptNodeGlobal GruvboxFg1
+hi! link javascriptBOMWindowProp GruvboxFg1
+hi! link javascriptArrayMethod GruvboxFg1
+hi! link javascriptArrayStaticMethod GruvboxFg1
+hi! link javascriptCacheMethod GruvboxFg1
+hi! link javascriptDateMethod GruvboxFg1
+hi! link javascriptMathStaticMethod GruvboxFg1
-" hi! link javascriptVariable GruvboxOrange
-hi! link javascriptVariable GruvboxRed
+" hi! link javascriptProp GruvboxFg1
+hi! link javascriptURLUtilsProp GruvboxFg1
+hi! link javascriptBOMNavigatorProp GruvboxFg1
+hi! link javascriptDOMDocMethod GruvboxFg1
+hi! link javascriptDOMDocProp GruvboxFg1
+hi! link javascriptBOMLocationMethod GruvboxFg1
+hi! link javascriptBOMWindowMethod GruvboxFg1
+hi! link javascriptStringMethod GruvboxFg1
+
+hi! link javascriptVariable GruvboxOrange
+" hi! link javascriptVariable GruvboxRed
" hi! link javascriptIdentifier GruvboxOrange
" hi! link javascriptClassSuper GruvboxOrange
hi! link javascriptIdentifier GruvboxOrange
@@ -1030,7 +1131,7 @@ hi! link javascriptObjectLabel GruvboxFg1
hi! link javascriptPropertyName GruvboxFg1
hi! link javascriptLogicSymbols GruvboxFg1
-hi! link javascriptArrowFunc GruvboxFg1
+hi! link javascriptArrowFunc GruvboxYellow
hi! link javascriptDocParamName GruvboxFg4
hi! link javascriptDocTags GruvboxFg4
@@ -1038,11 +1139,38 @@ hi! link javascriptDocNotation GruvboxFg4
hi! link javascriptDocParamType GruvboxFg4
hi! link javascriptDocNamedParamType GruvboxFg4
+hi! link javascriptBrackets GruvboxFg1
+hi! link javascriptDOMElemAttrs GruvboxFg1
+hi! link javascriptDOMEventMethod GruvboxFg1
+hi! link javascriptDOMNodeMethod GruvboxFg1
+hi! link javascriptDOMStorageMethod GruvboxFg1
+hi! link javascriptHeadersMethod GruvboxFg1
+
+hi! link javascriptAsyncFuncKeyword GruvboxRed
+hi! link javascriptAwaitFuncKeyword GruvboxRed
+
+" }}}
+" PanglossJS: {{{
+
+hi! link jsClassKeyword GruvboxAqua
+hi! link jsExtendsKeyword GruvboxAqua
+hi! link jsExportDefault GruvboxAqua
+hi! link jsTemplateBraces GruvboxAqua
+hi! link jsGlobalNodeObjects GruvboxFg1
+hi! link jsGlobalObjects GruvboxFg1
+hi! link jsFunction GruvboxAqua
+hi! link jsFuncParens GruvboxFg3
+hi! link jsParens GruvboxFg3
+hi! link jsNull GruvboxPurple
+hi! link jsUndefined GruvboxPurple
+hi! link jsClassDefinition GruvboxYellow
+
" }}}
" TypeScript: {{{
hi! link typeScriptReserved GruvboxAqua
hi! link typeScriptLabel GruvboxAqua
+hi! link typeScriptFuncKeyword GruvboxAqua
hi! link typeScriptIdentifier GruvboxOrange
hi! link typeScriptBraces GruvboxFg1
hi! link typeScriptEndColons GruvboxFg1
@@ -1052,6 +1180,32 @@ hi! link typeScriptLogicSymbols GruvboxFg1
hi! link typeScriptDocSeeTag Comment
hi! link typeScriptDocParam Comment
hi! link typeScriptDocTags vimCommentTitle
+hi! link typeScriptGlobalObjects GruvboxFg1
+hi! link typeScriptParens GruvboxFg3
+hi! link typeScriptOpSymbols GruvboxFg3
+hi! link typeScriptHtmlElemProperties GruvboxFg1
+hi! link typeScriptNull GruvboxPurple
+hi! link typeScriptInterpolationDelimiter GruvboxAqua
+
+" }}}
+" PureScript: {{{
+
+hi! link purescriptModuleKeyword GruvboxAqua
+hi! link purescriptModuleName GruvboxFg1
+hi! link purescriptWhere GruvboxAqua
+hi! link purescriptDelimiter GruvboxFg4
+hi! link purescriptType GruvboxFg1
+hi! link purescriptImportKeyword GruvboxAqua
+hi! link purescriptHidingKeyword GruvboxAqua
+hi! link purescriptAsKeyword GruvboxAqua
+hi! link purescriptStructure GruvboxAqua
+hi! link purescriptOperator GruvboxBlue
+
+hi! link purescriptTypeVar GruvboxFg1
+hi! link purescriptConstructor GruvboxFg1
+hi! link purescriptFunction GruvboxFg1
+hi! link purescriptConditional GruvboxOrange
+hi! link purescriptBacktick GruvboxOrange
" }}}
" CoffeeScript: {{{
diff --git a/sources_non_forked/gruvbox/package.json b/sources_non_forked/gruvbox/package.json
new file mode 100644
index 00000000..355c1808
--- /dev/null
+++ b/sources_non_forked/gruvbox/package.json
@@ -0,0 +1,10 @@
+{
+ "name": "gruvbox",
+ "version": "2.0.0",
+ "repository": "git@github.com:morhetz/gruvbox.git",
+ "author": "Pavel Pertsev ",
+ "license": "MIT",
+ "vim": {
+ "opt": true
+ }
+}
diff --git a/sources_non_forked/lightline.vim/.travis.yml b/sources_non_forked/lightline.vim/.travis.yml
index 3767d735..b385a182 100644
--- a/sources_non_forked/lightline.vim/.travis.yml
+++ b/sources_non_forked/lightline.vim/.travis.yml
@@ -21,7 +21,6 @@ env:
- VIM_VERSION=8.0.0000
- VIM_VERSION=7.4
- VIM_VERSION=7.3
- - VIM_VERSION=7.2.051
script:
- export PATH=$HOME/vim-$VIM_VERSION/bin:$PATH
diff --git a/sources_non_forked/lightline.vim/README.md b/sources_non_forked/lightline.vim/README.md
index b9c1a1ae..69d0a104 100644
--- a/sources_non_forked/lightline.vim/README.md
+++ b/sources_non_forked/lightline.vim/README.md
@@ -47,8 +47,8 @@ landscape is my colorscheme, which is a high-contrast cui-supported colorscheme,
## Why yet another clone of powerline?
+ [vim-powerline](https://github.com/Lokaltog/vim-powerline) is a nice plugin, but deprecated.
-+ [powerline](https://github.com/Lokaltog/powerline) is a nice plugin, but difficult to configure.
-+ [vim-airline](https://github.com/bling/vim-airline) is a nice plugin, but it uses too much functions of other plugins, which should be done by users in `.vimrc`.
++ [powerline](https://github.com/powerline/powerline) is a nice plugin, but difficult to configure.
++ [vim-airline](https://github.com/vim-airline/vim-airline) is a nice plugin, but it uses too much functions of other plugins, which should be done by users in `.vimrc`.
## Spirit of this plugin
+ Minimalism. The core script is very small to achive enough functions as a statusline plugin.
diff --git a/sources_non_forked/lightline.vim/autoload/lightline.vim b/sources_non_forked/lightline.vim/autoload/lightline.vim
index 6bcc09b4..43cf1504 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline.vim
@@ -2,7 +2,7 @@
" Filename: autoload/lightline.vim
" Author: itchyny
" License: MIT License
-" Last Change: 2016/12/03 12:08:08.
+" Last Change: 2017/11/11 13:29:26.
" =============================================================================
let s:save_cpo = &cpo
@@ -105,7 +105,7 @@ let s:_lightline = {
\ 'paste': '%{&paste?"PASTE":""}', 'readonly': '%R', 'charvalue': '%b', 'charvaluehex': '%B',
\ 'spell': '%{&spell?&spelllang:""}', 'fileencoding': '%{&fenc!=#""?&fenc:&enc}', 'fileformat': '%{&ff}',
\ 'filetype': '%{&ft!=#""?&ft:"no ft"}', 'percent': '%3p%%', 'percentwin': '%P',
- \ 'lineinfo': '%3l:%-2v', 'line': '%l', 'column': '%c', 'close': '%999X X '
+ \ 'lineinfo': '%3l:%-2v', 'line': '%l', 'column': '%c', 'close': '%999X X ', 'winnr': '%{winnr()}'
\ },
\ 'component_visible_condition': {
\ 'modified': '&modified||!&modifiable', 'readonly': '&readonly', 'paste': '&paste', 'spell': '&spell'
@@ -118,6 +118,7 @@ let s:_lightline = {
\ 'component_type': {
\ 'tabs': 'tabsel', 'close': 'raw'
\ },
+ \ 'component_raw': {},
\ 'tab_component': {},
\ 'tab_component_function': {
\ 'filename': 'lightline#tab#filename', 'modified': 'lightline#tab#modified',
@@ -266,7 +267,7 @@ function! lightline#highlight(...) abort
let [s:lightline.llen, s:lightline.rlen] = [len(c.normal.left), len(c.normal.right)]
let [s:lightline.tab_llen, s:lightline.tab_rlen] = [len(has_key(get(c, 'tabline', {}), 'left') ? c.tabline.left : c.normal.left), len(has_key(get(c, 'tabline', {}), 'right') ? c.tabline.right : c.normal.right)]
let types = map(s:uniq(sort(filter(values(s:lightline.component_type), 'v:val !=# "raw"'))), '[v:val, 1]')
- let modes = a:0 ? [a:1] : extend(['normal', 'insert', 'replace', 'visual', 'inactive', 'command', 'select', 'tabline'], has('nvim') ? ['terminal'] : [])
+ let modes = a:0 ? [a:1] : extend(['normal', 'insert', 'replace', 'visual', 'inactive', 'command', 'select', 'tabline'], exists(':terminal') == 2 ? ['terminal'] : [])
for mode in modes
let s:highlight[mode] = 1
let d = has_key(c, mode) ? mode : has_key(f, mode) && has_key(c, f[mode]) ? f[mode] : 'normal'
@@ -338,7 +339,9 @@ endfunction
function! s:convert(name, index) abort
if has_key(s:lightline.component_expand, a:name)
let type = get(s:lightline.component_type, a:name, a:index)
- return filter(s:map(s:evaluate_expand(s:lightline.component_expand[a:name]), '[v:val, 1, v:key == 1 ? "' . type . '" : "' . a:index . '"]'), 'v:val[0] != []')
+ let is_raw = get(s:lightline.component_raw, a:name) || type ==# 'raw'
+ return filter(s:map(s:evaluate_expand(s:lightline.component_expand[a:name]),
+ \ '[v:val, 1 + ' . is_raw . ', v:key == 1 && ' . (type !=# 'raw') . ' ? "' . type . '" : "' . a:index . '"]'), 'v:val[0] != []')
else
return [[[a:name], 0, a:index]]
endif
@@ -393,7 +396,7 @@ function! s:line(tabline, inactive) abort
endif
let [l, r] = a:tabline ? [s:lightline.tab_llen, s:lightline.tab_rlen] : [s:lightline.llen, s:lightline.rlen]
let [p, s] = a:tabline ? [s:lightline.tabline_separator, s:lightline.tabline_subseparator] : [s:lightline.separator, s:lightline.subseparator]
- let [c, f, t] = [s:lightline.component, s:lightline.component_function, s:lightline.component_type]
+ let [c, f, t, w] = [s:lightline.component, s:lightline.component_function, s:lightline.component_type, s:lightline.component_raw]
let mode = a:tabline ? 'tabline' : a:inactive ? 'inactive' : 'active'
let l_ = has_key(s:lightline, mode) ? s:lightline[mode].left : s:lightline.active.left
let [lt, lc, ll] = s:expand(copy(l_))
@@ -403,7 +406,7 @@ function! s:line(tabline, inactive) abort
let _ .= '%#LightlineLeft_' . mode . '_' . ll[i] . '#'
for j in range(len(lt[i]))
let x = lc[i][j] ? lt[i][j] : has_key(f, lt[i][j]) ? (exists('*' . f[lt[i][j]]) ? '%{' . f[lt[i][j]] . '()}' : '%{exists("*' . f[lt[i][j]] . '")?' . f[lt[i][j]] . '():""}') : get(c, lt[i][j], '')
- let _ .= has_key(t, lt[i][j]) && t[lt[i][j]] ==# 'raw' || x ==# '' ? x : '%( ' . x . ' %)'
+ let _ .= has_key(t, lt[i][j]) && t[lt[i][j]] ==# 'raw' || get(w, lt[i][j]) || lc[i][j] ==# 2 || x ==# '' ? x : '%( ' . x . ' %)'
if j < len(lt[i]) - 1 && s.left !=# ''
let _ .= s:subseparator(lt[i][(j):], s.left, lc[i][(j):])
endif
@@ -418,7 +421,7 @@ function! s:line(tabline, inactive) abort
let _ .= '%#LightlineRight_' . mode . '_' . rl[i] . '#'
for j in range(len(rt[i]))
let x = rc[i][j] ? rt[i][j] : has_key(f, rt[i][j]) ? (exists('*' . f[rt[i][j]]) ? '%{' . f[rt[i][j]] . '()}' : '%{exists("*' . f[rt[i][j]] . '")?' . f[rt[i][j]] . '():""}') : get(c, rt[i][j], '')
- let _ .= has_key(t, rt[i][j]) && t[rt[i][j]] ==# 'raw' || x ==# '' ? x : '%( ' . x . ' %)'
+ let _ .= has_key(t, rt[i][j]) && t[rt[i][j]] ==# 'raw' || get(w, rt[i][j]) || rc[i][j] ==# 2 || x ==# '' ? x : '%( ' . x . ' %)'
if j < len(rt[i]) - 1 && s.right !=# ''
let _ .= s:subseparator(rt[i][(j):], s.right, rc[i][(j):])
endif
@@ -447,7 +450,7 @@ function! lightline#tabs() abort
let nr = tabpagenr()
let cnt = tabpagenr('$')
for i in range(1, cnt)
- call add(i < nr ? x : i == nr ? y : z, '%'. i . 'T%{lightline#onetab(' . i . ',' . (i == nr) . ')}' . (i == cnt ? '%T' : ''))
+ call add(i < nr ? x : i == nr ? y : z, (i > nr + 3 ? '%<' : '') . '%'. i . 'T%{lightline#onetab(' . i . ',' . (i == nr) . ')}' . (i == cnt ? '%T' : ''))
endfor
let abbr = '...'
let n = min([max([s:lightline.winwidth / 40, 2]), 8])
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme.vim
index de23eb5f..019c7cc2 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme.vim
@@ -2,7 +2,7 @@
" Filename: autoload/lightline/colorscheme.vim
" Author: itchyny
" License: MIT License
-" Last Change: 2015/03/18 08:37:17.
+" Last Change: 2017/11/29 12:54:05.
" =============================================================================
let s:save_cpo = &cpo
@@ -224,5 +224,34 @@ function! lightline#colorscheme#flatten(p) abort
return a:p
endfunction
+if has('gui_running')
+ function! lightline#colorscheme#background() abort
+ return &background
+ endfunction
+else
+ " &background is set inappropriately when the colorscheme sets ctermbg of the Normal group
+ function! lightline#colorscheme#background() abort
+ let bg_color = synIDattr(synIDtrans(hlID('Normal')), 'bg', 'cterm')
+ if bg_color !=# ''
+ if bg_color < 16
+ return &background
+ elseif 232 <= bg_color && bg_color < 244
+ return 'dark'
+ elseif 244 <= bg_color
+ return 'light'
+ endif
+ endif
+ let fg_color = synIDattr(synIDtrans(hlID('Normal')), 'fg', 'cterm')
+ if fg_color !=# ''
+ if fg_color < 8 || 232 <= fg_color && fg_color < 244
+ return 'light'
+ elseif 8 <= fg_color && fg_color < 16 || 244 <= fg_color
+ return 'dark'
+ endif
+ endif
+ return &background
+ endfunction
+endif
+
let &cpo = s:save_cpo
unlet s:save_cpo
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/16color.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/16color.vim
index 170aa93e..41e64970 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/16color.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/16color.vim
@@ -2,8 +2,9 @@
" Filename: autoload/lightline/colorscheme/16color.vim
" Author: itchyny
" License: MIT License
-" Last Change: 2014/01/02 10:04:03.
+" Last Change: 2017/11/25 11:14:04.
" =============================================================================
+
let s:base03 = [ '#808080', 8 ]
let s:base02 = [ '#000000', 0 ]
let s:base01 = [ '#00ff00', 10 ]
@@ -20,12 +21,14 @@ let s:violet = [ '#ff00ff', 13 ]
let s:blue = [ '#000080', 4 ]
let s:cyan = [ '#008080', 6 ]
let s:green = [ '#008000', 2 ]
-if &background ==# 'light'
+
+if lightline#colorscheme#background() ==# 'light'
let [s:base03, s:base3] = [s:base3, s:base03]
let [s:base02, s:base2] = [s:base2, s:base02]
let [s:base01, s:base1] = [s:base1, s:base01]
let [s:base00, s:base0] = [s:base0, s:base00]
endif
+
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
let s:p.normal.left = [ [ s:base3, s:blue ], [ s:base3, s:base01 ] ]
let s:p.normal.right = [ [ s:base02, s:base0 ], [ s:base1, s:base01 ] ]
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim
new file mode 100644
index 00000000..ff78290c
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/OldHope.vim
@@ -0,0 +1,44 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/OldHope.vim
+" Author: tomb0y
+" License: MIT License
+" Last Change: 2017/10/15 06:20:54.
+" =============================================================================
+
+let s:yellow = [ '#e5cd52' , 221 ]
+let s:blue = [ '#4fb4d8' , 39 ]
+let s:red = [ '#f92672' , 161 ]
+let s:green = [ '#78bd65' , 41 ]
+let s:orange = [ '#ef7c2a' , 202 ]
+let s:white = [ '#ffffff' , 15 ]
+let s:lightGray = [ '#848794' , 245 ]
+let s:gray = [ '#686b78' , 242 ]
+let s:darkGray = [ '#45474f' , 238 ]
+let s:veryDarkGray = [ '#1c1d21' , 234 ]
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+let s:p.normal.left = [ [ s:white, s:blue ], [ s:white, s:gray ] ]
+let s:p.insert.left = [ [ s:white, s:green ], [ s:white, s:gray ] ]
+let s:p.visual.left = [ [ s:white, s:orange ], [ s:white, s:gray ] ]
+let s:p.replace.left = [ [ s:white, s:red ], [ s:white, s:gray ] ]
+
+let s:p.inactive.right = [ [ s:darkGray, s:gray ], [ s:darkGray, s:gray ] ]
+let s:p.inactive.left = [ [ s:lightGray, s:darkGray ], [ s:white, s:darkGray ] ]
+let s:p.inactive.middle = [ [ s:white, s:darkGray ] ]
+
+let s:p.normal.middle = [ [ s:white, s:darkGray ] ]
+let s:p.normal.error = [ [ s:red, s:darkGray ] ]
+let s:p.normal.warning = [ [ s:orange, s:darkGray ] ]
+
+let s:p.tabline.left = [ [ s:lightGray, s:darkGray ] ]
+let s:p.tabline.tabsel = [ [ s:darkGray, s:yellow ] ]
+let s:p.tabline.middle = [ [ s:yellow, s:veryDarkGray ] ]
+
+let s:p.normal.right = copy(s:p.normal.left)
+let s:p.insert.right = copy(s:p.insert.left)
+let s:p.visual.right = copy(s:p.visual.left)
+let s:p.replace.right = copy(s:p.replace.left)
+let s:p.tabline.right = copy(s:p.tabline.left)
+
+let g:lightline#colorscheme#OldHope#palette = lightline#colorscheme#flatten(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim
index 429439d8..90aa426b 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/PaperColor.vim
@@ -2,10 +2,10 @@
" Filename: autoload/lightline/colorscheme/PaperColor.vim
" Author: TKNGUE
" License: MIT License
-" Last Change: 2015/07/28 07:35:00.
+" Last Change: 2017/11/25 11:13:35.
" =============================================================================
-if &background ==# 'light'
+if lightline#colorscheme#background() ==# 'light'
let g:lightline#colorscheme#PaperColor#palette = g:lightline#colorscheme#PaperColor_light#palette
else
let g:lightline#colorscheme#PaperColor#palette = g:lightline#colorscheme#PaperColor_dark#palette
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim
new file mode 100644
index 00000000..fdab2cbb
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/materia.vim
@@ -0,0 +1,63 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/materia.vim
+" Author: Lokesh Krishna
+" License: MIT License
+" Last Change: 2017/11/25 11:13:40.
+" =============================================================================
+
+" Common colors
+let s:fg = '#d5dbe5'
+let s:blue = '#89ddff'
+let s:green = '#8bd649'
+let s:purple = '#82aaff'
+let s:red1 = '#ec5f67'
+let s:red2 = '#ec5f67'
+let s:yellow = '#ffcc00'
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+if lightline#colorscheme#background() ==# 'light'
+ " Light variant
+ let s:bg = '#ffffff'
+ let s:gray1 = '#2c393f'
+ let s:gray2 = '#d5dbe5'
+ let s:gray3 = '#707880'
+
+ let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.insert.left = [ [ s:bg, s:blue, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
+else
+ " Dark variant
+ let s:bg = '#263238'
+ let s:gray1 = '#37474f'
+ let s:gray2 = '#2c393f'
+ let s:gray3 = '#37474f'
+
+ let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.insert.left = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
+endif
+
+" Common
+let s:p.normal.right = [ [ s:bg, s:green, 'bold' ], [ s:bg, s:green, 'bold' ] ]
+let s:p.normal.error = [ [ s:red2, s:bg ] ]
+let s:p.normal.warning = [ [ s:yellow, s:bg ] ]
+let s:p.insert.right = [ [ s:bg, s:blue, 'bold' ], [ s:bg, s:blue, 'bold' ] ]
+let s:p.replace.right = [ [ s:bg, s:red1, 'bold' ], [ s:bg, s:red1, 'bold' ] ]
+let s:p.visual.right = [ [ s:bg, s:purple, 'bold' ], [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.left = [ [ s:bg, s:gray3 ] ]
+let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
+let s:p.tabline.right = copy(s:p.normal.right)
+
+let g:lightline#colorscheme#materia#palette = lightline#colorscheme#fill(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim
new file mode 100644
index 00000000..0d704b7d
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/material.vim
@@ -0,0 +1,63 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/material.vim
+" Author: Lokesh Krishna
+" License: MIT License
+" Last Change: 2017/11/25 11:13:42.
+" =============================================================================
+
+" Common colors
+let s:fg = '#eeffff'
+let s:blue = '#82aaff'
+let s:green = '#c3e88d'
+let s:purple = '#c792ea'
+let s:red1 = '#f07178'
+let s:red2 = '#ff5370'
+let s:yellow = '#ffcb6b'
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+if lightline#colorscheme#background() ==# 'light'
+ " Light variant
+ let s:bg = '#ffffff'
+ let s:gray1 = '#2e3c43'
+ let s:gray2 = '#eeffff'
+ let s:gray3 = '#546e7a'
+
+ let s:p.normal.left = [ [ s:bg, s:blue, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.inactive.middle = [ [ s:gray3, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:bg, s:gray3 ], [ s:bg, s:gray3 ] ]
+ let s:p.insert.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:gray1, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
+else
+ " Dark variant
+ let s:bg = '#263238'
+ let s:gray1 = '#314549'
+ let s:gray2 = '#2E3C43'
+ let s:gray3 = '#314549'
+
+ let s:p.normal.left = [ [ s:bg, s:blue, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
+ let s:p.inactive.left = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.inactive.middle = [ [ s:gray1, s:gray2 ] ]
+ let s:p.inactive.right = [ [ s:gray1, s:bg ], [ s:gray1, s:bg ] ]
+ let s:p.insert.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.replace.left = [ [ s:bg, s:red1, 'bold' ], [ s:fg, s:gray3 ] ]
+ let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:fg, s:gray3 ] ]
+endif
+
+" Common
+let s:p.normal.right = [ [ s:bg, s:blue, 'bold' ], [ s:bg, s:blue, 'bold' ] ]
+let s:p.normal.error = [ [ s:red2, s:bg ] ]
+let s:p.normal.warning = [ [ s:yellow, s:bg ] ]
+let s:p.insert.right = [ [ s:bg, s:green, 'bold' ], [ s:bg, s:green, 'bold' ] ]
+let s:p.replace.right = [ [ s:bg, s:red1, 'bold' ], [ s:bg, s:red1, 'bold' ] ]
+let s:p.visual.right = [ [ s:bg, s:purple, 'bold' ], [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.left = [ [ s:fg, s:gray3 ] ]
+let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ]
+let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
+let s:p.tabline.right = [ [ s:bg, s:red1, 'bold' ] ]
+
+let g:lightline#colorscheme#material#palette = lightline#colorscheme#fill(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim
new file mode 100644
index 00000000..96d24aee
--- /dev/null
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/nord.vim
@@ -0,0 +1,46 @@
+" =============================================================================
+" Filename: autoload/lightline/colorscheme/nord.vim
+" Author: arcticicestudio
+" License: MIT
+" Last Change: 2017/11/12 20:27:51
+" =============================================================================
+
+let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
+
+let s:nord0 = ["#2E3440", "NONE"]
+let s:nord1 = ["#3B4252", 0]
+let s:nord2 = ["#434C5E", "NONE"]
+let s:nord3 = ["#4C566A", 8]
+let s:nord4 = ["#D8DEE9", "NONE"]
+let s:nord5 = ["#E5E9F0", 7]
+let s:nord6 = ["#ECEFF4", 15]
+let s:nord7 = ["#8FBCBB", 14]
+let s:nord8 = ["#88C0D0", 6]
+let s:nord9 = ["#81A1C1", 4]
+let s:nord10 = ["#5E81AC", 12]
+let s:nord11 = ["#BF616A", 1]
+let s:nord12 = ["#D08770", 11]
+let s:nord13 = ["#EBCB8B", 3]
+let s:nord14 = ["#A3BE8C", 2]
+let s:nord15 = ["#B48EAD", 5]
+
+let s:p.normal.left = [ [ s:nord1, s:nord8 ], [ s:nord5, s:nord1 ] ]
+let s:p.normal.middle = [ [ s:nord5, s:nord3 ] ]
+let s:p.normal.right = [ [ s:nord5, s:nord1 ], [ s:nord5, s:nord1 ] ]
+let s:p.normal.warning = [ [ s:nord1, s:nord13 ] ]
+let s:p.normal.error = [ [ s:nord1, s:nord11 ] ]
+
+let s:p.inactive.left = [ [ s:nord1, s:nord8 ], [ s:nord5, s:nord1 ] ]
+let s:p.inactive.middle = [ [ s:nord5, s:nord1 ] ]
+let s:p.inactive.right = [ [ s:nord5, s:nord1 ], [ s:nord5, s:nord1 ] ]
+
+let s:p.insert.left = [ [ s:nord1, s:nord6 ], [ s:nord5, s:nord1 ] ]
+let s:p.replace.left = [ [ s:nord1, s:nord13 ], [ s:nord5, s:nord1 ] ]
+let s:p.visual.left = [ [ s:nord1, s:nord7 ], [ s:nord5, s:nord1 ] ]
+
+let s:p.tabline.left = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.middle = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.right = [ [ s:nord5, s:nord3 ] ]
+let s:p.tabline.tabsel = [ [ s:nord1, s:nord8 ] ]
+
+let g:lightline#colorscheme#nord#palette = lightline#colorscheme#flatten(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/one.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/one.vim
index f50de8c1..a28fb8d4 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/one.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/one.vim
@@ -2,26 +2,27 @@
" Filename: autoload/lightline/colorscheme/one.vim
" Author: Zoltan Dalmadi
" License: MIT License
-" Last Change: 2016/11/2 17:34:27.
+" Last Change: 2017/11/28 21:53:01.
" =============================================================================
" Common colors
-let s:fg = '#abb2bf'
-let s:blue = '#61afef'
-let s:green = '#98c379'
-let s:purple = '#c678dd'
-let s:red1 = '#e06c75'
-let s:red2 = '#be5046'
-let s:yellow = '#e5c07b'
+let s:fg = [ '#abb2bf', 145 ]
+let s:blue = [ '#61afef', 75 ]
+let s:green = [ '#98c379', 76 ]
+let s:purple = [ '#c678dd', 176 ]
+let s:red1 = [ '#e06c75', 168 ]
+let s:red2 = [ '#be5046', 168 ]
+let s:yellow = [ '#e5c07b', 180 ]
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
-if &background ==# 'light'
+if lightline#colorscheme#background() ==# 'light'
" Light variant
- let s:bg = '#fafafa'
- let s:gray1 = '#494b53'
- let s:gray2 = '#f0f0f0'
- let s:gray3 = '#d0d0d0'
+ let s:bg = [ '#fafafa', 255 ]
+ let s:gray1 = [ '#494b53', 238 ]
+ let s:gray2 = [ '#f0f0f0', 255 ]
+ let s:gray3 = [ '#d0d0d0', 250 ]
+ let s:green = [ '#98c379', 35 ]
let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
@@ -33,10 +34,10 @@ if &background ==# 'light'
let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
else
" Dark variant
- let s:bg = '#282c34'
- let s:gray1 = '#5c6370'
- let s:gray2 = '#2c323d'
- let s:gray3 = '#3e4452'
+ let s:bg = [ '#282c34', 235 ]
+ let s:gray1 = [ '#5c6370', 241 ]
+ let s:gray2 = [ '#2c323d', 235 ]
+ let s:gray3 = [ '#3e4452', 240 ]
let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
let s:p.normal.middle = [ [ s:fg, s:gray2 ] ]
@@ -60,4 +61,4 @@ let s:p.tabline.tabsel = [ [ s:bg, s:purple, 'bold' ] ]
let s:p.tabline.middle = [ [ s:gray3, s:gray2 ] ]
let s:p.tabline.right = copy(s:p.normal.right)
-let g:lightline#colorscheme#one#palette = lightline#colorscheme#fill(s:p)
+let g:lightline#colorscheme#one#palette = lightline#colorscheme#flatten(s:p)
diff --git a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/solarized.vim b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/solarized.vim
index 577177e2..d6ee9c6b 100644
--- a/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/solarized.vim
+++ b/sources_non_forked/lightline.vim/autoload/lightline/colorscheme/solarized.vim
@@ -2,7 +2,7 @@
" Filename: autoload/lightline/colorscheme/solarized.vim
" Author: itchyny
" License: MIT License
-" Last Change: 2016/08/08 10:31:00.
+" Last Change: 2017/11/25 11:13:46.
" =============================================================================
let s:cuicolors = {
@@ -53,7 +53,7 @@ let s:blue = [ '#268bd2', s:cuicolors.blue[s:cuiindex] ]
let s:cyan = [ '#2aa198', s:cuicolors.cyan[s:cuiindex] ]
let s:green = [ '#859900', s:cuicolors.green[s:cuiindex] ]
-if &background ==# 'light'
+if lightline#colorscheme#background() ==# 'light'
let [ s:base03, s:base3 ] = [ s:base3, s:base03 ]
let [ s:base02, s:base2 ] = [ s:base2, s:base02 ]
let [ s:base01, s:base1 ] = [ s:base1, s:base01 ]
diff --git a/sources_non_forked/lightline.vim/doc/lightline.txt b/sources_non_forked/lightline.vim/doc/lightline.txt
index 0b41c12a..15c729c5 100644
--- a/sources_non_forked/lightline.vim/doc/lightline.txt
+++ b/sources_non_forked/lightline.vim/doc/lightline.txt
@@ -4,7 +4,7 @@ Version: 0.1
Author: itchyny (https://github.com/itchyny)
License: MIT License
Repository: https://github.com/itchyny/lightline.vim
-Last Change: 2017/05/28 01:07:02.
+Last Change: 2017/11/18 20:07:05.
CONTENTS *lightline-contents*
@@ -109,8 +109,9 @@ OPTIONS *lightline-option*
\ 'spell': '%{&spell?&spelllang:""}',
\ 'lineinfo': '%3l:%-2v',
\ 'line': '%l',
- \ 'column': '%c'
- \ 'close': '%999X X ' }
+ \ 'column': '%c',
+ \ 'close': '%999X X ',
+ \ 'winnr': '%{winnr()}' }
<
g:lightline.component_visible_condition
*g:lightline.component_visible_condition*
@@ -188,11 +189,22 @@ OPTIONS *lightline-option*
|g:lightline.component_expand|. The types are used to specify
the color. Specifically, the type raw is used to specify a
component which should not be wrapped by item group: %(...%).
+ If you want to specify the type of a raw component, please use
+ |g:lightline.component_raw|.
The default value is: >
let g:lightline.component_type = {
\ 'tabs': 'tabsel',
\ 'close': 'raw' }
+<
+ g:lightline.component_raw *g:lightline.component_raw*
+ A dictionary to specify the raw type components. When you
+ register a component to this dictionary (like >
+ let g:lightline.component_raw = { 'example': 1 }
+< ), the example component is not wrapped by item group: %(...%).
+ The default value is: >
+
+ let g:lightline.component_raw = {}
<
g:lightline.tab_component *g:lightline.tab_component*
A dictionary for components in one tab.
@@ -217,7 +229,7 @@ OPTIONS *lightline-option*
Currently, wombat, solarized, powerline, jellybeans, Tomorrow,
Tomorrow_Night, Tomorrow_Night_Blue, Tomorrow_Night_Eighties,
PaperColor, seoul256, landscape, one, Dracula, darcula,
- Molokai and 16color are available.
+ molokai, materia, material, OldHope, nord and 16color are available.
The default value is:
>
let g:lightline.colorscheme = 'default'
@@ -1212,7 +1224,9 @@ Problem 12: *lightline-problem-12*
Problem 13: *lightline-problem-13*
How to change the lightline colorscheme on the fly.
- Add the following settings to your .vimrc(_vimrc).
+ To update your lightline colorscheme in sync with your vim
+ colorscheme (only for select colorschemes which exist for
+ both), add the following settings to your .vimrc(_vimrc).
>
augroup LightlineColorscheme
autocmd!
@@ -1233,6 +1247,27 @@ Problem 13: *lightline-problem-13*
catch
endtry
endfunction
+<
+ If you have not settled on a single lightline colorscheme, you
+ can easily switch between lightline colorschemes by adding the
+ following LightlineColorscheme command to your .vimrc(_vimrc).
+>
+ function! s:set_lightline_colorscheme(name) abort
+ let g:lightline.colorscheme = a:name
+ call lightline#init()
+ call lightline#colorscheme()
+ call lightline#update()
+ endfunction
+
+ function! s:lightline_colorschemes(...) abort
+ return join(map(
+ \ globpath(&rtp,"autoload/lightline/colorscheme/*.vim",1,1),
+ \ "fnamemodify(v:val,':t:r')"),
+ \ "\n")
+ endfunction
+
+ command! -nargs=1 -complete=custom,s:lightline_colorschemes LightlineColorscheme
+ \ call s:set_lightline_colorscheme()
<
Problem 14: *lightline-problem-14*
The 'E541' warning appears on the right hand side.
diff --git a/sources_non_forked/lightline.vim/test/expand.vim b/sources_non_forked/lightline.vim/test/expand.vim
index 37804eed..a9c85774 100644
--- a/sources_non_forked/lightline.vim/test/expand.vim
+++ b/sources_non_forked/lightline.vim/test/expand.vim
@@ -45,6 +45,32 @@ function! s:suite.custom_type()
delfunction Custom
endfunction
+function! s:suite.raw_type()
+ function! Custom()
+ return [ ['left'], ['middle'], ['right'] ]
+ endfunction
+ let g:lightline = { 'component_expand': { 'custom': 'Custom' }, 'component_type': { 'custom': 'raw' } }
+ call lightline#init()
+ call s:assert.equals(s:expand([['readonly', 'filename'], ['custom'], ['modified']]),
+ \ [[['readonly', 'filename'], ['left', 'middle', 'right'], ['modified']], [[0, 0], [2, 2, 2], [0]], ['0', '1', '2', '3']])
+ call s:assert.equals(s:expand([['readonly', 'filename', 'custom', 'modified']]),
+ \ [[['readonly', 'filename', 'left', 'middle', 'right', 'modified']], [[0, 0, 2, 2, 2, 0]], ['0', '1']])
+ delfunction Custom
+endfunction
+
+function! s:suite.component_raw()
+ function! Custom()
+ return [ ['left'], ['middle'], ['right'] ]
+ endfunction
+ let g:lightline = { 'component_expand': { 'custom': 'Custom' }, 'component_type': { 'custom': 'custom' }, 'component_raw': { 'custom': 1 } }
+ call lightline#init()
+ call s:assert.equals(s:expand([['readonly', 'filename'], ['custom'], ['modified']]),
+ \ [[['readonly', 'filename'], ['left'], ['middle'], ['right'], ['modified']], [[0, 0], [2], [2], [2], [0]], ['0', '1', 'custom', '1', '2', '3']])
+ call s:assert.equals(s:expand([['readonly', 'filename', 'custom', 'modified']]),
+ \ [[['readonly', 'filename', 'left'], ['middle'], ['right', 'modified']], [[0, 0, 2], [2], [2, 0]], ['0', 'custom', '0', '1']])
+ delfunction Custom
+endfunction
+
function! s:suite.multiple()
function! Custom()
return [ ['x0', 'x1', 'x2'], ['y0', 'y1', 'y2'], ['z0', 'z1', 'z2'] ]
diff --git a/sources_non_forked/lightline.vim/test/tabs.vim b/sources_non_forked/lightline.vim/test/tabs.vim
index 92c2c08f..7851e705 100644
--- a/sources_non_forked/lightline.vim/test/tabs.vim
+++ b/sources_non_forked/lightline.vim/test/tabs.vim
@@ -61,7 +61,7 @@ function! s:suite.tabnew_20_tabfirst()
tabnew
endfor
tabfirst
- call s:assert.equals(lightline#tabs(), [[], [s:tab(1, 1)], [s:tab(2), s:tab(3), s:tab(4), s:tab(5), '...', s:tab(17), s:tab(18), s:tab(19), s:tab(20, 0, 1)]])
+ call s:assert.equals(lightline#tabs(), [[], [s:tab(1, 1)], [s:tab(2), s:tab(3), s:tab(4), '%<' . s:tab(5), '...', '%<' . s:tab(17), '%<' . s:tab(18), '%<' . s:tab(19), '%<' . s:tab(20, 0, 1)]])
endfunction
function! s:suite.tabnew_20_tabfirst_tabnext()
@@ -70,7 +70,7 @@ function! s:suite.tabnew_20_tabfirst_tabnext()
endfor
tabfirst
tabnext
- call s:assert.equals(lightline#tabs(), [[s:tab(1)], [s:tab(2, 1)], [s:tab(3), s:tab(4), s:tab(5), s:tab(6), '...', s:tab(18), s:tab(19), s:tab(20, 0, 1)]])
+ call s:assert.equals(lightline#tabs(), [[s:tab(1)], [s:tab(2, 1)], [s:tab(3), s:tab(4), s:tab(5), '%<' . s:tab(6), '...', '%<' . s:tab(18), '%<' . s:tab(19), '%<' . s:tab(20, 0, 1)]])
endfunction
function! s:suite.tabnew_20_tabnext_10()
@@ -78,7 +78,7 @@ function! s:suite.tabnew_20_tabnext_10()
tabnew
endfor
tabnext 10
- call s:assert.equals(lightline#tabs(), [[s:tab(1), s:tab(2), '...', s:tab(8), s:tab(9)], [s:tab(10, 1)], [s:tab(11), s:tab(12), '...', s:tab(19), s:tab(20, 0, 1)]])
+ call s:assert.equals(lightline#tabs(), [[s:tab(1), s:tab(2), '...', s:tab(8), s:tab(9)], [s:tab(10, 1)], [s:tab(11), s:tab(12), '...', '%<' . s:tab(19), '%<' . s:tab(20, 0, 1)]])
endfunction
function! s:suite.tabnew_20_tabprevious()
diff --git a/sources_forked/mru/README b/sources_non_forked/mru.vim/README
similarity index 82%
rename from sources_forked/mru/README
rename to sources_non_forked/mru.vim/README
index 4d8b9b0b..04c3a748 100644
--- a/sources_forked/mru/README
+++ b/sources_non_forked/mru.vim/README
@@ -14,6 +14,10 @@ Vim, then you should use an older version of the MRU plugin.
The recently used filenames are stored in a file specified by the Vim
MRU_File variable.
+The Github repository for the MRU plugin is available at:
+
+ http://github.com/yegappan/mru
+
Usage
To list and edit files from the MRU list, you can use the ":MRU" command.
@@ -36,7 +40,8 @@ previous window has a modified buffer or is the preview window or is used by
some other plugin, then the file is opened in a new window.
You can press the 'o' key to open the file name under the cursor in the
-MRU window in a new window.
+MRU window in a new window. You can also press instead of 'o'
+to open the file in a new window.
To open a file from the MRU window in read-only mode (view), press the 'v'
key.
@@ -46,19 +51,20 @@ file is already opened in a window in the current or in another tab, then
the cursor is moved to that tab. Otherwise, a new tab is opened.
You can open multiple files from the MRU window by specifying a count before
-pressing '' or 'v' or 'o' or 't'. You can also visually select
-multiple filenames and invoke the commands to open the files. Each selected
-file will be opened in a separate window or tab.
+pressing '' or 'v' or 'o' or 't'. You can also visually (using
+linewise visual mode) select multiple filenames and invoke the commands to
+open the files. Each selected file will be opened in a separate window or
+tab.
You can press the 'u' key in the MRU window to update the file list. This is
useful if you keep the MRU window open always.
-You can close the MRU window by pressing the 'q' key or using one of the Vim
-window commands.
+You can close the MRU window by pressing the 'q' key or the key or
+using one of the Vim window commands.
To display only files matching a pattern from the MRU list in the MRU
window, you can specify a pattern to the ":MRU" command. For example, to
-display only file names containing "vim" in them, you can use the following
+display only file names matching "vim" in them, you can use the following
command ":MRU vim". When you specify a partial file name and only one
matching filename is found, then the ":MRU" command will edit that file.
@@ -79,6 +85,16 @@ Whenever the MRU list changes, the MRU file is updated with the latest MRU
list. When you have multiple instances of Vim running at the same time, the
latest MRU list will show up in all the instances of Vim.
+The MRUFilename syntax group is used to highlight the file names in the MRU
+window. By default, this syntax group is linked to the Identifier highlight
+group. You can change the highlight group by adding the following line in
+your .vimrc:
+
+ highlight link MRUFileName LineNr
+
+The MRU buffer uses the 'mru file type. You can use this file type to add
+custom auto commands, syntax highlighting, etc.
+
Configuration
By changing the following variables you can configure the behavior of this
@@ -164,3 +180,13 @@ number of file names displayed in a single sub-menu:
let MRU_Max_Submenu_Entries = 15
+In the MRU window, the filenames are displayed in two parts. The first part
+contains the file name without the path and the second part contains the
+full path to the file in parenthesis. This format is controlled by the
+MRU_Filename_Format variable. If you prefer to change this to some other
+format, then you can modify the MRU_Filename_Format variable. For example,
+to display the full path without splitting it, you can set this variable
+as shown below:
+
+ let MRU_Filename_Format={'formatter':'v:val', 'parser':'.*'}
+
diff --git a/sources_forked/mru/plugin/mru.vim b/sources_non_forked/mru.vim/plugin/mru.vim
similarity index 87%
rename from sources_forked/mru/plugin/mru.vim
rename to sources_non_forked/mru.vim/plugin/mru.vim
index 3bcd5007..5cf7015d 100644
--- a/sources_forked/mru/plugin/mru.vim
+++ b/sources_non_forked/mru.vim/plugin/mru.vim
@@ -1,14 +1,14 @@
" File: mru.vim
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
-" Version: 3.4
-" Last Modified: April 13, 2012
-" Copyright: Copyright (C) 2003-2012 Yegappan Lakshmanan
-" Permission is hereby granted to use and distribute this code,
+" Version: 3.9
+" Last Modified: Feb 3, 2015
+" Copyright: Copyright (C) 2003-2015 Yegappan Lakshmanan
+" License: Permission is hereby granted to use and distribute this code,
" with or without modifications, provided that this copyright
" notice is copied with it. Like anything else that's free,
" mru.vim is provided *as is* and comes with no warranty of any
" kind, either expressed or implied. In no event will the copyright
-" holder be liable for any damamges resulting from the use of this
+" holder be liable for any damages resulting from the use of this
" software.
"
" Overview
@@ -25,27 +25,19 @@
" The recently used filenames are stored in a file specified by the Vim
" MRU_File variable.
"
+" The Github repository for the MRU plugin is available at:
+"
+" http://github.com/yegappan/mru
+"
" Installation
" ------------
" 1. Copy the mru.vim file to one of the following directories:
-"
" $HOME/.vim/plugin - Unix like systems
" $HOME/vimfiles/plugin - MS-Windows
" $VIM:vimfiles:plugin - Macintosh
" $VIM/vimfiles/plugin - All
-"
-" Refer to the following Vim help topics for more information about Vim
-" plugins:
-"
-" :help add-plugin
-" :help add-global-plugin
-" :help runtimepath
-"
-" 2. Set the MRU_File Vim variable in the .vimrc file to the location of a
-" file to store the most recently edited file names. This step is needed
-" only if you want to change the default MRU filename.
-" 3. Restart Vim.
-" 4. You can use the ":MRU" command to list and edit the recently used files.
+" 2. Restart Vim.
+" 3. You can use the ":MRU" command to list and edit the recently used files.
" In GUI Vim, you can use the 'File->Recent Files' menu to access the
" recently used files.
"
@@ -75,7 +67,8 @@
" some other plugin, then the file is opened in a new window.
"
" You can press the 'o' key to open the file name under the cursor in the
-" MRU window in a new window.
+" MRU window in a new window. You can also press instead of 'o'
+" to open the file in a new window.
"
" To open a file from the MRU window in read-only mode (view), press the 'v'
" key.
@@ -85,15 +78,16 @@
" the cursor is moved to that tab. Otherwise, a new tab is opened.
"
" You can open multiple files from the MRU window by specifying a count before
-" pressing '' or 'v' or 'o' or 't'. You can also visually select
-" multiple filenames and invoke the commands to open the files. Each selected
-" file will be opened in a separate window or tab.
+" pressing '' or 'v' or 'o' or 't'. You can also visually (using
+" linewise visual mode) select multiple filenames and invoke the commands to
+" open the files. Each selected file will be opened in a separate window or
+" tab.
"
" You can press the 'u' key in the MRU window to update the file list. This is
" useful if you keep the MRU window open always.
"
-" You can close the MRU window by pressing the 'q' key or using one of the Vim
-" window commands.
+" You can close the MRU window by pressing the 'q' key or the key or
+" using one of the Vim window commands.
"
" To display only files matching a pattern from the MRU list in the MRU
" window, you can specify a pattern to the ":MRU" command. For example, to
@@ -118,6 +112,16 @@
" list. When you have multiple instances of Vim running at the same time, the
" latest MRU list will show up in all the instances of Vim.
"
+" The MRUFilename syntax group is used to highlight the file names in the MRU
+" window. By default, this syntax group is linked to the Identifier highlight
+" group. You can change the highlight group by adding the following line in
+" your .vimrc:
+"
+" highlight link MRUFileName LineNr
+"
+" The MRU buffer uses the 'mru file type. You can use this file type to add
+" custom auto commands, syntax highlighting, etc.
+"
" Configuration
" -------------
" By changing the following variables you can configure the behavior of this
@@ -203,6 +207,17 @@
"
" let MRU_Max_Submenu_Entries = 15
"
+" In the MRU window, the filenames are displayed in two parts. The first part
+" contains the file name without the path and the second part contains the
+" full path to the file in parenthesis. This format is controlled by the
+" MRU_Filename_Format variable. If you prefer to change this to some other
+" format, then you can modify the MRU_Filename_Format variable. For example,
+" to display the full path without splitting it, you can set this variable
+" as shown below:
+"
+" let MRU_Filename_Format =
+" \ {'formatter':'v:val', 'parser':'.*', 'syntax': '[^/\\]\+$'}
+"
" ****************** Do not modify after this line ************************
if exists('loaded_mru')
finish
@@ -296,6 +311,21 @@ if !exists('MRU_Open_File_Use_Tabs')
let MRU_Open_File_Use_Tabs = 0
endif
+" Format of the file names displayed in the MRU window.
+" The default is to display the filename followed by the complete path to the
+" file in parenthesis. This variable controls the expressions used to format
+" and parse the path. This can be changed to display the filenames in a
+" different format. The 'formatter' specifies how to split/format the filename
+" and 'parser' specifies how to read the filename back; 'syntax' matches the
+" part to be highlighted.
+if !exists('MRU_Filename_Format')
+ let MRU_Filename_Format = {
+ \ 'formatter': 'fnamemodify(v:val, ":t") . " (" . v:val . ")"',
+ \ 'parser': '(\zs.*\ze)',
+ \ 'syntax': '^.\{-}\ze('
+ \}
+endif
+
" Control to temporarily lock the MRU list. Used to prevent files from
" getting added to the MRU list when the ':vimgrep' command is executed.
let s:mru_list_locked = 0
@@ -419,7 +449,11 @@ endfunction
" that should be escaped (for security reasons)
let s:esc_filename_chars = ' *?[{`$%#"|!<>();&' . "'\t\n"
function! s:MRU_escape_filename(fname)
- return escape(a:fname, s:esc_filename_chars)
+ if exists("*fnameescape")
+ return fnameescape(a:fname)
+ else
+ return escape(a:fname, s:esc_filename_chars)
+ endif
endfunction
" MRU_Edit_File {{{1
@@ -449,11 +483,13 @@ function! s:MRU_Edit_File(filename, sanitized)
exe winnum . 'wincmd w'
endif
else
- if &modified || &buftype != '' || &previewwindow
+ if !&hidden && (&modified || &buftype != '' || &previewwindow)
" Current buffer has unsaved changes or is a special buffer or is
- " the preview window. So open the file in a new window
+ " the preview window. The 'hidden' option is also not set.
+ " So open the file in a new window.
exe 'split ' . esc_fname
else
+ " The current file can be replaced with the selected file.
exe 'edit ' . esc_fname
endif
endif
@@ -484,7 +520,7 @@ function! s:MRU_Open_File_In_Tab(fname, esc_fname)
exe 'tabnext ' . i
else
" Open a new tab as the last tab page
- exe '999tabnew ' . a:esc_fname
+ exe '$tabnew ' . a:esc_fname
endif
endif
@@ -503,8 +539,7 @@ endfunction
" 'edit' - Edit the file as a regular file
" multi : Specifies whether a single file or multiple files need to be
" opened.
-" open_type : Specifies where to open the file. Can be one of 'useopen' or
-" 'newwin' or 'newtab'.
+" open_type : Specifies where to open the file.
" useopen - If the file is already present in a window, then
" jump to that window. Otherwise, open the file in
" the previous window.
@@ -512,21 +547,25 @@ endfunction
" newwin_vert - Open the file in a new vertical window.
" newtab - Open the file in a new tab. If the file is already
" opened in a tab, then jump to that tab.
+" preview - Open the file in the preview window
function! s:MRU_Window_Edit_File(fname, multi, edit_type, open_type)
let esc_fname = s:MRU_escape_filename(a:fname)
- if a:open_type == 'newwin_horiz'
+ if a:open_type ==# 'newwin_horiz'
" Edit the file in a new horizontally split window above the previous
" window
wincmd p
exe 'belowright new ' . esc_fname
- elseif a:open_type == 'newwin_vert'
+ elseif a:open_type ==# 'newwin_vert'
" Edit the file in a new vertically split window above the previous
" window
wincmd p
exe 'belowright vnew ' . esc_fname
- elseif a:open_type == 'newtab' || g:MRU_Open_File_Use_Tabs
+ elseif a:open_type ==# 'newtab' || g:MRU_Open_File_Use_Tabs
call s:MRU_Open_File_In_Tab(a:fname, esc_fname)
+ elseif a:open_type ==# 'preview'
+ " Edit the file in the preview window
+ exe 'topleft pedit ' . esc_fname
else
" If the selected file is already open in one of the windows,
" jump to it
@@ -553,7 +592,7 @@ function! s:MRU_Window_Edit_File(fname, multi, edit_type, open_type)
let split_window = 0
- if &modified || &previewwindow || a:multi
+ if (!&hidden && (&modified || &previewwindow)) || a:multi
" Current buffer has unsaved changes or is the preview window
" or the user is opening multiple files
" So open the file in a new window
@@ -572,13 +611,13 @@ function! s:MRU_Window_Edit_File(fname, multi, edit_type, open_type)
if split_window
" Current buffer has unsaved changes or is a special buffer or
" is the preview window. So open the file in a new window
- if a:edit_type == 'edit'
+ if a:edit_type ==# 'edit'
exe 'split ' . esc_fname
else
exe 'sview ' . esc_fname
endif
else
- if a:edit_type == 'edit'
+ if a:edit_type ==# 'edit'
exe 'edit ' . esc_fname
else
exe 'view ' . esc_fname
@@ -619,7 +658,7 @@ function! s:MRU_Select_File_Cmd(opt) range
endif
" The text in the MRU window contains the filename in parenthesis
- let file = matchstr(f, '(\zs.*\ze)')
+ let file = matchstr(f, g:MRU_Filename_Format.parser)
call s:MRU_Window_Edit_File(file, multi, edit_type, open_type)
@@ -707,17 +746,20 @@ function! s:MRU_Open_Window(...)
endif
endif
+ setlocal modifiable
+
" Mark the buffer as scratch
setlocal buftype=nofile
setlocal bufhidden=delete
setlocal noswapfile
setlocal nowrap
setlocal nobuflisted
+ " Set the 'filetype' to 'mru'. This allows the user to apply custom
+ " syntax highlighting or other changes to the MRU bufer.
+ setlocal filetype=mru
" Use fixed height for the MRU window
setlocal winfixheight
- call MRU_SetupSyntax()
-
" Setup the cpoptions properly for the maps to work
let old_cpoptions = &cpoptions
set cpoptions&vim
@@ -731,6 +773,10 @@ function! s:MRU_Open_Window(...)
\ :call MRU_Select_File_Cmd('edit,newwin_horiz')
vnoremap o
\ :call MRU_Select_File_Cmd('edit,newwin_horiz')
+ nnoremap
+ \ :call MRU_Select_File_Cmd('edit,newwin_horiz')
+ vnoremap
+ \ :call MRU_Select_File_Cmd('edit,newwin_horiz')
nnoremap O
\ :call MRU_Select_File_Cmd('edit,newwin_vert')
vnoremap O
@@ -741,6 +787,14 @@ function! s:MRU_Open_Window(...)
\ :call MRU_Select_File_Cmd('edit,newtab')
nnoremap v
\ :call MRU_Select_File_Cmd('view,useopen')
+ nnoremap p
+ \ :call MRU_Select_File_Cmd('view,preview')
+ vnoremap p
+ \ :if line("'<") == line("'>")
+ \ call MRU_Select_File_Cmd('open,preview')
+ \ else
+ \ echoerr "Only a single file can be previewed"
+ \ endif
nnoremap u :MRU
nnoremap <2-LeftMouse>
\ :call MRU_Select_File_Cmd('edit,useopen')
@@ -764,16 +818,22 @@ function! s:MRU_Open_Window(...)
endif
" Get the tail part of the file name (without the directory) and display
- " it along with the full path
- let output = map(m, 'fnamemodify(v:val, ":t") . " (" . v:val . ")"')
+ " it along with the full path in parenthesis.
+ let output = map(m, g:MRU_Filename_Format.formatter)
silent! 0put =output
" Delete the empty line at the end of the buffer
- $delete
+ silent! $delete _
" Move the cursor to the beginning of the file
normal! gg
+ " Add syntax highlighting for the file names
+ if has_key(g:MRU_Filename_Format, 'syntax')
+ exe "syntax match MRUFileName '" . g:MRU_Filename_Format.syntax . "'"
+ highlight default link MRUFileName Identifier
+ endif
+
setlocal nomodifiable
endfunction
@@ -921,7 +981,7 @@ function! s:MRU_Refresh_Menu()
let entry_cnt = len(s:MRU_files)
if entry_cnt > g:MRU_Max_Menu_Entries
" Show only MRU_Max_Menu_Entries file names in the menu
- let mru_list = s:MRU_files[1 : g:MRU_Max_Menu_Entries]
+ let mru_list = s:MRU_files[0 : g:MRU_Max_Menu_Entries - 1]
let entry_cnt = g:MRU_Max_Menu_Entries
else
let mru_list = s:MRU_files
@@ -949,16 +1009,6 @@ function! s:MRU_Refresh_Menu()
let &cpoptions = old_cpoptions
endfunction
-" Setup syntax highlight
-function! MRU_SetupSyntax()
- if has("syntax")
- syn match mruName /.\+\s/
- syn match mruDir /(.\+)/
- hi def link mruDir Folded
- hi def link mruName String
- endif
-endfunction
-
" Load the MRU list on plugin startup
call s:MRU_LoadList()
diff --git a/sources_non_forked/nerdtree/CHANGELOG b/sources_non_forked/nerdtree/CHANGELOG
index 3d377ab2..6dac46dd 100644
--- a/sources_non_forked/nerdtree/CHANGELOG
+++ b/sources_non_forked/nerdtree/CHANGELOG
@@ -1,4 +1,5 @@
Next
+ - Fix broken "t" and "T" mappings, tabs now open at end (lifecrisis) #759
- Update doc with already existing mapping variables (asnr) #699
- Fix the broken g:NERDTreeBookmarksSort setting (lifecrisis) #696
- Correct NERDTreeIgnore pattern in doc (cntoplolicon) #648
diff --git a/sources_non_forked/nerdtree/README.markdown b/sources_non_forked/nerdtree/README.markdown
index 19b841bc..879d96d4 100644
--- a/sources_non_forked/nerdtree/README.markdown
+++ b/sources_non_forked/nerdtree/README.markdown
@@ -1,56 +1,18 @@
-The NERD Tree
+The NERDTree
=============
-Intro
------
+Introduction
+------------
-The NERD tree allows you to explore your filesystem and to open files and
-directories. It presents the filesystem to you in the form of a tree which you
-manipulate with the keyboard and/or mouse. It also allows you to perform
-simple filesystem operations.
+The NERDTree is a file system explorer for the Vim editor. Using this plugin,
+users can visually browse complex directory hierarchies, quickly open files for
+reading or editing, and perform basic file system operations.
-The following features and functionality are provided by the NERD tree:
+This plugin can also be extended with custom mappings using a special API. The
+details of this API and of other NERDTree features are described in the
+included documentation.
- * Files and directories are displayed in a hierarchical tree structure
- * Different highlighting is provided for the following types of nodes:
- * files
- * directories
- * sym-links
- * windows .lnk files
- * read-only files
- * executable files
- * Many (customisable) mappings are provided to manipulate the tree:
- * Mappings to open/close/explore directory nodes
- * Mappings to open files in new/existing windows/tabs
- * Mappings to change the current root of the tree
- * Mappings to navigate around the tree
- * ...
- * Directories and files can be bookmarked.
- * Most NERD tree navigation can also be done with the mouse
- * Filtering of tree content (can be toggled at runtime)
- * custom file filters to prevent e.g. vim backup files being displayed
- * optional displaying of hidden files (. files)
- * files can be "turned off" so that only directories are displayed
- * The position and size of the NERD tree window can be customised
- * The order in which the nodes in the tree are listed can be customised.
- * A model of your filesystem is created/maintained as you explore it. This
- has several advantages:
- * All filesystem information is cached and is only re-read on demand
- * If you revisit a part of the tree that you left earlier in your
- session, the directory nodes will be opened/closed as you left them
- * The script remembers the cursor position and window position in the NERD
- tree so you can toggle it off (or just close the tree window) and then
- reopen it (with NERDTreeToggle) the NERD tree window will appear exactly
- as you left it
- * You can have a separate NERD tree for each tab, share trees across tabs,
- or a mix of both.
- * By default the script overrides the default file browser (netrw), so if
- you :edit a directory a (slightly modified) NERD tree will appear in the
- current window
- * A programmable menu system is provided (simulates right clicking on a node)
- * one default menu plugin is provided to perform basic filesystem
- operations (create/delete/move/copy files/directories)
- * There's an API for adding your own keymappings
+![NERDTree Screenshot](https://github.com/scrooloose/nerdtree/raw/master/screenshot.png)
Installation
------------
@@ -59,17 +21,15 @@ Installation
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree
-Then reload vim, run `:helptags ~/.vim/bundle/nerdtree/doc/`, and check out `:help NERD_tree.txt`.
+Then reload Vim, run `:helptags ~/.vim/bundle/nerdtree/doc/`, and check out `:help NERDTree.txt`.
#### [apt-vim](https://github.com/egalpin/apt-vim)
apt-vim install -y https://github.com/scrooloose/nerdtree.git
-
-
-Faq
----
+F.A.Q.
+------
> Is there any support for `git` flags?
diff --git a/sources_non_forked/nerdtree/autoload/nerdtree.vim b/sources_non_forked/nerdtree/autoload/nerdtree.vim
index 1d2595b0..b138c21c 100644
--- a/sources_non_forked/nerdtree/autoload/nerdtree.vim
+++ b/sources_non_forked/nerdtree/autoload/nerdtree.vim
@@ -155,6 +155,11 @@ function! nerdtree#runningWindows()
return has("win16") || has("win32") || has("win64")
endfunction
+"FUNCTION: nerdtree#runningCygwin(dir) {{{2
+function! nerdtree#runningCygwin()
+ return has("win32unix")
+endfunction
+
" SECTION: View Functions {{{1
"============================================================
diff --git a/sources_non_forked/nerdtree/autoload/nerdtree/ui_glue.vim b/sources_non_forked/nerdtree/autoload/nerdtree/ui_glue.vim
index 90ce872c..92795ca3 100644
--- a/sources_non_forked/nerdtree/autoload/nerdtree/ui_glue.vim
+++ b/sources_non_forked/nerdtree/autoload/nerdtree/ui_glue.vim
@@ -68,10 +68,10 @@ function! nerdtree#ui_glue#createDefaultBindings()
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpNextSibling, 'scope': "Node", 'callback': s."jumpToNextSibling" })
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpPrevSibling, 'scope': "Node", 'callback': s."jumpToPrevSibling" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Node", 'callback': s."openInNewTab" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Node", 'callback': s."openInNewTabSilent" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Bookmark", 'callback': s."openInNewTab" })
- call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Bookmark", 'callback': s."openInNewTabSilent" })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': 'Node', 'callback': s . 'openInNewTab' })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': 'Node', 'callback': s . 'openInNewTabSilent' })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': 'Bookmark', 'callback': s . 'openInNewTab' })
+ call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': 'Bookmark', 'callback': s . 'openInNewTabSilent' })
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "DirNode", 'callback': s."openExplorer" })
@@ -90,10 +90,15 @@ function! s:activateAll()
endif
endfunction
-"FUNCTION: s:activateDirNode() {{{1
-"handle the user activating a tree node
-function! s:activateDirNode(node)
- call a:node.activate()
+" FUNCTION: s:activateDirNode(directoryNode) {{{1
+function! s:activateDirNode(directoryNode)
+
+ if a:directoryNode.isRoot() && a:directoryNode.isOpen
+ call nerdtree#echo('cannot close tree root')
+ return
+ endif
+
+ call a:directoryNode.activate()
endfunction
"FUNCTION: s:activateFileNode() {{{1
@@ -184,24 +189,28 @@ function! s:closeChildren(node)
endfunction
" FUNCTION: s:closeCurrentDir(node) {{{1
-" closes the parent dir of the current node
+" Close the parent directory of the current node.
function! s:closeCurrentDir(node)
- let parent = a:node.parent
- while g:NERDTreeCascadeOpenSingleChildDir && !parent.isRoot()
- let childNodes = parent.getVisibleChildren()
- if len(childNodes) == 1 && childNodes[0].path.isDirectory
- let parent = parent.parent
- else
- break
- endif
- endwhile
- if parent ==# {} || parent.isRoot()
- call nerdtree#echo("cannot close tree root")
- else
- call parent.close()
- call b:NERDTree.render()
- call parent.putCursorHere(0, 0)
+
+ if a:node.isRoot()
+ call nerdtree#echo('cannot close parent of tree root')
+ return
endif
+
+ let l:parent = a:node.parent
+
+ while l:parent.isCascadable()
+ let l:parent = l:parent.parent
+ endwhile
+
+ if l:parent.isRoot()
+ call nerdtree#echo('cannot close tree root')
+ return
+ endif
+
+ call l:parent.close()
+ call b:NERDTree.render()
+ call l:parent.putCursorHere(0, 0)
endfunction
" FUNCTION: s:closeTreeWindow() {{{1
@@ -218,24 +227,30 @@ function! s:closeTreeWindow()
endif
endfunction
-" FUNCTION: s:deleteBookmark(bm) {{{1
-" if the cursor is on a bookmark, prompt to delete
-function! s:deleteBookmark(bm)
- echo "Are you sure you wish to delete the bookmark:\n\"" . a:bm.name . "\" (yN):"
+" FUNCTION: s:deleteBookmark(bookmark) {{{1
+" Prompt the user to confirm the deletion of the selected bookmark.
+function! s:deleteBookmark(bookmark)
+ let l:message = "Delete the bookmark \"" . a:bookmark.name
+ \ . "\" from the bookmark list?"
- if nr2char(getchar()) ==# 'y'
- try
- call a:bm.delete()
- call b:NERDTree.root.refresh()
- call b:NERDTree.render()
- redraw
- catch /^NERDTree/
- call nerdtree#echoWarning("Could not remove bookmark")
- endtry
- else
- call nerdtree#echo("delete aborted" )
+ let l:choices = "&Yes\n&No"
+
+ echo | redraw
+ let l:selection = confirm(l:message, l:choices, 1, 'Warning')
+
+ if l:selection != 1
+ call nerdtree#echo('bookmark not deleted')
+ return
endif
+ try
+ call a:bookmark.delete()
+ silent call b:NERDTree.root.refresh()
+ call b:NERDTree.render()
+ echo | redraw
+ catch /^NERDTree/
+ call nerdtree#echoWarning('could not remove bookmark')
+ endtry
endfunction
" FUNCTION: s:displayHelp() {{{1
@@ -246,10 +261,16 @@ function! s:displayHelp()
call b:NERDTree.ui.centerView()
endfunction
-" FUNCTION: s:findAndRevealPath() {{{1
-function! s:findAndRevealPath()
+" FUNCTION: s:findAndRevealPath(path) {{{1
+function! s:findAndRevealPath(path)
+ let l:path = a:path
+
+ if empty(l:path)
+ let l:path = expand('%:p')
+ endif
+
try
- let p = g:NERDTreePath.New(expand("%:p"))
+ let p = g:NERDTreePath.New(l:path)
catch /^NERDTree.InvalidArgumentsError/
call nerdtree#echo("no file for the current buffer")
return
@@ -404,13 +425,27 @@ function! s:jumpToLastChild(node)
endfunction
" FUNCTION: s:jumpToParent(node) {{{1
-" moves the cursor to the parent of the current node
+" Move the cursor to the parent of the specified node. For a cascade, move to
+" the parent of the cascade's highest node. At the root, do nothing.
function! s:jumpToParent(node)
- if !empty(a:node.parent)
- call a:node.parent.putCursorHere(1, 0)
+ let l:parent = a:node.parent
+
+ " If "a:node" represents a directory, back out of its cascade.
+ if a:node.path.isDirectory
+ while !empty(l:parent) && !l:parent.isRoot()
+ if index(l:parent.getCascade(), a:node) >= 0
+ let l:parent = l:parent.parent
+ else
+ break
+ endif
+ endwhile
+ endif
+
+ if !empty(l:parent)
+ call l:parent.putCursorHere(1, 0)
call b:NERDTree.ui.centerView()
else
- call nerdtree#echo("cannot jump to parent")
+ call nerdtree#echo('could not jump to parent node')
endif
endfunction
@@ -480,12 +515,14 @@ endfunction
" FUNCTION: s:openInNewTab(target) {{{1
function! s:openInNewTab(target)
- call a:target.activate({'where': 't'})
+ let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't'})
+ call l:opener.open(a:target)
endfunction
" FUNCTION: s:openInNewTabSilent(target) {{{1
function! s:openInNewTabSilent(target)
- call a:target.activate({'where': 't', 'stay': 1})
+ let l:opener = g:NERDTreeOpener.New(a:target.path, {'where': 't', 'stay': 1})
+ call l:opener.open(a:target)
endfunction
" FUNCTION: s:openNodeRecursively(node) {{{1
@@ -556,7 +593,7 @@ function! nerdtree#ui_glue#setupCommands()
command! -n=0 -bar NERDTreeClose :call g:NERDTree.Close()
command! -n=1 -complete=customlist,nerdtree#completeBookmarks -bar NERDTreeFromBookmark call g:NERDTreeCreator.CreateTabTree('')
command! -n=0 -bar NERDTreeMirror call g:NERDTreeCreator.CreateMirror()
- command! -n=0 -bar NERDTreeFind call s:findAndRevealPath()
+ command! -n=? -complete=file -bar NERDTreeFind call s:findAndRevealPath('')
command! -n=0 -bar NERDTreeFocus call NERDTreeFocus()
command! -n=0 -bar NERDTreeCWD call NERDTreeCWD()
endfunction
diff --git a/sources_non_forked/nerdtree/doc/NERD_tree.txt b/sources_non_forked/nerdtree/doc/NERDTree.txt
similarity index 99%
rename from sources_non_forked/nerdtree/doc/NERD_tree.txt
rename to sources_non_forked/nerdtree/doc/NERDTree.txt
index 427e90c7..f68880cd 100644
--- a/sources_non_forked/nerdtree/doc/NERD_tree.txt
+++ b/sources_non_forked/nerdtree/doc/NERDTree.txt
@@ -1,4 +1,4 @@
-*NERD_tree.txt* A tree explorer plugin that owns your momma!
+*NERDTree.txt* A tree explorer plugin that owns your momma!
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/bookmark.vim b/sources_non_forked/nerdtree/lib/nerdtree/bookmark.vim
index f8606ee6..45f9950e 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/bookmark.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/bookmark.vim
@@ -293,23 +293,26 @@ function! s:Bookmark.str()
endfunction
" FUNCTION: Bookmark.toRoot(nerdtree) {{{1
-" Make the node for this bookmark the new tree root
+" Set the root of the given NERDTree to the node for this Bookmark. If a node
+" for this Bookmark does not exist, a new one is initialized.
function! s:Bookmark.toRoot(nerdtree)
if self.validate()
try
- let targetNode = self.getNode(a:nerdtree, 1)
+ let l:targetNode = self.getNode(a:nerdtree, 1)
+ call l:targetNode.closeChildren()
catch /^NERDTree.BookmarkedNodeNotFoundError/
- let targetNode = g:NERDTreeFileNode.New(s:Bookmark.BookmarkFor(self.name).path, a:nerdtree)
+ let l:targetNode = g:NERDTreeFileNode.New(s:Bookmark.BookmarkFor(self.name).path, a:nerdtree)
endtry
- call a:nerdtree.changeRoot(targetNode)
+ call a:nerdtree.changeRoot(l:targetNode)
endif
endfunction
" FUNCTION: Bookmark.ToRoot(name, nerdtree) {{{1
-" Make the node for this bookmark the new tree root
+" Class method that makes the Bookmark with the given name the root of
+" specified NERDTree.
function! s:Bookmark.ToRoot(name, nerdtree)
- let bookmark = s:Bookmark.BookmarkFor(a:name)
- call bookmark.toRoot(a:nerdtree)
+ let l:bookmark = s:Bookmark.BookmarkFor(a:name)
+ call l:bookmark.toRoot(a:nerdtree)
endfunction
" FUNCTION: Bookmark.validate() {{{1
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/creator.vim b/sources_non_forked/nerdtree/lib/nerdtree/creator.vim
index 92e1abeb..047939fa 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/creator.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/creator.vim
@@ -1,11 +1,17 @@
-"CLASS: Creator
-"Creates tab/window/mirror nerdtree windows. Sets up all the window and
-"buffer options and key mappings etc.
-"============================================================
+" ============================================================================
+" CLASS: Creator
+"
+" This class is responsible for creating NERDTree instances. The new NERDTree
+" may be a tab tree, a window tree, or a mirrored tree. In the process of
+" creating a NERDTree, it sets up all of the window and buffer options and key
+" mappings etc.
+" ============================================================================
+
+
let s:Creator = {}
let g:NERDTreeCreator = s:Creator
-"FUNCTION: s:Creator._bindMappings() {{{1
+" FUNCTION: s:Creator._bindMappings() {{{1
function! s:Creator._bindMappings()
"make do the same as the activate node mapping
nnoremap :call nerdtree#ui_glue#invokeKeyMap(g:NERDTreeMapActivateNode)
@@ -22,7 +28,7 @@ function! s:Creator._bindMappings()
command! -buffer -nargs=0 WriteBookmarks call g:NERDTreeBookmark.Write()
endfunction
-"FUNCTION: s:Creator._broadcastInitEvent() {{{1
+" FUNCTION: s:Creator._broadcastInitEvent() {{{1
function! s:Creator._broadcastInitEvent()
silent doautocmd User NERDTreeInit
endfunction
@@ -32,55 +38,48 @@ function! s:Creator.BufNamePrefix()
return 'NERD_tree_'
endfunction
-"FUNCTION: s:Creator.CreateTabTree(a:name) {{{1
+" FUNCTION: s:Creator.CreateTabTree(a:name) {{{1
function! s:Creator.CreateTabTree(name)
let creator = s:Creator.New()
call creator.createTabTree(a:name)
endfunction
-"FUNCTION: s:Creator.createTabTree(a:name) {{{1
-"name: the name of a bookmark or a directory
+" FUNCTION: s:Creator.createTabTree(a:name) {{{1
+" name: the name of a bookmark or a directory
function! s:Creator.createTabTree(name)
- let path = self._pathForString(a:name)
+ let l:path = self._pathForString(a:name)
- "abort if exception was thrown (bookmark/dir doesn't exist)
- if empty(path)
+ " Abort if an exception was thrown (i.e., if the bookmark or directory
+ " does not exist).
+ if empty(l:path)
return
endif
- if path == {}
- return
- endif
-
- "if instructed to, then change the vim CWD to the dir the NERDTree is
- "inited in
+ " Obey the user's preferences for changing the working directory.
if g:NERDTreeChDirMode != 0
- call path.changeToDir()
+ call l:path.changeToDir()
endif
if g:NERDTree.ExistsForTab()
- if g:NERDTree.IsOpen()
- call g:NERDTree.Close()
- endif
-
+ call g:NERDTree.Close()
call self._removeTreeBufForTab()
endif
call self._createTreeWin()
- call self._createNERDTree(path, "tab")
+ call self._createNERDTree(l:path, 'tab')
call b:NERDTree.render()
call b:NERDTree.root.putCursorHere(0, 0)
call self._broadcastInitEvent()
endfunction
-"FUNCTION: s:Creator.CreateWindowTree(dir) {{{1
+" FUNCTION: s:Creator.CreateWindowTree(dir) {{{1
function! s:Creator.CreateWindowTree(dir)
let creator = s:Creator.New()
call creator.createWindowTree(a:dir)
endfunction
-"FUNCTION: s:Creator.createWindowTree(dir) {{{1
+" FUNCTION: s:Creator.createWindowTree(dir) {{{1
function! s:Creator.createWindowTree(dir)
try
let path = g:NERDTreePath.New(a:dir)
@@ -110,9 +109,10 @@ endfunction
" FUNCTION: s:Creator._createNERDTree(path) {{{1
function! s:Creator._createNERDTree(path, type)
let b:NERDTree = g:NERDTree.New(a:path, a:type)
- "TODO: This is kept for compatability only since many things use
- "b:NERDTreeRoot instead of the new NERDTree.root
- "Remove this one day
+
+ " TODO: This assignment is kept for compatibility reasons. Many other
+ " plugins use "b:NERDTreeRoot" instead of "b:NERDTree.root". Remove this
+ " assignment in the future.
let b:NERDTreeRoot = b:NERDTree.root
call b:NERDTree.root.open()
@@ -177,9 +177,9 @@ function! s:Creator.createMirror()
endif
endfunction
-"FUNCTION: s:Creator._createTreeWin() {{{1
-"Inits the NERD tree window. ie. opens it, sizes it, sets all the local
-"options etc
+" FUNCTION: s:Creator._createTreeWin() {{{1
+" Inits the NERD tree window. ie. opens it, sizes it, sets all the local
+" options etc
function! s:Creator._createTreeWin()
"create the nerd tree window
let splitLocation = g:NERDTreeWinPos ==# "left" ? "topleft " : "botright "
@@ -198,7 +198,7 @@ function! s:Creator._createTreeWin()
call self._setCommonBufOptions()
endfunction
-"FUNCTION: s:Creator._isBufHidden(nr) {{{1
+" FUNCTION: s:Creator._isBufHidden(nr) {{{1
function! s:Creator._isBufHidden(nr)
redir => bufs
silent ls!
@@ -207,7 +207,7 @@ function! s:Creator._isBufHidden(nr)
return bufs =~ a:nr . '..h'
endfunction
-"FUNCTION: s:Creator.New() {{{1
+" FUNCTION: s:Creator.New() {{{1
function! s:Creator.New()
let newCreator = copy(self)
return newCreator
@@ -232,8 +232,8 @@ function! s:Creator._nextBufferNumber()
return s:Creator._NextBufNum
endfunction
-"FUNCTION: s:Creator._pathForString(str) {{{1
-"find a bookmark or adirectory for the given string
+" FUNCTION: s:Creator._pathForString(str) {{{1
+" find a bookmark or adirectory for the given string
function! s:Creator._pathForString(str)
let path = {}
if g:NERDTreeBookmark.BookmarkExistsFor(a:str)
@@ -278,7 +278,7 @@ function! s:Creator._removeTreeBufForTab()
unlet t:NERDTreeBufName
endfunction
-"FUNCTION: s:Creator._setCommonBufOptions() {{{1
+" FUNCTION: s:Creator._setCommonBufOptions() {{{1
function! s:Creator._setCommonBufOptions()
"throwaway buffer options
setlocal noswapfile
@@ -310,7 +310,7 @@ function! s:Creator._setCommonBufOptions()
setlocal filetype=nerdtree
endfunction
-"FUNCTION: s:Creator._setupStatusline() {{{1
+" FUNCTION: s:Creator._setupStatusline() {{{1
function! s:Creator._setupStatusline()
if g:NERDTreeStatusline != -1
let &l:statusline = g:NERDTreeStatusline
@@ -335,19 +335,19 @@ function! s:Creator._tabpagevar(tabnr, var)
return v
endfunction
-"FUNCTION: s:Creator.ToggleTabTree(dir) {{{1
+" FUNCTION: s:Creator.ToggleTabTree(dir) {{{1
function! s:Creator.ToggleTabTree(dir)
let creator = s:Creator.New()
call creator.toggleTabTree(a:dir)
endfunction
-"FUNCTION: s:Creator.toggleTabTree(dir) {{{1
-"Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is
-"closed it is restored or initialized (if it doesnt exist)
+" FUNCTION: s:Creator.toggleTabTree(dir) {{{1
+" Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is
+" closed it is restored or initialized (if it doesnt exist)
"
-"Args:
-"dir: the full path for the root node (is only used if the NERD tree is being
-"initialized.
+" Args:
+" dir: the full path for the root node (is only used if the NERD tree is being
+" initialized.
function! s:Creator.toggleTabTree(dir)
if g:NERDTree.ExistsForTab()
if !g:NERDTree.IsOpen()
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/nerdtree.vim b/sources_non_forked/nerdtree/lib/nerdtree/nerdtree.vim
index 1404cee0..ffbc9d3c 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/nerdtree.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/nerdtree.vim
@@ -21,7 +21,7 @@ function! s:NERDTree.changeRoot(node)
"change dir to the dir of the new root if instructed to
if g:NERDTreeChDirMode ==# 2
- exec "cd " . self.root.path.str({'format': 'Edit'})
+ call self.root.path.changeToDir()
endif
call self.render()
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/opener.vim b/sources_non_forked/nerdtree/lib/nerdtree/opener.vim
index ac0f92eb..974d99d3 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/opener.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/opener.vim
@@ -1,15 +1,20 @@
-"CLASS: Opener
-"============================================================
+" ============================================================================
+" CLASS: Opener
+"
+" The Opener class defines an API for "opening" operations.
+" ============================================================================
+
+
let s:Opener = {}
let g:NERDTreeOpener = s:Opener
-"FUNCTION: s:Opener._bufInWindows(bnum){{{1
-"[[STOLEN FROM VTREEEXPLORER.VIM]]
-"Determine the number of windows open to this buffer number.
-"Care of Yegappan Lakshman. Thanks!
+" FUNCTION: s:Opener._bufInWindows(bnum) {{{1
+" [[STOLEN FROM VTREEEXPLORER.VIM]]
+" Determine the number of windows open to this buffer number.
+" Care of Yegappan Lakshman. Thanks!
"
-"Args:
-"bnum: the subject buffers buffer number
+" Args:
+" bnum: the subject buffers buffer number
function! s:Opener._bufInWindows(bnum)
let cnt = 0
let winnum = 1
@@ -26,14 +31,15 @@ function! s:Opener._bufInWindows(bnum)
return cnt
endfunction
-"FUNCTION: Opener._checkToCloseTree(newtab) {{{1
-"Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see
-"if the tree should be closed now.
+
+" FUNCTION: Opener._checkToCloseTree(newtab) {{{1
+" Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see
+" if the tree should be closed now.
"
-"Args:
-"a:newtab - boolean. If set, only close the tree now if we are opening the
-"target in a new tab. This is needed because we have to close tree before we
-"leave the tab
+" Args:
+" a:newtab - boolean. If set, only close the tree now if we are opening the
+" target in a new tab. This is needed because we have to close tree before we
+" leave the tab
function! s:Opener._checkToCloseTree(newtab)
if self._keepopen
return
@@ -44,9 +50,8 @@ function! s:Opener._checkToCloseTree(newtab)
endif
endfunction
-
-"FUNCTION: s:Opener._firstUsableWindow(){{{1
-"find the window number of the first normal window
+" FUNCTION: s:Opener._firstUsableWindow() {{{1
+" find the window number of the first normal window
function! s:Opener._firstUsableWindow()
let i = 1
while i <= winnr("$")
@@ -62,7 +67,7 @@ function! s:Opener._firstUsableWindow()
return -1
endfunction
-"FUNCTION: Opener._gotoTargetWin() {{{1
+" FUNCTION: Opener._gotoTargetWin() {{{1
function! s:Opener._gotoTargetWin()
if b:NERDTree.isWinTree()
if self._where == 'v'
@@ -89,12 +94,12 @@ function! s:Opener._gotoTargetWin()
endif
endfunction
-"FUNCTION: s:Opener._isWindowUsable(winnumber) {{{1
-"Returns 0 if opening a file from the tree in the given window requires it to
-"be split, 1 otherwise
+" FUNCTION: s:Opener._isWindowUsable(winnumber) {{{1
+" Returns 0 if opening a file from the tree in the given window requires it to
+" be split, 1 otherwise
"
-"Args:
-"winnumber: the number of the window in question
+" Args:
+" winnumber: the number of the window in question
function! s:Opener._isWindowUsable(winnumber)
"gotta split if theres only one window (i.e. the NERD tree)
if winnr("$") ==# 1
@@ -120,42 +125,33 @@ function! s:Opener._isWindowUsable(winnumber)
return !modified || self._bufInWindows(winbufnr(a:winnumber)) >= 2
endfunction
-"FUNCTION: Opener.New(path, opts) {{{1
-"Args:
-"
-"a:path: The path object that is to be opened.
-"
-"a:opts:
-"
-"A dictionary containing the following keys (all optional):
-" 'where': Specifies whether the node should be opened in new split/tab or in
-" the previous window. Can be either 'v' or 'h' or 't' (for open in
-" new tab)
-" 'reuse': if a window is displaying the file then jump the cursor there. Can
-" 'all', 'currenttab' or empty to not reuse.
-" 'keepopen': dont close the tree window
-" 'stay': open the file, but keep the cursor in the tree win
+" FUNCTION: Opener.New(path, opts) {{{1
+" Instantiate a new NERDTreeOpener object.
+" Args:
+" a:path: the path object that is to be opened
+" a:opts: a dictionary containing the following optional keys...
+" 'where': specifies whether the node should be opened in new split, in
+" a new tab or, in the last window; takes values "v", "h", or "t"
+" 'reuse': if file is already shown in a window, jump there; takes values
+" "all", "currenttab", or empty
+" 'keepopen': boolean (0 or 1); if true, the tree window will not be closed
+" 'stay': boolean (0 or 1); if true, remain in tree window after opening
function! s:Opener.New(path, opts)
- let newObj = copy(self)
+ let l:newOpener = copy(self)
- let newObj._path = a:path
- let newObj._stay = nerdtree#has_opt(a:opts, 'stay')
+ let l:newOpener._keepopen = nerdtree#has_opt(a:opts, 'keepopen')
+ let l:newOpener._nerdtree = b:NERDTree
+ let l:newOpener._path = a:path
+ let l:newOpener._reuse = has_key(a:opts, 'reuse') ? a:opts['reuse'] : ''
+ let l:newOpener._stay = nerdtree#has_opt(a:opts, 'stay')
+ let l:newOpener._where = has_key(a:opts, 'where') ? a:opts['where'] : ''
- if has_key(a:opts, 'reuse')
- let newObj._reuse = a:opts['reuse']
- else
- let newObj._reuse = ''
- endif
+ call l:newOpener._saveCursorPos()
- let newObj._keepopen = nerdtree#has_opt(a:opts, 'keepopen')
- let newObj._where = has_key(a:opts, 'where') ? a:opts['where'] : ''
- let newObj._nerdtree = b:NERDTree
- call newObj._saveCursorPos()
-
- return newObj
+ return l:newOpener
endfunction
-"FUNCTION: Opener._newSplit() {{{1
+" FUNCTION: Opener._newSplit() {{{1
function! s:Opener._newSplit()
" Save the user's settings for splitbelow and splitright
let savesplitbelow=&splitbelow
@@ -215,51 +211,62 @@ function! s:Opener._newSplit()
let &splitright=savesplitright
endfunction
-"FUNCTION: Opener._newVSplit() {{{1
+" FUNCTION: Opener._newVSplit() {{{1
function! s:Opener._newVSplit()
- let winwidth = winwidth(".")
- if winnr("$")==#1
- let winwidth = g:NERDTreeWinSize
+ let l:winwidth = winwidth('.')
+
+ if winnr('$') == 1
+ let l:winwidth = g:NERDTreeWinSize
endif
- call nerdtree#exec("wincmd p")
+ call nerdtree#exec('wincmd p')
vnew
- "resize the nerd tree back to the original size
+ let l:currentWindowNumber = winnr()
+
+ " Restore the NERDTree to its original width.
call g:NERDTree.CursorToTreeWin()
- exec("silent vertical resize ". winwidth)
- call nerdtree#exec('wincmd p')
+ execute 'silent vertical resize ' . l:winwidth
+
+ call nerdtree#exec(l:currentWindowNumber . 'wincmd w')
endfunction
-"FUNCTION: Opener.open(target) {{{1
+" FUNCTION: Opener.open(target) {{{1
function! s:Opener.open(target)
+
if self._path.isDirectory
call self._openDirectory(a:target)
- else
- call self._openFile()
+ return
endif
+
+ call self._openFile()
endfunction
-"FUNCTION: Opener._openFile() {{{1
+" FUNCTION: Opener._openFile() {{{1
function! s:Opener._openFile()
+
if self._reuseWindow()
return
endif
call self._gotoTargetWin()
- call self._path.edit()
+
if self._stay
+ silent call self._path.edit()
call self._restoreCursorPos()
+ return
endif
+
+ call self._path.edit()
endfunction
-"FUNCTION: Opener._openDirectory(node) {{{1
+" FUNCTION: Opener._openDirectory(node) {{{1
function! s:Opener._openDirectory(node)
+ call self._gotoTargetWin()
+
if self._nerdtree.isWinTree()
- call self._gotoTargetWin()
call g:NERDTreeCreator.CreateWindowTree(a:node.path.str())
else
- call self._gotoTargetWin()
if empty(self._where)
call b:NERDTree.changeRoot(a:node)
elseif self._where == 't'
@@ -274,7 +281,7 @@ function! s:Opener._openDirectory(node)
endif
endfunction
-"FUNCTION: Opener._previousWindow() {{{1
+" FUNCTION: Opener._previousWindow() {{{1
function! s:Opener._previousWindow()
if !self._isWindowUsable(winnr("#")) && self._firstUsableWindow() ==# -1
call self._newSplit()
@@ -294,16 +301,16 @@ function! s:Opener._previousWindow()
endif
endfunction
-"FUNCTION: Opener._restoreCursorPos(){{{1
+" FUNCTION: Opener._restoreCursorPos() {{{1
function! s:Opener._restoreCursorPos()
call nerdtree#exec('normal ' . self._tabnr . 'gt')
call nerdtree#exec(bufwinnr(self._bufnr) . 'wincmd w')
endfunction
-"FUNCTION: Opener._reuseWindow(){{{1
-"put the cursor in the first window we find for this file
+" FUNCTION: Opener._reuseWindow() {{{1
+" put the cursor in the first window we find for this file
"
-"return 1 if we were successful
+" return 1 if we were successful
function! s:Opener._reuseWindow()
if empty(self._reuse)
return 0
@@ -334,7 +341,7 @@ function! s:Opener._reuseWindow()
return 0
endfunction
-"FUNCTION: Opener._saveCursorPos(){{{1
+" FUNCTION: Opener._saveCursorPos() {{{1
function! s:Opener._saveCursorPos()
let self._bufnr = bufnr("")
let self._tabnr = tabpagenr()
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/path.vim b/sources_non_forked/nerdtree/lib/nerdtree/path.vim
index b884ec60..3e7c9133 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/path.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/path.vim
@@ -1,13 +1,20 @@
-"we need to use this number many times for sorting... so we calculate it only
-"once here
-let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
+" ============================================================================
+" CLASS: Path
+"
+" The Path class provides an abstracted representation of a file system
+" pathname. Various operations on pathnames are provided and a number of
+" representations of a given path name can be accessed here.
+" ============================================================================
+
+
+" This constant is used throughout this script for sorting purposes.
+let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
+lockvar s:NERDTreeSortStarIndex
-"CLASS: Path
-"============================================================
let s:Path = {}
let g:NERDTreePath = s:Path
-"FUNCTION: Path.AbsolutePathFor(str) {{{1
+" FUNCTION: Path.AbsolutePathFor(str) {{{1
function! s:Path.AbsolutePathFor(str)
let prependCWD = 0
if nerdtree#runningWindows()
@@ -24,7 +31,7 @@ function! s:Path.AbsolutePathFor(str)
return toReturn
endfunction
-"FUNCTION: Path.bookmarkNames() {{{1
+" FUNCTION: Path.bookmarkNames() {{{1
function! s:Path.bookmarkNames()
if !exists("self._bookmarkNames")
call self.cacheDisplayString()
@@ -32,7 +39,7 @@ function! s:Path.bookmarkNames()
return self._bookmarkNames
endfunction
-"FUNCTION: Path.cacheDisplayString() {{{1
+" FUNCTION: Path.cacheDisplayString() {{{1
function! s:Path.cacheDisplayString() abort
let self.cachedDisplayString = self.getLastPathComponent(1)
@@ -59,7 +66,7 @@ function! s:Path.cacheDisplayString() abort
endif
endfunction
-"FUNCTION: Path.changeToDir() {{{1
+" FUNCTION: Path.changeToDir() {{{1
function! s:Path.changeToDir()
let dir = self.str({'format': 'Cd'})
if self.isDirectory ==# 0
@@ -74,16 +81,16 @@ function! s:Path.changeToDir()
endtry
endfunction
-"FUNCTION: Path.compareTo() {{{1
+" FUNCTION: Path.compareTo() {{{1
"
-"Compares this Path to the given path and returns 0 if they are equal, -1 if
-"this Path is "less than" the given path, or 1 if it is "greater".
+" Compares this Path to the given path and returns 0 if they are equal, -1 if
+" this Path is "less than" the given path, or 1 if it is "greater".
"
-"Args:
-"path: the path object to compare this to
+" Args:
+" path: the path object to compare this to
"
-"Return:
-"1, -1 or 0
+" Return:
+" 1, -1 or 0
function! s:Path.compareTo(path)
let thisPath = self.getLastPathComponent(1)
let thatPath = a:path.getLastPathComponent(1)
@@ -118,16 +125,16 @@ function! s:Path.compareTo(path)
endif
endfunction
-"FUNCTION: Path.Create(fullpath) {{{1
+" FUNCTION: Path.Create(fullpath) {{{1
"
-"Factory method.
+" Factory method.
"
-"Creates a path object with the given path. The path is also created on the
-"filesystem. If the path already exists, a NERDTree.Path.Exists exception is
-"thrown. If any other errors occur, a NERDTree.Path exception is thrown.
+" Creates a path object with the given path. The path is also created on the
+" filesystem. If the path already exists, a NERDTree.Path.Exists exception is
+" thrown. If any other errors occur, a NERDTree.Path exception is thrown.
"
-"Args:
-"fullpath: the full filesystem path to the file/dir to create
+" Args:
+" fullpath: the full filesystem path to the file/dir to create
function! s:Path.Create(fullpath)
"bail if the a:fullpath already exists
if isdirectory(a:fullpath) || filereadable(a:fullpath)
@@ -155,12 +162,12 @@ function! s:Path.Create(fullpath)
return s:Path.New(a:fullpath)
endfunction
-"FUNCTION: Path.copy(dest) {{{1
+" FUNCTION: Path.copy(dest) {{{1
"
-"Copies the file/dir represented by this Path to the given location
+" Copies the file/dir represented by this Path to the given location
"
-"Args:
-"dest: the location to copy this dir/file to
+" Args:
+" dest: the location to copy this dir/file to
function! s:Path.copy(dest)
if !s:Path.CopyingSupported()
throw "NERDTree.CopyingNotSupportedError: Copying is not supported on this OS"
@@ -181,20 +188,20 @@ function! s:Path.copy(dest)
endif
endfunction
-"FUNCTION: Path.CopyingSupported() {{{1
+" FUNCTION: Path.CopyingSupported() {{{1
"
-"returns 1 if copying is supported for this OS
+" returns 1 if copying is supported for this OS
function! s:Path.CopyingSupported()
return exists('g:NERDTreeCopyCmd') || (exists('g:NERDTreeCopyDirCmd') && exists('g:NERDTreeCopyFileCmd'))
endfunction
-"FUNCTION: Path.copyingWillOverwrite(dest) {{{1
+" FUNCTION: Path.copyingWillOverwrite(dest) {{{1
"
-"returns 1 if copy this path to the given location will cause files to
-"overwritten
+" returns 1 if copy this path to the given location will cause files to
+" overwritten
"
-"Args:
-"dest: the location this path will be copied to
+" Args:
+" dest: the location this path will be copied to
function! s:Path.copyingWillOverwrite(dest)
if filereadable(a:dest)
return 1
@@ -208,13 +215,13 @@ function! s:Path.copyingWillOverwrite(dest)
endif
endfunction
-"FUNCTION: Path.createParentDirectories(path) {{{1
+" FUNCTION: Path.createParentDirectories(path) {{{1
"
-"create parent directories for this path if needed
-"without throwing any errors if those directories already exist
+" create parent directories for this path if needed
+" without throwing any errors if those directories already exist
"
-"Args:
-"path: full path of the node whose parent directories may need to be created
+" Args:
+" path: full path of the node whose parent directories may need to be created
function! s:Path.createParentDirectories(path)
let dir_path = fnamemodify(a:path, ':h')
if !isdirectory(dir_path)
@@ -222,11 +229,11 @@ function! s:Path.createParentDirectories(path)
endif
endfunction
-"FUNCTION: Path.delete() {{{1
+" FUNCTION: Path.delete() {{{1
"
-"Deletes the file or directory represented by this path.
+" Deletes the file or directory represented by this path.
"
-"Throws NERDTree.Path.Deletion exceptions
+" Throws NERDTree.Path.Deletion exceptions
function! s:Path.delete()
if self.isDirectory
@@ -250,10 +257,10 @@ function! s:Path.delete()
endfor
endfunction
-"FUNCTION: Path.displayString() {{{1
+" FUNCTION: Path.displayString() {{{1
"
-"Returns a string that specifies how the path should be represented as a
-"string
+" Returns a string that specifies how the path should be represented as a
+" string
function! s:Path.displayString()
if self.cachedDisplayString ==# ""
call self.cacheDisplayString()
@@ -262,14 +269,14 @@ function! s:Path.displayString()
return self.cachedDisplayString
endfunction
-"FUNCTION: Path.edit() {{{1
+" FUNCTION: Path.edit() {{{1
function! s:Path.edit()
exec "edit " . self.str({'format': 'Edit'})
endfunction
-"FUNCTION: Path.extractDriveLetter(fullpath) {{{1
+" FUNCTION: Path.extractDriveLetter(fullpath) {{{1
"
-"If running windows, cache the drive letter for this path
+" If running windows, cache the drive letter for this path
function! s:Path.extractDriveLetter(fullpath)
if nerdtree#runningWindows()
if a:fullpath =~ '^\(\\\\\|\/\/\)'
@@ -285,14 +292,14 @@ function! s:Path.extractDriveLetter(fullpath)
endfunction
-"FUNCTION: Path.exists() {{{1
-"return 1 if this path points to a location that is readable or is a directory
+" FUNCTION: Path.exists() {{{1
+" return 1 if this path points to a location that is readable or is a directory
function! s:Path.exists()
let p = self.str()
return filereadable(p) || isdirectory(p)
endfunction
-"FUNCTION: Path._escChars() {{{1
+" FUNCTION: Path._escChars() {{{1
function! s:Path._escChars()
if nerdtree#runningWindows()
return " `\|\"#%&,?()\*^<>$"
@@ -301,12 +308,12 @@ function! s:Path._escChars()
return " \\`\|\"#%&,?()\*^<>[]$"
endfunction
-"FUNCTION: Path.getDir() {{{1
+" FUNCTION: Path.getDir() {{{1
"
-"Returns this path if it is a directory, else this paths parent.
+" Returns this path if it is a directory, else this paths parent.
"
-"Return:
-"a Path object
+" Return:
+" a Path object
function! s:Path.getDir()
if self.isDirectory
return self
@@ -315,12 +322,12 @@ function! s:Path.getDir()
endif
endfunction
-"FUNCTION: Path.getParent() {{{1
+" FUNCTION: Path.getParent() {{{1
"
-"Returns a new path object for this paths parent
+" Returns a new path object for this paths parent
"
-"Return:
-"a new Path object
+" Return:
+" a new Path object
function! s:Path.getParent()
if nerdtree#runningWindows()
let path = self.drive . '\' . join(self.pathSegments[0:-2], '\')
@@ -331,13 +338,13 @@ function! s:Path.getParent()
return s:Path.New(path)
endfunction
-"FUNCTION: Path.getLastPathComponent(dirSlash) {{{1
+" FUNCTION: Path.getLastPathComponent(dirSlash) {{{1
"
-"Gets the last part of this path.
+" Gets the last part of this path.
"
-"Args:
-"dirSlash: if 1 then a trailing slash will be added to the returned value for
-"directory nodes.
+" Args:
+" dirSlash: if 1 then a trailing slash will be added to the returned value for
+" directory nodes.
function! s:Path.getLastPathComponent(dirSlash)
if empty(self.pathSegments)
return ''
@@ -349,8 +356,8 @@ function! s:Path.getLastPathComponent(dirSlash)
return toReturn
endfunction
-"FUNCTION: Path.getSortOrderIndex() {{{1
-"returns the index of the pattern in g:NERDTreeSortOrder that this path matches
+" FUNCTION: Path.getSortOrderIndex() {{{1
+" returns the index of the pattern in g:NERDTreeSortOrder that this path matches
function! s:Path.getSortOrderIndex()
let i = 0
while i < len(g:NERDTreeSortOrder)
@@ -362,8 +369,8 @@ function! s:Path.getSortOrderIndex()
return s:NERDTreeSortStarIndex
endfunction
-"FUNCTION: Path._splitChunks(path) {{{1
-"returns a list of path chunks
+" FUNCTION: Path._splitChunks(path) {{{1
+" returns a list of path chunks
function! s:Path._splitChunks(path)
let chunks = split(a:path, '\(\D\+\|\d\+\)\zs')
let i = 0
@@ -377,8 +384,8 @@ function! s:Path._splitChunks(path)
return chunks
endfunction
-"FUNCTION: Path.getSortKey() {{{1
-"returns a key used in compare function for sorting
+" FUNCTION: Path.getSortKey() {{{1
+" returns a key used in compare function for sorting
function! s:Path.getSortKey()
if !exists("self._sortKey")
let path = self.getLastPathComponent(1)
@@ -399,14 +406,14 @@ function! s:Path.getSortKey()
endfunction
-"FUNCTION: Path.isUnixHiddenFile() {{{1
-"check for unix hidden files
+" FUNCTION: Path.isUnixHiddenFile() {{{1
+" check for unix hidden files
function! s:Path.isUnixHiddenFile()
return self.getLastPathComponent(0) =~# '^\.'
endfunction
-"FUNCTION: Path.isUnixHiddenPath() {{{1
-"check for unix path with hidden components
+" FUNCTION: Path.isUnixHiddenPath() {{{1
+" check for unix path with hidden components
function! s:Path.isUnixHiddenPath()
if self.getLastPathComponent(0) =~# '^\.'
return 1
@@ -420,8 +427,8 @@ function! s:Path.isUnixHiddenPath()
endif
endfunction
-"FUNCTION: Path.ignore(nerdtree) {{{1
-"returns true if this path should be ignored
+" FUNCTION: Path.ignore(nerdtree) {{{1
+" returns true if this path should be ignored
function! s:Path.ignore(nerdtree)
"filter out the user specified paths to ignore
if a:nerdtree.ui.isIgnoreFilterEnabled()
@@ -450,8 +457,8 @@ function! s:Path.ignore(nerdtree)
return 0
endfunction
-"FUNCTION: Path._ignorePatternMatches(pattern) {{{1
-"returns true if this path matches the given ignore pattern
+" FUNCTION: Path._ignorePatternMatches(pattern) {{{1
+" returns true if this path matches the given ignore pattern
function! s:Path._ignorePatternMatches(pattern)
let pat = a:pattern
if strpart(pat,len(pat)-7) == '[[dir]]'
@@ -469,10 +476,10 @@ function! s:Path._ignorePatternMatches(pattern)
return self.getLastPathComponent(0) =~# pat
endfunction
-"FUNCTION: Path.isAncestor(path) {{{1
-"return 1 if this path is somewhere above the given path in the filesystem.
+" FUNCTION: Path.isAncestor(path) {{{1
+" return 1 if this path is somewhere above the given path in the filesystem.
"
-"a:path should be a dir
+" a:path should be a dir
function! s:Path.isAncestor(path)
if !self.isDirectory
return 0
@@ -483,8 +490,8 @@ function! s:Path.isAncestor(path)
return stridx(that, this) == 0
endfunction
-"FUNCTION: Path.isUnder(path) {{{1
-"return 1 if this path is somewhere under the given path in the filesystem.
+" FUNCTION: Path.isUnder(path) {{{1
+" return 1 if this path is somewhere under the given path in the filesystem.
function! s:Path.isUnder(path)
if a:path.isDirectory == 0
return 0
@@ -495,7 +502,7 @@ function! s:Path.isUnder(path)
return stridx(this, that . s:Path.Slash()) == 0
endfunction
-"FUNCTION: Path.JoinPathStrings(...) {{{1
+" FUNCTION: Path.JoinPathStrings(...) {{{1
function! s:Path.JoinPathStrings(...)
let components = []
for i in a:000
@@ -504,19 +511,19 @@ function! s:Path.JoinPathStrings(...)
return '/' . join(components, '/')
endfunction
-"FUNCTION: Path.equals() {{{1
+" FUNCTION: Path.equals() {{{1
"
-"Determines whether 2 path objects are "equal".
-"They are equal if the paths they represent are the same
+" Determines whether 2 path objects are "equal".
+" They are equal if the paths they represent are the same
"
-"Args:
-"path: the other path obj to compare this with
+" Args:
+" path: the other path obj to compare this with
function! s:Path.equals(path)
return self.str() ==# a:path.str()
endfunction
-"FUNCTION: Path.New() {{{1
-"The Constructor for the Path object
+" FUNCTION: Path.New() {{{1
+" The Constructor for the Path object
function! s:Path.New(path)
let newPath = copy(self)
@@ -528,26 +535,37 @@ function! s:Path.New(path)
return newPath
endfunction
-"FUNCTION: Path.Slash() {{{1
-"return the slash to use for the current OS
+" FUNCTION: Path.Slash() {{{1
+" Return the path separator used by the underlying file system. Special
+" consideration is taken for the use of the 'shellslash' option on Windows
+" systems.
function! s:Path.Slash()
- return nerdtree#runningWindows() ? '\' : '/'
+
+ if nerdtree#runningWindows()
+ if exists('+shellslash') && &shellslash
+ return '/'
+ endif
+
+ return '\'
+ endif
+
+ return '/'
endfunction
-"FUNCTION: Path.Resolve() {{{1
-"Invoke the vim resolve() function and return the result
-"This is necessary because in some versions of vim resolve() removes trailing
-"slashes while in other versions it doesn't. This always removes the trailing
-"slash
+" FUNCTION: Path.Resolve() {{{1
+" Invoke the vim resolve() function and return the result
+" This is necessary because in some versions of vim resolve() removes trailing
+" slashes while in other versions it doesn't. This always removes the trailing
+" slash
function! s:Path.Resolve(path)
let tmp = resolve(a:path)
return tmp =~# '.\+/$' ? substitute(tmp, '/$', '', '') : tmp
endfunction
-"FUNCTION: Path.readInfoFromDisk(fullpath) {{{1
+" FUNCTION: Path.readInfoFromDisk(fullpath) {{{1
"
"
-"Throws NERDTree.Path.InvalidArguments exception.
+" Throws NERDTree.Path.InvalidArguments exception.
function! s:Path.readInfoFromDisk(fullpath)
call self.extractDriveLetter(a:fullpath)
@@ -598,22 +616,22 @@ function! s:Path.readInfoFromDisk(fullpath)
endif
endfunction
-"FUNCTION: Path.refresh(nerdtree) {{{1
+" FUNCTION: Path.refresh(nerdtree) {{{1
function! s:Path.refresh(nerdtree)
call self.readInfoFromDisk(self.str())
call g:NERDTreePathNotifier.NotifyListeners('refresh', self, a:nerdtree, {})
call self.cacheDisplayString()
endfunction
-"FUNCTION: Path.refreshFlags(nerdtree) {{{1
+" FUNCTION: Path.refreshFlags(nerdtree) {{{1
function! s:Path.refreshFlags(nerdtree)
call g:NERDTreePathNotifier.NotifyListeners('refreshFlags', self, a:nerdtree, {})
call self.cacheDisplayString()
endfunction
-"FUNCTION: Path.rename() {{{1
+" FUNCTION: Path.rename() {{{1
"
-"Renames this node on the filesystem
+" Renames this node on the filesystem
function! s:Path.rename(newPath)
if a:newPath ==# ''
throw "NERDTree.InvalidArgumentsError: Invalid newPath for renaming = ". a:newPath
@@ -632,28 +650,28 @@ function! s:Path.rename(newPath)
call g:NERDTreeBookmark.Write()
endfunction
-"FUNCTION: Path.str() {{{1
+" FUNCTION: Path.str() {{{1
+" Return a string representation of this Path object.
"
-"Returns a string representation of this Path
+" Args:
+" This function takes a single dictionary (optional) with keys and values that
+" specify how the returned pathname should be formatted.
"
-"Takes an optional dictionary param to specify how the output should be
-"formatted.
-"
-"The dict may have the following keys:
+" The dictionary may have the following keys:
" 'format'
" 'escape'
" 'truncateTo'
"
-"The 'format' key may have a value of:
-" 'Cd' - a string to be used with the :cd command
-" 'Edit' - a string to be used with :e :sp :new :tabedit etc
-" 'UI' - a string used in the NERD tree UI
+" The 'format' key may have a value of:
+" 'Cd' - a string to be used with ":cd" and similar commands
+" 'Edit' - a string to be used with ":edit" and similar commands
+" 'UI' - a string to be displayed in the NERDTree user interface
"
-"The 'escape' key, if specified will cause the output to be escaped with
-"shellescape()
+" The 'escape' key, if specified, will cause the output to be escaped with
+" Vim's internal "shellescape()" function.
"
-"The 'truncateTo' key causes the resulting string to be truncated to the value
-"'truncateTo' maps to. A '<' char will be prepended.
+" The 'truncateTo' key shortens the length of the path to that given by the
+" value associated with 'truncateTo'. A '<' is prepended.
function! s:Path.str(...)
let options = a:0 ? a:1 : {}
let toReturn = ""
@@ -688,7 +706,7 @@ function! s:Path.str(...)
return toReturn
endfunction
-"FUNCTION: Path._strForUI() {{{1
+" FUNCTION: Path._strForUI() {{{1
function! s:Path._strForUI()
let toReturn = '/' . join(self.pathSegments, '/')
if self.isDirectory && toReturn != '/'
@@ -697,37 +715,37 @@ function! s:Path._strForUI()
return toReturn
endfunction
-"FUNCTION: Path._strForCd() {{{1
-"
-" returns a string that can be used with :cd
+" FUNCTION: Path._strForCd() {{{1
+" Return a string representation of this Path that is suitable for use as an
+" argument to Vim's internal ":cd" command.
function! s:Path._strForCd()
- return escape(self.str(), self._escChars())
+ return fnameescape(self.str())
endfunction
-"FUNCTION: Path._strForEdit() {{{1
-"
-"Return: the string for this path that is suitable to be used with the :edit
-"command
+" FUNCTION: Path._strForEdit() {{{1
+" Return a string representation of this Path that is suitable for use as an
+" argument to Vim's internal ":edit" command.
function! s:Path._strForEdit()
- let p = escape(self.str(), self._escChars())
- "make it relative
- let p = fnamemodify(p, ':.')
+ " Make the path relative to the current working directory, if possible.
+ let l:result = fnamemodify(self.str(), ':.')
- "handle the edge case where the file begins with a + (vim interprets
- "the +foo in `:e +foo` as an option to :edit)
- if p[0] == "+"
- let p = '\' . p
+ " On Windows, the drive letter may be removed by "fnamemodify()". Add it
+ " back, if necessary.
+ if nerdtree#runningWindows() && l:result[0] == s:Path.Slash()
+ let l:result = self.drive . l:result
endif
- if p ==# ''
- let p = '.'
+ let l:result = fnameescape(l:result)
+
+ if empty(l:result)
+ let l:result = '.'
endif
- return p
+ return l:result
endfunction
-"FUNCTION: Path._strForGlob() {{{1
+" FUNCTION: Path._strForGlob() {{{1
function! s:Path._strForGlob()
let lead = s:Path.Slash()
@@ -744,24 +762,22 @@ function! s:Path._strForGlob()
return toReturn
endfunction
-"FUNCTION: Path._str() {{{1
-"
-"Gets the string path for this path object that is appropriate for the OS.
-"EG, in windows c:\foo\bar
-" in *nix /foo/bar
+" FUNCTION: Path._str() {{{1
+" Return the absolute pathname associated with this Path object. The pathname
+" returned is appropriate for the underlying file system.
function! s:Path._str()
- let lead = s:Path.Slash()
+ let l:separator = s:Path.Slash()
+ let l:leader = l:separator
- "if we are running windows then slap a drive letter on the front
if nerdtree#runningWindows()
- let lead = self.drive . '\'
+ let l:leader = self.drive . l:separator
endif
- return lead . join(self.pathSegments, s:Path.Slash())
+ return l:leader . join(self.pathSegments, l:separator)
endfunction
-"FUNCTION: Path.strTrunk() {{{1
-"Gets the path without the last segment on the end.
+" FUNCTION: Path.strTrunk() {{{1
+" Gets the path without the last segment on the end.
function! s:Path.strTrunk()
return self.drive . '/' . join(self.pathSegments[0:-2], '/')
endfunction
@@ -782,13 +798,13 @@ function! s:Path.tabnr()
return 0
endfunction
-"FUNCTION: Path.WinToUnixPath(pathstr){{{1
-"Takes in a windows path and returns the unix equiv
+" FUNCTION: Path.WinToUnixPath(pathstr){{{1
+" Takes in a windows path and returns the unix equiv
"
-"A class level method
+" A class level method
"
-"Args:
-"pathstr: the windows path to convert
+" Args:
+" pathstr: the windows path to convert
function! s:Path.WinToUnixPath(pathstr)
if !nerdtree#runningWindows()
return a:pathstr
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim b/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim
index 61f72e4a..03c3545b 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/tree_dir_node.vim
@@ -21,12 +21,19 @@ function! s:TreeDirNode.AbsoluteTreeRoot()
endfunction
" FUNCTION: TreeDirNode.activate([options]) {{{1
-unlet s:TreeDirNode.activate
function! s:TreeDirNode.activate(...)
- let opts = a:0 ? a:1 : {}
- call self.toggleOpen(opts)
- call self.getNerdtree().render()
- call self.putCursorHere(0, 0)
+ let l:options = (a:0 > 0) ? a:1 : {}
+
+ call self.toggleOpen(l:options)
+
+ " Note that we only re-render the NERDTree for this node if we did NOT
+ " create a new node and render it in a new window or tab. In the latter
+ " case, rendering the NERDTree for this node could overwrite the text of
+ " the new NERDTree!
+ if !has_key(l:options, 'where') || empty(l:options['where'])
+ call self.getNerdtree().render()
+ call self.putCursorHere(0, 0)
+ endif
endfunction
" FUNCTION: TreeDirNode.addChild(treenode, inOrder) {{{1
@@ -45,18 +52,23 @@ function! s:TreeDirNode.addChild(treenode, inOrder)
endfunction
" FUNCTION: TreeDirNode.close() {{{1
-" Closes this directory
+" Mark this TreeDirNode as closed.
function! s:TreeDirNode.close()
- let self.isOpen = 0
+
+ " Close all directories in this directory node's cascade. This is
+ " necessary to ensure consistency when cascades are rendered.
+ for l:dirNode in self.getCascade()
+ let l:dirNode.isOpen = 0
+ endfor
endfunction
" FUNCTION: TreeDirNode.closeChildren() {{{1
-" Closes all the child dir nodes of this node
+" Recursively close any directory nodes that are descendants of this node.
function! s:TreeDirNode.closeChildren()
- for i in self.children
- if i.path.isDirectory
- call i.close()
- call i.closeChildren()
+ for l:child in self.children
+ if l:child.path.isDirectory
+ call l:child.close()
+ call l:child.closeChildren()
endif
endfor
endfunction
@@ -78,19 +90,29 @@ function! s:TreeDirNode.createChild(path, inOrder)
endfunction
" FUNCTION: TreeDirNode.displayString() {{{1
-unlet s:TreeDirNode.displayString
+" Assemble and return a string that can represent this TreeDirNode object in
+" the NERDTree window.
function! s:TreeDirNode.displayString()
- let cascade = self.getCascade()
- let rv = ""
- for node in cascade
- let rv = rv . node.path.displayString()
+ let l:result = ''
+
+ " Build a label that identifies this TreeDirNode.
+ let l:label = ''
+ let l:cascade = self.getCascade()
+ for l:dirNode in l:cascade
+ let l:label .= l:dirNode.path.displayString()
endfor
- let sym = cascade[-1].isOpen ? g:NERDTreeDirArrowCollapsible : g:NERDTreeDirArrowExpandable
+ " Select the appropriate open/closed status indicator symbol.
+ if l:cascade[-1].isOpen
+ let l:symbol = g:NERDTreeDirArrowCollapsible
+ else
+ let l:symbol = g:NERDTreeDirArrowExpandable
+ endif
- let flags = cascade[-1].path.flagSet.renderToString()
+ let l:flags = l:cascade[-1].path.flagSet.renderToString()
- return sym . ' ' . flags . rv
+ let l:result = l:symbol . ' ' . l:flags . l:label
+ return l:result
endfunction
" FUNCTION: TreeDirNode.findNode(path) {{{1
@@ -205,13 +227,6 @@ function! s:TreeDirNode.getChildIndex(path)
return -1
endfunction
-" FUNCTION: TreeDirNode.getDirChildren() {{{1
-" Return a list of all child nodes from "self.children" that are of type
-" TreeDirNode.
-function! s:TreeDirNode.getDirChildren()
- return filter(self.children, 'v:val.path.isDirectory == 1')
-endfunction
-
" FUNCTION: TreeDirNode._glob(pattern, all) {{{1
" Return a list of strings naming the descendants of the directory in this
" TreeDirNode object that match the specified glob pattern.
@@ -235,7 +250,7 @@ function! s:TreeDirNode._glob(pattern, all)
let l:pathSpec = fnamemodify(self.path.str({'format': 'Glob'}), ':.')
" On Windows, the drive letter may be removed by "fnamemodify()".
- if nerdtree#runningWindows() && l:pathSpec[0] == '\'
+ if nerdtree#runningWindows() && l:pathSpec[0] == g:NERDTreePath.Slash()
let l:pathSpec = self.path.drive . l:pathSpec
endif
endif
@@ -400,25 +415,39 @@ function! s:TreeDirNode.New(path, nerdtree)
return newTreeNode
endfunction
-" FUNCTION: TreeDirNode.open([opts]) {{{1
-" Open the dir in the current tree or in a new tree elsewhere.
-"
-" If opening in the current tree, return the number of cached nodes.
-unlet s:TreeDirNode.open
+" FUNCTION: TreeDirNode.open([options]) {{{1
+" Open this directory node in the current tree or elsewhere if special options
+" are provided. Return 0 if options were processed. Otherwise, return the
+" number of new cached nodes.
function! s:TreeDirNode.open(...)
- let opts = a:0 ? a:1 : {}
+ let l:options = a:0 ? a:1 : {}
- if has_key(opts, 'where') && !empty(opts['where'])
- let opener = g:NERDTreeOpener.New(self.path, opts)
- call opener.open(self)
- else
- let self.isOpen = 1
- if self.children ==# []
- return self._initChildren(0)
- else
- return 0
- endif
+ " If special options were specified, process them and return.
+ if has_key(l:options, 'where') && !empty(l:options['where'])
+ let l:opener = g:NERDTreeOpener.New(self.path, l:options)
+ call l:opener.open(self)
+ return 0
endif
+
+ " Open any ancestors of this node that render within the same cascade.
+ let l:parent = self.parent
+ while !empty(l:parent) && !l:parent.isRoot()
+ if index(l:parent.getCascade(), self) >= 0
+ let l:parent.isOpen = 1
+ let l:parent = l:parent.parent
+ else
+ break
+ endif
+ endwhile
+
+ let self.isOpen = 1
+
+ let l:numChildrenCached = 0
+ if empty(self.children)
+ let l:numChildrenCached = self._initChildren(0)
+ endif
+
+ return l:numChildrenCached
endfunction
" FUNCTION: TreeDirNode.openAlong([opts]) {{{1
@@ -463,35 +492,16 @@ function! s:TreeDirNode._openInNewTab()
endfunction
" FUNCTION: TreeDirNode.openRecursively() {{{1
-" Opens this treenode and all of its children whose paths arent 'ignored'
-" because of the file filters.
-"
-" This method is actually a wrapper for the OpenRecursively2 method which does
-" the work.
+" Open this directory node and any descendant directory nodes whose pathnames
+" are not ignored.
function! s:TreeDirNode.openRecursively()
- call self._openRecursively2(1)
-endfunction
+ silent call self.open()
-" FUNCTION: TreeDirNode._openRecursively2() {{{1
-" Opens this all children of this treenode recursively if either:
-" *they arent filtered by file filters
-" *a:forceOpen is 1
-"
-" Args:
-" forceOpen: 1 if this node should be opened regardless of file filters
-function! s:TreeDirNode._openRecursively2(forceOpen)
- if self.path.ignore(self.getNerdtree()) ==# 0 || a:forceOpen
- let self.isOpen = 1
- if self.children ==# []
- call self._initChildren(1)
+ for l:child in self.children
+ if l:child.path.isDirectory && !l:child.path.ignore(l:child.getNerdtree())
+ call l:child.openRecursively()
endif
-
- for i in self.children
- if i.path.isDirectory ==# 1
- call i._openRecursively2(0)
- endif
- endfor
- endif
+ endfor
endfunction
" FUNCTION: TreeDirNode.refresh() {{{1
diff --git a/sources_non_forked/nerdtree/lib/nerdtree/ui.vim b/sources_non_forked/nerdtree/lib/nerdtree/ui.vim
index e169dbbf..ad7bd190 100644
--- a/sources_non_forked/nerdtree/lib/nerdtree/ui.vim
+++ b/sources_non_forked/nerdtree/lib/nerdtree/ui.vim
@@ -21,7 +21,7 @@ endfunction
"prints out the quick help
function! s:UI._dumpHelp()
if self.getShowHelp()
- let help = "\" NERD tree (" . nerdtree#version() . ") quickhelp~\n"
+ let help = "\" NERDTree (" . nerdtree#version() . ") quickhelp~\n"
let help .= "\" ============================\n"
let help .= "\" File node mappings~\n"
let help .= "\" ". (g:NERDTreeMouseMode ==# 3 ? "single" : "double") ."-click,\n"
@@ -47,6 +47,8 @@ function! s:UI._dumpHelp()
let help .= "\" ". (g:NERDTreeMouseMode ==# 1 ? "double" : "single") ."-click,\n"
let help .= "\" ". g:NERDTreeMapActivateNode .": open & close node\n"
let help .= "\" ". g:NERDTreeMapOpenRecursively .": recursively open node\n"
+ let help .= "\" ". g:NERDTreeMapOpenInTab.": open in new tab\n"
+ let help .= "\" ". g:NERDTreeMapOpenInTabSilent .": open in new tab silently\n"
let help .= "\" ". g:NERDTreeMapCloseDir .": close parent of node\n"
let help .= "\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n"
let help .= "\" current node recursively\n"
@@ -162,20 +164,14 @@ function! s:UI.getPath(ln)
let indent = self._indentLevelFor(line)
"remove the tree parts and the leading space
- let curFile = self._stripMarkup(line, 0)
-
- let wasdir = 0
- if curFile =~# '/$'
- let wasdir = 1
- let curFile = substitute(curFile, '/\?$', '/', "")
- endif
+ let curFile = self._stripMarkup(line)
let dir = ""
let lnum = a:ln
while lnum > 0
let lnum = lnum - 1
let curLine = getline(lnum)
- let curLineStripped = self._stripMarkup(curLine, 1)
+ let curLineStripped = self._stripMarkup(curLine)
"have we reached the top of the tree?
if lnum == rootLine
@@ -226,7 +222,7 @@ function! s:UI.getLineNum(file_node)
let indent = self._indentLevelFor(curLine)
if indent ==# curPathComponent
- let curLine = self._stripMarkup(curLine, 1)
+ let curLine = self._stripMarkup(curLine)
let curPath = join(pathcomponents, '/') . '/' . curLine
if stridx(fullpath, curPath, 0) ==# 0
@@ -364,14 +360,12 @@ function! s:UI.setShowHidden(val)
let self._showHidden = a:val
endfunction
-"FUNCTION: s:UI._stripMarkup(line, removeLeadingSpaces){{{1
+"FUNCTION: s:UI._stripMarkup(line){{{1
"returns the given line with all the tree parts stripped off
"
"Args:
"line: the subject line
-"removeLeadingSpaces: 1 if leading spaces are to be removed (leading spaces =
-"any spaces before the actual text of the node)
-function! s:UI._stripMarkup(line, removeLeadingSpaces)
+function! s:UI._stripMarkup(line)
let line = a:line
"remove the tree parts and the leading space
let line = substitute (line, g:NERDTreeUI.MarkupReg(),"","")
@@ -388,18 +382,7 @@ function! s:UI._stripMarkup(line, removeLeadingSpaces)
"strip off any generic flags
let line = substitute (line, '\[[^]]*\]', "","")
- let wasdir = 0
- if line =~# '/$'
- let wasdir = 1
- endif
let line = substitute (line,' -> .*',"","") " remove link to
- if wasdir ==# 1
- let line = substitute (line, '/\?$', '/', "")
- endif
-
- if a:removeLeadingSpaces
- let line = substitute (line, '^ *', '', '')
- endif
return line
endfunction
diff --git a/sources_non_forked/nerdtree/nerdtree_plugin/fs_menu.vim b/sources_non_forked/nerdtree/nerdtree_plugin/fs_menu.vim
index e563a947..3bb11dba 100644
--- a/sources_non_forked/nerdtree/nerdtree_plugin/fs_menu.vim
+++ b/sources_non_forked/nerdtree/nerdtree_plugin/fs_menu.vim
@@ -55,7 +55,22 @@ function! s:promptToDelBuffer(bufnum, msg)
" Is not it better to close single tabs with this file only ?
let s:originalTabNumber = tabpagenr()
let s:originalWindowNumber = winnr()
- exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec ':enew! ' | endif"
+ " Go to the next buffer in buffer list if at least one extra buffer is listed
+ " Otherwise open a new empty buffer
+ if v:version >= 800
+ let l:listedBufferCount = len(getbufinfo({'buflisted':1}))
+ elseif v:version >= 702
+ let l:listedBufferCount = len(filter(range(1, bufnr('$')), 'buflisted(v:val)'))
+ else
+ " Ignore buffer count in this case to make sure we keep the old
+ " behavior
+ let l:listedBufferCount = 0
+ endif
+ if l:listedBufferCount > 1
+ exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec ':bnext! ' | endif"
+ else
+ exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec ':enew! ' | endif"
+ endif
exec "tabnext " . s:originalTabNumber
exec s:originalWindowNumber . "wincmd w"
" 3. We don't need a previous buffer anymore
@@ -202,24 +217,60 @@ endfunction
" FUNCTION: NERDTreeListNode() {{{1
function! NERDTreeListNode()
let treenode = g:NERDTreeFileNode.GetSelected()
- if treenode != {}
- let metadata = split(system('ls -ld ' . shellescape(treenode.path.str())), '\n')
+ if !empty(treenode)
+ if has("osx")
+ let stat_cmd = 'stat -f "%z" '
+ else
+ let stat_cmd = 'stat -c "%s" '
+ endif
+
+ let cmd = 'size=$(' . stat_cmd . shellescape(treenode.path.str()) . ') && ' .
+ \ 'size_with_commas=$(echo $size | sed -e :a -e "s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta") && ' .
+ \ 'ls -ld ' . shellescape(treenode.path.str()) . ' | sed -e "s/ $size / $size_with_commas /"'
+
+ let metadata = split(system(cmd),'\n')
call nerdtree#echo(metadata[0])
else
- call nerdtree#echo("No information avaialable")
+ call nerdtree#echo("No information available")
endif
endfunction
" FUNCTION: NERDTreeListNodeWin32() {{{1
function! NERDTreeListNodeWin32()
- let treenode = g:NERDTreeFileNode.GetSelected()
- if treenode != {}
- let metadata = split(system('DIR /Q ' . shellescape(treenode.path.str()) . ' | FINDSTR "^[012][0-9]/[0-3][0-9]/[12][0-9][0-9][0-9]"'), '\n')
- call nerdtree#echo(metadata[0])
- else
- call nerdtree#echo("No information avaialable")
+ let l:node = g:NERDTreeFileNode.GetSelected()
+
+ if !empty(l:node)
+
+ let l:save_shell = &shell
+ set shell&
+
+ if exists('+shellslash')
+ let l:save_shellslash = &shellslash
+ set noshellslash
+ endif
+
+ let l:command = 'DIR /Q '
+ \ . shellescape(l:node.path.str())
+ \ . ' | FINDSTR "^[012][0-9]/[0-3][0-9]/[12][0-9][0-9][0-9]"'
+
+ let l:metadata = split(system(l:command), "\n")
+
+ if v:shell_error == 0
+ call nerdtree#echo(l:metadata[0])
+ else
+ call nerdtree#echoError('shell command failed')
+ endif
+
+ let &shell = l:save_shell
+
+ if exists('l:save_shellslash')
+ let &shellslash = l:save_shellslash
+ endif
+
+ return
endif
+ call nerdtree#echo('node not recognized')
endfunction
" FUNCTION: NERDTreeCopyNode() {{{1
diff --git a/sources_non_forked/nerdtree/plugin/NERD_tree.vim b/sources_non_forked/nerdtree/plugin/NERD_tree.vim
index 7eeb682c..35b47c38 100644
--- a/sources_non_forked/nerdtree/plugin/NERD_tree.vim
+++ b/sources_non_forked/nerdtree/plugin/NERD_tree.vim
@@ -69,7 +69,7 @@ call s:initVariable("g:NERDTreeShowHidden", 0)
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
call s:initVariable("g:NERDTreeSortDirs", 1)
-if !nerdtree#runningWindows()
+if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
call s:initVariable("g:NERDTreeDirArrowExpandable", "▸")
call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾")
else
diff --git a/sources_non_forked/nerdtree/screenshot.png b/sources_non_forked/nerdtree/screenshot.png
new file mode 100644
index 00000000..c410c5db
Binary files /dev/null and b/sources_non_forked/nerdtree/screenshot.png differ
diff --git a/sources_non_forked/nerdtree/syntax/nerdtree.vim b/sources_non_forked/nerdtree/syntax/nerdtree.vim
index e93ca1df..7c80605c 100644
--- a/sources_non_forked/nerdtree/syntax/nerdtree.vim
+++ b/sources_non_forked/nerdtree/syntax/nerdtree.vim
@@ -8,7 +8,7 @@ execute "syn match NERDTreeUp #\\V". s:tree_up_dir_line ."#"
"quickhelp syntax elements
syn match NERDTreeHelpKey #" \{1,2\}[^ ]*:#ms=s+2,me=e-1
syn match NERDTreeHelpKey #" \{1,2\}[^ ]*,#ms=s+2,me=e-1
-syn match NERDTreeHelpTitle #" .*\~#ms=s+2,me=e-1
+syn match NERDTreeHelpTitle #" .*\~$#ms=s+2,me=e-1
syn match NERDTreeToggleOn #(on)#ms=s+1,he=e-1
syn match NERDTreeToggleOff #(off)#ms=e-3,me=e-1
syn match NERDTreeHelpCommand #" :.\{-}\>#hs=s+3
@@ -22,8 +22,8 @@ syn match NERDTreeLinkDir #.*/ ->#me=e-3 containedin=NERDTreeDir
"highlighing for directory nodes and file nodes
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
-exec 'syn match NERDTreeClosable #'.escape(g:NERDTreeDirArrowCollapsible, '~').'# containedin=NERDTreeDir,NERDTreeFile'
-exec 'syn match NERDTreeOpenable #'.escape(g:NERDTreeDirArrowExpandable, '~').'# containedin=NERDTreeDir,NERDTreeFile'
+exec 'syn match NERDTreeClosable #' . escape(g:NERDTreeDirArrowCollapsible, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
+exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
diff --git a/sources_non_forked/nginx-vim-syntax/README.md b/sources_non_forked/nginx-vim-syntax/README.md
deleted file mode 100644
index 2893faf6..00000000
--- a/sources_non_forked/nginx-vim-syntax/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# nginx syntax files for Vim.
-
-*NOTE*: As of Dec. 2013, these scripts are maintained in the "contrib" directory of the Nginx source:
-
-* http://hg.nginx.org/nginx/rev/f38043bd15f5
-
-You can see the original vim.org version here:
-
-* http://www.vim.org/scripts/script.php?script_id=1886
-
diff --git a/sources_non_forked/nginx-vim-syntax/syntax/nginx.vim b/sources_non_forked/nginx-vim-syntax/syntax/nginx.vim
deleted file mode 100644
index 50d809bc..00000000
--- a/sources_non_forked/nginx-vim-syntax/syntax/nginx.vim
+++ /dev/null
@@ -1,703 +0,0 @@
-" Vim syntax file
-" Language: nginx.conf
-
-if exists("b:current_syntax")
- finish
-end
-
-setlocal iskeyword+=.
-setlocal iskeyword+=/
-setlocal iskeyword+=:
-
-syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
-syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
-syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
-syn region ngxBlock start=+^+ end=+{+ skip=+\${+ contains=ngxComment,ngxDirectiveBlock,ngxVariableBlock,ngxString oneline
-syn region ngxString start=+\z(["']\)+ end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString
-syn match ngxComment ' *#.*$'
-
-syn keyword ngxBoolean on
-syn keyword ngxBoolean off
-
-syn keyword ngxDirectiveBlock http contained
-syn keyword ngxDirectiveBlock mail contained
-syn keyword ngxDirectiveBlock events contained
-syn keyword ngxDirectiveBlock server contained
-syn keyword ngxDirectiveBlock types contained
-syn keyword ngxDirectiveBlock location contained
-syn keyword ngxDirectiveBlock upstream contained
-syn keyword ngxDirectiveBlock charset_map contained
-syn keyword ngxDirectiveBlock limit_except contained
-syn keyword ngxDirectiveBlock if contained
-syn keyword ngxDirectiveBlock geo contained
-syn keyword ngxDirectiveBlock map contained
-
-syn keyword ngxDirectiveImportant include
-syn keyword ngxDirectiveImportant root
-syn keyword ngxDirectiveImportant server
-syn keyword ngxDirectiveImportant server_name
-syn keyword ngxDirectiveImportant listen
-syn keyword ngxDirectiveImportant internal
-syn keyword ngxDirectiveImportant proxy_pass
-syn keyword ngxDirectiveImportant memcached_pass
-syn keyword ngxDirectiveImportant fastcgi_pass
-syn keyword ngxDirectiveImportant try_files
-
-syn keyword ngxDirectiveControl break
-syn keyword ngxDirectiveControl return
-syn keyword ngxDirectiveControl rewrite
-syn keyword ngxDirectiveControl set
-
-syn keyword ngxDirectiveError error_page
-syn keyword ngxDirectiveError post_action
-
-syn keyword ngxDirectiveDeprecated connections
-syn keyword ngxDirectiveDeprecated imap
-syn keyword ngxDirectiveDeprecated open_file_cache_retest
-syn keyword ngxDirectiveDeprecated optimize_server_names
-syn keyword ngxDirectiveDeprecated satisfy_any
-
-syn keyword ngxDirective accept_mutex
-syn keyword ngxDirective accept_mutex_delay
-syn keyword ngxDirective access_log
-syn keyword ngxDirective add_after_body
-syn keyword ngxDirective add_before_body
-syn keyword ngxDirective add_header
-syn keyword ngxDirective addition_types
-syn keyword ngxDirective aio
-syn keyword ngxDirective alias
-syn keyword ngxDirective allow
-syn keyword ngxDirective ancient_browser
-syn keyword ngxDirective ancient_browser_value
-syn keyword ngxDirective auth_basic
-syn keyword ngxDirective auth_basic_user_file
-syn keyword ngxDirective auth_http
-syn keyword ngxDirective auth_http_header
-syn keyword ngxDirective auth_http_timeout
-syn keyword ngxDirective autoindex
-syn keyword ngxDirective autoindex_exact_size
-syn keyword ngxDirective autoindex_localtime
-syn keyword ngxDirective charset
-syn keyword ngxDirective charset_types
-syn keyword ngxDirective client_body_buffer_size
-syn keyword ngxDirective client_body_in_file_only
-syn keyword ngxDirective client_body_in_single_buffer
-syn keyword ngxDirective client_body_temp_path
-syn keyword ngxDirective client_body_timeout
-syn keyword ngxDirective client_header_buffer_size
-syn keyword ngxDirective client_header_timeout
-syn keyword ngxDirective client_max_body_size
-syn keyword ngxDirective connection_pool_size
-syn keyword ngxDirective create_full_put_path
-syn keyword ngxDirective daemon
-syn keyword ngxDirective dav_access
-syn keyword ngxDirective dav_methods
-syn keyword ngxDirective debug_connection
-syn keyword ngxDirective debug_points
-syn keyword ngxDirective default_type
-syn keyword ngxDirective degradation
-syn keyword ngxDirective degrade
-syn keyword ngxDirective deny
-syn keyword ngxDirective devpoll_changes
-syn keyword ngxDirective devpoll_events
-syn keyword ngxDirective directio
-syn keyword ngxDirective directio_alignment
-syn keyword ngxDirective empty_gif
-syn keyword ngxDirective env
-syn keyword ngxDirective epoll_events
-syn keyword ngxDirective error_log
-syn keyword ngxDirective eventport_events
-syn keyword ngxDirective expires
-syn keyword ngxDirective fastcgi_bind
-syn keyword ngxDirective fastcgi_buffer_size
-syn keyword ngxDirective fastcgi_buffers
-syn keyword ngxDirective fastcgi_busy_buffers_size
-syn keyword ngxDirective fastcgi_cache
-syn keyword ngxDirective fastcgi_cache_key
-syn keyword ngxDirective fastcgi_cache_methods
-syn keyword ngxDirective fastcgi_cache_min_uses
-syn keyword ngxDirective fastcgi_cache_path
-syn keyword ngxDirective fastcgi_cache_use_stale
-syn keyword ngxDirective fastcgi_cache_valid
-syn keyword ngxDirective fastcgi_catch_stderr
-syn keyword ngxDirective fastcgi_connect_timeout
-syn keyword ngxDirective fastcgi_hide_header
-syn keyword ngxDirective fastcgi_ignore_client_abort
-syn keyword ngxDirective fastcgi_ignore_headers
-syn keyword ngxDirective fastcgi_index
-syn keyword ngxDirective fastcgi_intercept_errors
-syn keyword ngxDirective fastcgi_max_temp_file_size
-syn keyword ngxDirective fastcgi_next_upstream
-syn keyword ngxDirective fastcgi_param
-syn keyword ngxDirective fastcgi_pass_header
-syn keyword ngxDirective fastcgi_pass_request_body
-syn keyword ngxDirective fastcgi_pass_request_headers
-syn keyword ngxDirective fastcgi_read_timeout
-syn keyword ngxDirective fastcgi_send_lowat
-syn keyword ngxDirective fastcgi_send_timeout
-syn keyword ngxDirective fastcgi_split_path_info
-syn keyword ngxDirective fastcgi_store
-syn keyword ngxDirective fastcgi_store_access
-syn keyword ngxDirective fastcgi_temp_file_write_size
-syn keyword ngxDirective fastcgi_temp_path
-syn keyword ngxDirective fastcgi_upstream_fail_timeout
-syn keyword ngxDirective fastcgi_upstream_max_fails
-syn keyword ngxDirective flv
-syn keyword ngxDirective geoip_city
-syn keyword ngxDirective geoip_country
-syn keyword ngxDirective google_perftools_profiles
-syn keyword ngxDirective gzip
-syn keyword ngxDirective gzip_buffers
-syn keyword ngxDirective gzip_comp_level
-syn keyword ngxDirective gzip_disable
-syn keyword ngxDirective gzip_hash
-syn keyword ngxDirective gzip_http_version
-syn keyword ngxDirective gzip_min_length
-syn keyword ngxDirective gzip_no_buffer
-syn keyword ngxDirective gzip_proxied
-syn keyword ngxDirective gzip_static
-syn keyword ngxDirective gzip_types
-syn keyword ngxDirective gzip_vary
-syn keyword ngxDirective gzip_window
-syn keyword ngxDirective if_modified_since
-syn keyword ngxDirective ignore_invalid_headers
-syn keyword ngxDirective image_filter
-syn keyword ngxDirective image_filter_buffer
-syn keyword ngxDirective image_filter_jpeg_quality
-syn keyword ngxDirective image_filter_transparency
-syn keyword ngxDirective imap_auth
-syn keyword ngxDirective imap_capabilities
-syn keyword ngxDirective imap_client_buffer
-syn keyword ngxDirective index
-syn keyword ngxDirective ip_hash
-syn keyword ngxDirective keepalive_requests
-syn keyword ngxDirective keepalive_timeout
-syn keyword ngxDirective kqueue_changes
-syn keyword ngxDirective kqueue_events
-syn keyword ngxDirective large_client_header_buffers
-syn keyword ngxDirective limit_conn
-syn keyword ngxDirective limit_conn_log_level
-syn keyword ngxDirective limit_rate
-syn keyword ngxDirective limit_rate_after
-syn keyword ngxDirective limit_req
-syn keyword ngxDirective limit_req_log_level
-syn keyword ngxDirective limit_req_zone
-syn keyword ngxDirective limit_zone
-syn keyword ngxDirective lingering_time
-syn keyword ngxDirective lingering_timeout
-syn keyword ngxDirective lock_file
-syn keyword ngxDirective log_format
-syn keyword ngxDirective log_not_found
-syn keyword ngxDirective log_subrequest
-syn keyword ngxDirective map_hash_bucket_size
-syn keyword ngxDirective map_hash_max_size
-syn keyword ngxDirective master_process
-syn keyword ngxDirective memcached_bind
-syn keyword ngxDirective memcached_buffer_size
-syn keyword ngxDirective memcached_connect_timeout
-syn keyword ngxDirective memcached_next_upstream
-syn keyword ngxDirective memcached_read_timeout
-syn keyword ngxDirective memcached_send_timeout
-syn keyword ngxDirective memcached_upstream_fail_timeout
-syn keyword ngxDirective memcached_upstream_max_fails
-syn keyword ngxDirective merge_slashes
-syn keyword ngxDirective min_delete_depth
-syn keyword ngxDirective modern_browser
-syn keyword ngxDirective modern_browser_value
-syn keyword ngxDirective msie_padding
-syn keyword ngxDirective msie_refresh
-syn keyword ngxDirective multi_accept
-syn keyword ngxDirective open_file_cache
-syn keyword ngxDirective open_file_cache_errors
-syn keyword ngxDirective open_file_cache_events
-syn keyword ngxDirective open_file_cache_min_uses
-syn keyword ngxDirective open_file_cache_valid
-syn keyword ngxDirective open_log_file_cache
-syn keyword ngxDirective output_buffers
-syn keyword ngxDirective override_charset
-syn keyword ngxDirective perl
-syn keyword ngxDirective perl_modules
-syn keyword ngxDirective perl_require
-syn keyword ngxDirective perl_set
-syn keyword ngxDirective pid
-syn keyword ngxDirective pop3_auth
-syn keyword ngxDirective pop3_capabilities
-syn keyword ngxDirective port_in_redirect
-syn keyword ngxDirective postpone_gzipping
-syn keyword ngxDirective postpone_output
-syn keyword ngxDirective protocol
-syn keyword ngxDirective proxy
-syn keyword ngxDirective proxy_bind
-syn keyword ngxDirective proxy_buffer
-syn keyword ngxDirective proxy_buffer_size
-syn keyword ngxDirective proxy_buffering
-syn keyword ngxDirective proxy_buffers
-syn keyword ngxDirective proxy_busy_buffers_size
-syn keyword ngxDirective proxy_cache
-syn keyword ngxDirective proxy_cache_key
-syn keyword ngxDirective proxy_cache_methods
-syn keyword ngxDirective proxy_cache_min_uses
-syn keyword ngxDirective proxy_cache_path
-syn keyword ngxDirective proxy_cache_use_stale
-syn keyword ngxDirective proxy_cache_valid
-syn keyword ngxDirective proxy_connect_timeout
-syn keyword ngxDirective proxy_headers_hash_bucket_size
-syn keyword ngxDirective proxy_headers_hash_max_size
-syn keyword ngxDirective proxy_hide_header
-syn keyword ngxDirective proxy_ignore_client_abort
-syn keyword ngxDirective proxy_ignore_headers
-syn keyword ngxDirective proxy_intercept_errors
-syn keyword ngxDirective proxy_max_temp_file_size
-syn keyword ngxDirective proxy_method
-syn keyword ngxDirective proxy_next_upstream
-syn keyword ngxDirective proxy_pass_error_message
-syn keyword ngxDirective proxy_pass_header
-syn keyword ngxDirective proxy_pass_request_body
-syn keyword ngxDirective proxy_pass_request_headers
-syn keyword ngxDirective proxy_read_timeout
-syn keyword ngxDirective proxy_redirect
-syn keyword ngxDirective proxy_send_lowat
-syn keyword ngxDirective proxy_send_timeout
-syn keyword ngxDirective proxy_set_body
-syn keyword ngxDirective proxy_set_header
-syn keyword ngxDirective proxy_ssl_session_reuse
-syn keyword ngxDirective proxy_store
-syn keyword ngxDirective proxy_store_access
-syn keyword ngxDirective proxy_temp_file_write_size
-syn keyword ngxDirective proxy_temp_path
-syn keyword ngxDirective proxy_timeout
-syn keyword ngxDirective proxy_upstream_fail_timeout
-syn keyword ngxDirective proxy_upstream_max_fails
-syn keyword ngxDirective random_index
-syn keyword ngxDirective read_ahead
-syn keyword ngxDirective real_ip_header
-syn keyword ngxDirective recursive_error_pages
-syn keyword ngxDirective request_pool_size
-syn keyword ngxDirective reset_timedout_connection
-syn keyword ngxDirective resolver
-syn keyword ngxDirective resolver_timeout
-syn keyword ngxDirective rewrite_log
-syn keyword ngxDirective rtsig_overflow_events
-syn keyword ngxDirective rtsig_overflow_test
-syn keyword ngxDirective rtsig_overflow_threshold
-syn keyword ngxDirective rtsig_signo
-syn keyword ngxDirective satisfy
-syn keyword ngxDirective secure_link_secret
-syn keyword ngxDirective send_lowat
-syn keyword ngxDirective send_timeout
-syn keyword ngxDirective sendfile
-syn keyword ngxDirective sendfile_max_chunk
-syn keyword ngxDirective server_name_in_redirect
-syn keyword ngxDirective server_names_hash_bucket_size
-syn keyword ngxDirective server_names_hash_max_size
-syn keyword ngxDirective server_tokens
-syn keyword ngxDirective set_real_ip_from
-syn keyword ngxDirective smtp_auth
-syn keyword ngxDirective smtp_capabilities
-syn keyword ngxDirective smtp_client_buffer
-syn keyword ngxDirective smtp_greeting_delay
-syn keyword ngxDirective so_keepalive
-syn keyword ngxDirective source_charset
-syn keyword ngxDirective ssi
-syn keyword ngxDirective ssi_ignore_recycled_buffers
-syn keyword ngxDirective ssi_min_file_chunk
-syn keyword ngxDirective ssi_silent_errors
-syn keyword ngxDirective ssi_types
-syn keyword ngxDirective ssi_value_length
-syn keyword ngxDirective ssl
-syn keyword ngxDirective ssl_certificate
-syn keyword ngxDirective ssl_certificate_key
-syn keyword ngxDirective ssl_ciphers
-syn keyword ngxDirective ssl_client_certificate
-syn keyword ngxDirective ssl_crl
-syn keyword ngxDirective ssl_dhparam
-syn keyword ngxDirective ssl_engine
-syn keyword ngxDirective ssl_prefer_server_ciphers
-syn keyword ngxDirective ssl_protocols
-syn keyword ngxDirective ssl_session_cache
-syn keyword ngxDirective ssl_session_timeout
-syn keyword ngxDirective ssl_verify_client
-syn keyword ngxDirective ssl_verify_depth
-syn keyword ngxDirective starttls
-syn keyword ngxDirective stub_status
-syn keyword ngxDirective sub_filter
-syn keyword ngxDirective sub_filter_once
-syn keyword ngxDirective sub_filter_types
-syn keyword ngxDirective tcp_nodelay
-syn keyword ngxDirective tcp_nopush
-syn keyword ngxDirective thread_stack_size
-syn keyword ngxDirective timeout
-syn keyword ngxDirective timer_resolution
-syn keyword ngxDirective types_hash_bucket_size
-syn keyword ngxDirective types_hash_max_size
-syn keyword ngxDirective underscores_in_headers
-syn keyword ngxDirective uninitialized_variable_warn
-syn keyword ngxDirective use
-syn keyword ngxDirective user
-syn keyword ngxDirective userid
-syn keyword ngxDirective userid_domain
-syn keyword ngxDirective userid_expires
-syn keyword ngxDirective userid_mark
-syn keyword ngxDirective userid_name
-syn keyword ngxDirective userid_p3p
-syn keyword ngxDirective userid_path
-syn keyword ngxDirective userid_service
-syn keyword ngxDirective valid_referers
-syn keyword ngxDirective variables_hash_bucket_size
-syn keyword ngxDirective variables_hash_max_size
-syn keyword ngxDirective worker_connections
-syn keyword ngxDirective worker_cpu_affinity
-syn keyword ngxDirective worker_priority
-syn keyword ngxDirective worker_processes
-syn keyword ngxDirective worker_rlimit_core
-syn keyword ngxDirective worker_rlimit_nofile
-syn keyword ngxDirective worker_rlimit_sigpending
-syn keyword ngxDirective worker_threads
-syn keyword ngxDirective working_directory
-syn keyword ngxDirective xclient
-syn keyword ngxDirective xml_entities
-syn keyword ngxDirective xslt_stylesheet
-syn keyword ngxDirective xslt_types
-
-" 3rd party module list:
-" http://wiki.nginx.org/Nginx3rdPartyModules
-
-" Accept Language Module
-" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
-syn keyword ngxDirectiveThirdParty set_from_accept_language
-
-" Access Key Module
-" Denies access unless the request URL contains an access key.
-syn keyword ngxDirectiveThirdParty accesskey
-syn keyword ngxDirectiveThirdParty accesskey_arg
-syn keyword ngxDirectiveThirdParty accesskey_hashmethod
-syn keyword ngxDirectiveThirdParty accesskey_signature
-
-" Auth PAM Module
-" HTTP Basic Authentication using PAM.
-syn keyword ngxDirectiveThirdParty auth_pam
-syn keyword ngxDirectiveThirdParty auth_pam_service_name
-
-" Cache Purge Module
-" Module adding ability to purge content from FastCGI and proxy caches.
-syn keyword ngxDirectiveThirdParty fastcgi_cache_purge
-syn keyword ngxDirectiveThirdParty proxy_cache_purge
-
-" Chunkin Module
-" HTTP 1.1 chunked-encoding request body support for Nginx.
-syn keyword ngxDirectiveThirdParty chunkin
-syn keyword ngxDirectiveThirdParty chunkin_keepalive
-syn keyword ngxDirectiveThirdParty chunkin_max_chunks_per_buf
-syn keyword ngxDirectiveThirdParty chunkin_resume
-
-" Circle GIF Module
-" Generates simple circle images with the colors and size specified in the URL.
-syn keyword ngxDirectiveThirdParty circle_gif
-syn keyword ngxDirectiveThirdParty circle_gif_max_radius
-syn keyword ngxDirectiveThirdParty circle_gif_min_radius
-syn keyword ngxDirectiveThirdParty circle_gif_step_radius
-
-" Drizzle Module
-" Make nginx talk directly to mysql, drizzle, and sqlite3 by libdrizzle.
-syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
-syn keyword ngxDirectiveThirdParty drizzle_dbname
-syn keyword ngxDirectiveThirdParty drizzle_keepalive
-syn keyword ngxDirectiveThirdParty drizzle_module_header
-syn keyword ngxDirectiveThirdParty drizzle_pass
-syn keyword ngxDirectiveThirdParty drizzle_query
-syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
-syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
-syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
-syn keyword ngxDirectiveThirdParty drizzle_server
-
-" Echo Module
-" Brings 'echo', 'sleep', 'time', 'exec' and more shell-style goodies to Nginx config file.
-syn keyword ngxDirectiveThirdParty echo
-syn keyword ngxDirectiveThirdParty echo_after_body
-syn keyword ngxDirectiveThirdParty echo_before_body
-syn keyword ngxDirectiveThirdParty echo_blocking_sleep
-syn keyword ngxDirectiveThirdParty echo_duplicate
-syn keyword ngxDirectiveThirdParty echo_end
-syn keyword ngxDirectiveThirdParty echo_exec
-syn keyword ngxDirectiveThirdParty echo_flush
-syn keyword ngxDirectiveThirdParty echo_foreach_split
-syn keyword ngxDirectiveThirdParty echo_location
-syn keyword ngxDirectiveThirdParty echo_location_async
-syn keyword ngxDirectiveThirdParty echo_read_request_body
-syn keyword ngxDirectiveThirdParty echo_request_body
-syn keyword ngxDirectiveThirdParty echo_reset_timer
-syn keyword ngxDirectiveThirdParty echo_sleep
-syn keyword ngxDirectiveThirdParty echo_subrequest
-syn keyword ngxDirectiveThirdParty echo_subrequest_async
-
-" Events Module
-" Privides options for start/stop events.
-syn keyword ngxDirectiveThirdParty on_start
-syn keyword ngxDirectiveThirdParty on_stop
-
-" EY Balancer Module
-" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream.
-syn keyword ngxDirectiveThirdParty max_connections
-syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
-syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
-
-" Fancy Indexes Module
-" Like the built-in autoindex module, but fancier.
-syn keyword ngxDirectiveThirdParty fancyindex
-syn keyword ngxDirectiveThirdParty fancyindex_exact_size
-syn keyword ngxDirectiveThirdParty fancyindex_footer
-syn keyword ngxDirectiveThirdParty fancyindex_header
-syn keyword ngxDirectiveThirdParty fancyindex_localtime
-syn keyword ngxDirectiveThirdParty fancyindex_readme
-syn keyword ngxDirectiveThirdParty fancyindex_readme_mode
-
-" GeoIP Module (DEPRECATED)
-" Country code lookups via the MaxMind GeoIP API.
-syn keyword ngxDirectiveThirdParty geoip_country_file
-
-" Headers More Module
-" Set and clear input and output headers...more than "add"!
-syn keyword ngxDirectiveThirdParty more_clear_headers
-syn keyword ngxDirectiveThirdParty more_clear_input_headers
-syn keyword ngxDirectiveThirdParty more_set_headers
-syn keyword ngxDirectiveThirdParty more_set_input_headers
-
-" HTTP Push Module
-" Turn Nginx into an adept long-polling HTTP Push (Comet) server.
-syn keyword ngxDirectiveThirdParty push_buffer_size
-syn keyword ngxDirectiveThirdParty push_listener
-syn keyword ngxDirectiveThirdParty push_message_timeout
-syn keyword ngxDirectiveThirdParty push_queue_messages
-syn keyword ngxDirectiveThirdParty push_sender
-
-" HTTP Redis Module >
-" Redis support.>
-syn keyword ngxDirectiveThirdParty redis_bind
-syn keyword ngxDirectiveThirdParty redis_buffer_size
-syn keyword ngxDirectiveThirdParty redis_connect_timeout
-syn keyword ngxDirectiveThirdParty redis_next_upstream
-syn keyword ngxDirectiveThirdParty redis_pass
-syn keyword ngxDirectiveThirdParty redis_read_timeout
-syn keyword ngxDirectiveThirdParty redis_send_timeout
-
-" HTTP JavaScript Module
-" Embedding SpiderMonkey. Nearly full port on Perl module.
-syn keyword ngxDirectiveThirdParty js
-syn keyword ngxDirectiveThirdParty js_filter
-syn keyword ngxDirectiveThirdParty js_filter_types
-syn keyword ngxDirectiveThirdParty js_load
-syn keyword ngxDirectiveThirdParty js_maxmem
-syn keyword ngxDirectiveThirdParty js_require
-syn keyword ngxDirectiveThirdParty js_set
-syn keyword ngxDirectiveThirdParty js_utf8
-
-" Log Request Speed
-" Log the time it took to process each request.
-syn keyword ngxDirectiveThirdParty log_request_speed_filter
-syn keyword ngxDirectiveThirdParty log_request_speed_filter_timeout
-
-" Memc Module
-" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands.
-syn keyword ngxDirectiveThirdParty memc_buffer_size
-syn keyword ngxDirectiveThirdParty memc_cmds_allowed
-syn keyword ngxDirectiveThirdParty memc_connect_timeout
-syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
-syn keyword ngxDirectiveThirdParty memc_next_upstream
-syn keyword ngxDirectiveThirdParty memc_pass
-syn keyword ngxDirectiveThirdParty memc_read_timeout
-syn keyword ngxDirectiveThirdParty memc_send_timeout
-syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
-syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
-
-" Mogilefs Module
-" Implements a MogileFS client, provides a replace to the Perlbal reverse proxy of the original MogileFS.
-syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
-syn keyword ngxDirectiveThirdParty mogilefs_domain
-syn keyword ngxDirectiveThirdParty mogilefs_methods
-syn keyword ngxDirectiveThirdParty mogilefs_noverify
-syn keyword ngxDirectiveThirdParty mogilefs_pass
-syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
-syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
-syn keyword ngxDirectiveThirdParty mogilefs_tracker
-
-" MP4 Streaming Lite Module
-" Will seek to a certain time within H.264/MP4 files when provided with a 'start' parameter in the URL.
-syn keyword ngxDirectiveThirdParty mp4
-
-" Nginx Notice Module
-" Serve static file to POST requests.
-syn keyword ngxDirectiveThirdParty notice
-syn keyword ngxDirectiveThirdParty notice_type
-
-" Phusion Passenger
-" Easy and robust deployment of Ruby on Rails application on Apache and Nginx webservers.
-syn keyword ngxDirectiveThirdParty passenger_base_uri
-syn keyword ngxDirectiveThirdParty passenger_default_user
-syn keyword ngxDirectiveThirdParty passenger_enabled
-syn keyword ngxDirectiveThirdParty passenger_log_level
-syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
-syn keyword ngxDirectiveThirdParty passenger_max_pool_size
-syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
-syn keyword ngxDirectiveThirdParty passenger_root
-syn keyword ngxDirectiveThirdParty passenger_ruby
-syn keyword ngxDirectiveThirdParty passenger_use_global_queue
-syn keyword ngxDirectiveThirdParty passenger_user_switching
-syn keyword ngxDirectiveThirdParty rack_env
-syn keyword ngxDirectiveThirdParty rails_app_spawner_idle_time
-syn keyword ngxDirectiveThirdParty rails_env
-syn keyword ngxDirectiveThirdParty rails_framework_spawner_idle_time
-syn keyword ngxDirectiveThirdParty rails_spawn_method
-
-" RDS JSON Module
-" Help ngx_drizzle and other DBD modules emit JSON data.
-syn keyword ngxDirectiveThirdParty rds_json
-syn keyword ngxDirectiveThirdParty rds_json_content_type
-syn keyword ngxDirectiveThirdParty rds_json_format
-syn keyword ngxDirectiveThirdParty rds_json_ret
-
-" RRD Graph Module
-" This module provides an HTTP interface to RRDtool's graphing facilities.
-syn keyword ngxDirectiveThirdParty rrd_graph
-syn keyword ngxDirectiveThirdParty rrd_graph_root
-
-" Secure Download
-" Create expiring links.
-syn keyword ngxDirectiveThirdParty secure_download
-syn keyword ngxDirectiveThirdParty secure_download_fail_location
-syn keyword ngxDirectiveThirdParty secure_download_path_mode
-syn keyword ngxDirectiveThirdParty secure_download_secret
-
-" SlowFS Cache Module
-" Module adding ability to cache static files.
-syn keyword ngxDirectiveThirdParty slowfs_big_file_size
-syn keyword ngxDirectiveThirdParty slowfs_cache
-syn keyword ngxDirectiveThirdParty slowfs_cache_key
-syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
-syn keyword ngxDirectiveThirdParty slowfs_cache_path
-syn keyword ngxDirectiveThirdParty slowfs_cache_purge
-syn keyword ngxDirectiveThirdParty slowfs_cache_valid
-syn keyword ngxDirectiveThirdParty slowfs_temp_path
-
-" Strip Module
-" Whitespace remover.
-syn keyword ngxDirectiveThirdParty strip
-
-" Substitutions Module
-" A filter module which can do both regular expression and fixed string substitutions on response bodies.
-syn keyword ngxDirectiveThirdParty subs_filter
-syn keyword ngxDirectiveThirdParty subs_filter_types
-
-" Supervisord Module
-" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand.
-syn keyword ngxDirectiveThirdParty supervisord
-syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
-syn keyword ngxDirectiveThirdParty supervisord_name
-syn keyword ngxDirectiveThirdParty supervisord_start
-syn keyword ngxDirectiveThirdParty supervisord_stop
-
-" Upload Module
-" Parses multipart/form-data allowing arbitrary handling of uploaded files.
-syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
-syn keyword ngxDirectiveThirdParty upload_buffer_size
-syn keyword ngxDirectiveThirdParty upload_cleanup
-syn keyword ngxDirectiveThirdParty upload_limit_rate
-syn keyword ngxDirectiveThirdParty upload_max_file_size
-syn keyword ngxDirectiveThirdParty upload_max_output_body_len
-syn keyword ngxDirectiveThirdParty upload_max_part_header_len
-syn keyword ngxDirectiveThirdParty upload_pass
-syn keyword ngxDirectiveThirdParty upload_pass_args
-syn keyword ngxDirectiveThirdParty upload_pass_form_field
-syn keyword ngxDirectiveThirdParty upload_set_form_field
-syn keyword ngxDirectiveThirdParty upload_store
-syn keyword ngxDirectiveThirdParty upload_store_access
-
-" Upload Progress Module
-" Tracks and reports upload progress.
-syn keyword ngxDirectiveThirdParty report_uploads
-syn keyword ngxDirectiveThirdParty track_uploads
-syn keyword ngxDirectiveThirdParty upload_progress
-syn keyword ngxDirectiveThirdParty upload_progress_content_type
-syn keyword ngxDirectiveThirdParty upload_progress_header
-syn keyword ngxDirectiveThirdParty upload_progress_json_output
-syn keyword ngxDirectiveThirdParty upload_progress_template
-
-" Upstream Fair Balancer
-" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
-syn keyword ngxDirectiveThirdParty fair
-syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
-
-" Upstream Consistent Hash
-" Select backend based on Consistent hash ring.
-syn keyword ngxDirectiveThirdParty consistent_hash
-
-" Upstream Hash Module
-" Provides simple upstream load distribution by hashing a configurable variable.
-syn keyword ngxDirectiveThirdParty hash
-syn keyword ngxDirectiveThirdParty hash_again
-
-" XSS Module
-" Native support for cross-site scripting (XSS) in an nginx.
-syn keyword ngxDirectiveThirdParty xss_callback_arg
-syn keyword ngxDirectiveThirdParty xss_get
-syn keyword ngxDirectiveThirdParty xss_input_types
-syn keyword ngxDirectiveThirdParty xss_output_type
-
-" uWSGI Module
-" Allows Nginx to interact with uWSGI processes and control what parameters are passed to the process.
-syn keyword ngxDirectiveThirdParty uwsgi_bind
-syn keyword ngxDirectiveThirdParty uwsgi_buffer_size
-syn keyword ngxDirectiveThirdParty uwsgi_buffering
-syn keyword ngxDirectiveThirdParty uwsgi_buffers
-syn keyword ngxDirectiveThirdParty uwsgi_busy_buffers_size
-syn keyword ngxDirectiveThirdParty uwsgi_cache
-syn keyword ngxDirectiveThirdParty uwsgi_cache_bypass
-syn keyword ngxDirectiveThirdParty uwsgi_cache_key
-syn keyword ngxDirectiveThirdParty uwsgi_cache_lock
-syn keyword ngxDirectiveThirdParty uwsgi_cache_lock_timeout
-syn keyword ngxDirectiveThirdParty uwsgi_cache_methods
-syn keyword ngxDirectiveThirdParty uwsgi_cache_min_uses
-syn keyword ngxDirectiveThirdParty uwsgi_cache_path
-syn keyword ngxDirectiveThirdParty uwsgi_cache_use_stale
-syn keyword ngxDirectiveThirdParty uwsgi_cache_valid
-syn keyword ngxDirectiveThirdParty uwsgi_connect_timeout
-syn keyword ngxDirectiveThirdParty uwsgi_hide_header
-syn keyword ngxDirectiveThirdParty uwsgi_ignore_client_abort
-syn keyword ngxDirectiveThirdParty uwsgi_ignore_headers
-syn keyword ngxDirectiveThirdParty uwsgi_intercept_errors
-syn keyword ngxDirectiveThirdParty uwsgi_max_temp_file_size
-syn keyword ngxDirectiveThirdParty uwsgi_modifier1
-syn keyword ngxDirectiveThirdParty uwsgi_modifier2
-syn keyword ngxDirectiveThirdParty uwsgi_next_upstream
-syn keyword ngxDirectiveThirdParty uwsgi_no_cache
-syn keyword ngxDirectiveThirdParty uwsgi_param
-syn keyword ngxDirectiveThirdParty uwsgi_pass
-syn keyword ngxDirectiveThirdParty uwsgi_pass_header
-syn keyword ngxDirectiveThirdParty uwsgi_pass_request_body
-syn keyword ngxDirectiveThirdParty uwsgi_pass_request_headers
-syn keyword ngxDirectiveThirdParty uwsgi_read_timeout
-syn keyword ngxDirectiveThirdParty uwsgi_send_timeout
-syn keyword ngxDirectiveThirdParty uwsgi_store
-syn keyword ngxDirectiveThirdParty uwsgi_store_access
-syn keyword ngxDirectiveThirdParty uwsgi_string
-syn keyword ngxDirectiveThirdParty uwsgi_temp_file_write_size
-syn keyword ngxDirectiveThirdParty uwsgi_temp_path
-
-" highlight
-
-hi link ngxComment Comment
-hi link ngxVariable Identifier
-hi link ngxVariableBlock Identifier
-hi link ngxVariableString PreProc
-hi link ngxBlock Normal
-hi link ngxString String
-
-hi link ngxBoolean Boolean
-hi link ngxDirectiveBlock Statement
-hi link ngxDirectiveImportant Type
-hi link ngxDirectiveControl Keyword
-hi link ngxDirectiveError Constant
-hi link ngxDirectiveDeprecated Error
-hi link ngxDirective Identifier
-hi link ngxDirectiveThirdParty Special
-
-let b:current_syntax = "nginx"
diff --git a/sources_non_forked/nginx.vim/CHANGELOG.md b/sources_non_forked/nginx.vim/CHANGELOG.md
new file mode 100644
index 00000000..0a8ec60a
--- /dev/null
+++ b/sources_non_forked/nginx.vim/CHANGELOG.md
@@ -0,0 +1,19 @@
+nginx.vim CHANGELOG
+=====================
+
+This file is used to list changes made in each version of the [nginx](https://github.com/chr4/nginx.vim) plugin for the [Vim](http://www.vim.org/) editor.
+
+1.1.0
+-----
+
+- Do not highlight `SHA` ciphers, as usage as HMAC is still considered secure
+
+1.0.1
+-----
+
+- Highlight `gzip on` as insecure (as it might be vulnerable to BREACH/ CRIME)
+
+1.0.0
+-----
+
+- Initial release
diff --git a/sources_non_forked/nginx.vim/LICENSE b/sources_non_forked/nginx.vim/LICENSE
new file mode 100644
index 00000000..536790d3
--- /dev/null
+++ b/sources_non_forked/nginx.vim/LICENSE
@@ -0,0 +1,675 @@
+ 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.
+
+ Vim plugin that highlights insecure SSL/TLS cipher suites and protocols.
+ Copyright (C) 2017 Chris Aumann
+
+ 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:
+
+ nginx.vim Copyright (C) 2017 Chris Aumann
+ 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/sources_non_forked/nginx.vim/README.md b/sources_non_forked/nginx.vim/README.md
new file mode 100644
index 00000000..9f045f04
--- /dev/null
+++ b/sources_non_forked/nginx.vim/README.md
@@ -0,0 +1,92 @@
+# nginx.vim
+
+## Description
+[Vim](http://www.vim.org/) plugin for [Nginx](http://www.nginx.org)
+
+## Features
+The plugin is based on the recent vim-plugin distributed with `nginx-1.12.0` and additionally features the following syntax improvements:
+
+- Highlight IPv4 and IPv6 addresses
+- Mark insecure `ssl_protocols` as errors
+- Inline template syntax highlight for **ERB** and **Jinja**
+- Inline syntax highlight for **LUA**
+- Improve integer matching
+- Syntax highlighting for `proxy_next_upstream` options
+- Syntax highlighting for `sticky` options
+- Syntax highlighting for `upstream` `server` options
+- More to come!
+
+Furthermore:
+
+- Remove annoying delimiters, resulting in strange word-boundaries
+
+*Note: Also check out [sslsecure.vim](https://github.com/chr4/sslsecure.vim): it supports highlighting insecure SSL/TLS cipher suites and protocols in all your files!*
+
+
+## Screenshots
+A `server` block with highlighting of insecure `ssl_protocol` options:
+![nginx server block with SSL configuration](https://chr4.org/images/nginx_ssl.png)
+
+An `upstream` block with highlighted options:
+![nginx upstream configuration](https://chr4.org/images/nginx_upstream.png)
+
+Embedded highlighting for ERB and Jinja templates:
+![Embedded highlighting for ERB and Jinja templates](https://chr4.org/images/nginx_templating.png)
+
+Embedded LUA syntax highlighting:
+![Embedded LUA syntax highlighting](https://chr4.org/images/nginx_lua.png)
+
+
+## Snippets
+The plugin comes with useful snippets which can be accessed using e.g. [vim-snipmate](https://github.com/garbas/vim-snipmate).
+
+Select a decent cipher for your requirements (all of them can provide [SSLLabs A+ ratings](https://www.ssllabs.com/ssltest/analyze.html))
+
+- `ciphers-paranoid`: Even-more-secure ciphers (elliptic curves, no GCM), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android != 4.4
+- **`ciphers-modern`: High-security ciphers (elliptic curves), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android < 4.4 (recommended)**
+- `ciphers-compat`: Medium-security ciphers with good compatibility (No IE on WinXP) but TLSv1 and SHA required
+- `ciphers-old`: Low-security ciphers (using weak DES and SHA ciphers, TLSv1), but compatible with everything but IE6 and Java6
+- `ssl-options`: Bootstrap secure SSL options
+
+Example:
+```nginx
+# High-security ciphers (elliptic curves), less compatibility
+# No IE < 10, OpenSSL-0.9.8, Safari < 7, Android < 4.4
+ssl_protocols TLSv1.1 TLSv1.2;
+ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
+```
+
+Or add a robots.txt file with `robots.txt`:
+```nginx
+# Tell bots to not index this site
+location /robots.txt {
+ default_type text/plain;
+ return 200 'User-agent: *\nDisallow: /\n';
+}
+```
+
+It also has auto-completion for location and server blocks with `location` resp. `server`, and [many more](https://github.com/chr4/nginx.vim/blob/master/snippets/nginx.snippets)!
+
+- Add useful [snippets](https://github.com/chr4/nginx.vim/blob/master/snippets/nginx.snippets)
+
+## References
+- Based on the original `nginx-1.12.0/contrib/vim`
+- IPv4 and IPv6 address highlighting, based on expressions found in [this forum post](http://vim.1045645.n5.nabble.com/IPv6-support-for-quot-dns-quot-zonefile-syntax-highlighting-td1197292.html)
+- [Blog post](https://chr4.org/blog/2017/04/14/better-syntax-highlighting-and-snippets-for-nginx-in-vim/) introducing this plugin including some more examples
+
+## Installation
+
+Just plug it into your favorite Vim package manager:
+
+```vim
+" Plug
+Plug 'chr4/nginx.vim'
+
+" Dein.vim
+call dein#add('chr4/nginx.vim')
+
+" Vundle
+Plugin 'chr4/nginx.vim'
+```
+
+Optionally, if you like [Jinja](http://jinja.pocoo.org/) template syntax highlighting, install `lepture/vim-jinja`, too.
diff --git a/sources_non_forked/nginx-vim-syntax/ftdetect/nginx.vim b/sources_non_forked/nginx.vim/ftdetect/nginx.vim
similarity index 61%
rename from sources_non_forked/nginx-vim-syntax/ftdetect/nginx.vim
rename to sources_non_forked/nginx.vim/ftdetect/nginx.vim
index 3ae470d2..cae77e4c 100644
--- a/sources_non_forked/nginx-vim-syntax/ftdetect/nginx.vim
+++ b/sources_non_forked/nginx.vim/ftdetect/nginx.vim
@@ -1,4 +1,5 @@
au BufRead,BufNewFile *.nginx set ft=nginx
+au BufRead,BufNewFile nginx*.conf set ft=nginx
+au BufRead,BufNewFile *nginx.conf set ft=nginx
au BufRead,BufNewFile */etc/nginx/* set ft=nginx
au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx
-au BufRead,BufNewFile nginx.conf set ft=nginx
diff --git a/sources_non_forked/nginx.vim/ftplugin/nginx.vim b/sources_non_forked/nginx.vim/ftplugin/nginx.vim
new file mode 100644
index 00000000..463eea98
--- /dev/null
+++ b/sources_non_forked/nginx.vim/ftplugin/nginx.vim
@@ -0,0 +1 @@
+setlocal commentstring=#\ %s
diff --git a/sources_non_forked/nginx-vim-syntax/indent/nginx.vim b/sources_non_forked/nginx.vim/indent/nginx.vim
similarity index 100%
rename from sources_non_forked/nginx-vim-syntax/indent/nginx.vim
rename to sources_non_forked/nginx.vim/indent/nginx.vim
diff --git a/sources_non_forked/nginx.vim/snippets/nginx.snippets b/sources_non_forked/nginx.vim/snippets/nginx.snippets
new file mode 100644
index 00000000..68b1118a
--- /dev/null
+++ b/sources_non_forked/nginx.vim/snippets/nginx.snippets
@@ -0,0 +1,166 @@
+# vim: ft=nginx
+snippet l80
+ listen [::]:80 ipv6only=off;
+ $0
+
+# Listen statements when using multiple http server blocks
+snippet l80-multi
+ listen [::]:80 default_server;
+ listen 80 default_server;
+ $0
+
+snippet l443
+ listen [::]:443 ipv6only=off ssl http2 default_server;
+ $0
+
+# Listen statements when using multiple ssl server blocks
+snippet l443-multi
+ listen [::]:443 ssl http2 default_server;
+ listen 443 ssl http2 default_server;
+ $0
+
+# Cipher suites are taken and adapted from Mozilla's recommendations
+# https://wiki.mozilla.org/Security/Server_Side_TLS
+#
+# Paranoid mode
+snippet ciphers-paranoid
+ # Paranoid ciphers, 256bit minimum, prefer ChaCha20/ Poly1305, bad compatibility
+ # No Android 5+6 (4.4 works), Chrome < 51, Firefox < 49, IE < 11, Java 6-8, GoogleBot
+ ssl_protocols TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
+ $0
+
+# Mozilla modern
+snippet ciphers-modern
+ # High-security ciphers (elliptic curves), less compatibility
+ # No IE < 10, OpenSSL-0.9.8, Safari < 7, Android < 4.4
+ ssl_protocols TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
+ $0
+
+# Mozilla intermediate (Removed DES for more security)
+snippet ciphers-compat
+ # Medium-security ciphers with good compatibility (Weak: SHA)
+ # No IE on WinXP
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:!DSS';
+ $0
+
+# Mozilla old (Removed DSS, HIGH, SEED for more security)
+snippet ciphers-low
+ # Low-security ciphers (Weak: DES, SHA)
+ # No IE6, Java6
+ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+ ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:DES-CBC3-SHA:!SEED:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!RSAPSK:!aDH:!aECDH:!KRB5-DES-CBC3-SHA:!SRP:!DSS';
+ $0
+
+snippet ssl-options
+ # SSL certificate
+ ssl_certificate /etc/nginx/certs/${4:www.example.com}.crt;
+ ssl_certificate_key /etc/nginx/certs/${5:www.example.com}.key;
+ # ssl_dhparam /etc/nginx/certs/dhparam.pem;
+
+ ssl_prefer_server_ciphers on;
+ ssl_stapling off;
+ ssl_stapling_verify off;
+ ssl_session_cache 'shared:SSL:10m';
+ ssl_session_tickets off;
+
+ # Enable HSTS (1 year) and some security options
+ add_header Strict-Transport-Security 'max-age=31536000 includeSubDomains; preload;';
+ $0
+
+snippet security-headers
+ add_header X-Frame-Options 'DENY';
+ add_header X-Content-Type-Options 'nosniff';
+ add_header X-Frame-Options 'SAMEORIGIN';
+ add_header X-XSS-Protection '1; mode=block';
+ add_header X-Robots-Tag 'none';
+ add_header X-Download-Options 'noopen';
+ add_header X-Permitted-Cross-Domain-Policies 'none';
+ $0
+
+snippet robots.txt
+ # Tell bots to not index this site
+ location /robots.txt {
+ default_type text/plain;
+ return 200 'User-agent: *\nDisallow: /\n';
+ }
+ $0
+
+snippet basic-auth
+ auth_basic 'Restricted';
+ auth_basic_user_file ${1:/etc/nginx/htpasswd};
+ $0
+
+snippet proxy_pass
+ proxy_pass_header Date;
+ proxy_set_header X-Forwarded-Proto $scheme;
+ proxy_set_header Host $host;
+ proxy_set_header X-Real-IP $remote_addr;
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+ proxy_pass http://${1:backend};
+ $0
+
+snippet php-fpm
+ location ~ \.php$ {
+ include fastcgi_params;
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+ fastcgi_index index.php;
+ fastcgi_intercept_errors on;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_pass ${1:127.0.0.1:9000};
+ }
+ $0
+
+snippet php-uwsgi
+ location ~ \.php$ {
+ include uwsgi_params;
+ uwsgi_max_temp_file_size 4096m;
+ uwsgi_modifier1 14;
+ uwsgi_read_timeout 900;
+ uwsgi_send_timeout 900;
+ uwsgi_pass ${1:unix:///run/uwsgi/php.sock};
+ }
+ $0
+
+snippet redirect-ssl
+ location / {
+ return 301 https://$http_host$request_uri;
+ }
+ $0
+
+snippet redirect-other
+ # Redirect other requested hosts
+ if ($host != '${1:DOMAIN}') {
+ return 301 https://${2:DOMAIN}$request_uri;
+ }
+ $0
+
+snippet letsencrypt
+ listen [::]:80 ipv6only=off;
+
+ # Serve well-known path for letsencrypt
+ location /.well-known/acme-challenge {
+ root /etc/nginx/certs/acme;
+ default_type text/plain;
+ }
+
+ location / {
+ return 301 https://$http_host$request_uri;
+ }
+ $0
+
+snippet cut-trailing-slash
+ rewrite ^/(.*)/$ $scheme://$http_host:$server_port/$1 permanent;
+ $0
+
+snippet location
+ location ${1:/} {
+ ${0:${VISUAL}}
+ }
+
+snippet server
+ server {
+ ${0:${VISUAL}}
+ }
diff --git a/sources_non_forked/nginx.vim/syntax/nginx.vim b/sources_non_forked/nginx.vim/syntax/nginx.vim
new file mode 100644
index 00000000..ba484434
--- /dev/null
+++ b/sources_non_forked/nginx.vim/syntax/nginx.vim
@@ -0,0 +1,2304 @@
+" Vim syntax file
+" Language: nginx.conf
+" Maintainer: Chris Aumann
+" Last Change: Apr 15, 2017
+
+if exists("b:current_syntax")
+ finish
+end
+
+let b:current_syntax = "nginx"
+
+syn match ngxVariable '\$\(\w\+\|{\w\+}\)'
+syn match ngxVariableBlock '\$\(\w\+\|{\w\+}\)' contained
+syn match ngxVariableString '\$\(\w\+\|{\w\+}\)' contained
+syn region ngxBlock start=+^+ end=+{+ skip=+\${\|{{\|{%+ contains=ngxComment,ngxInteger,ngxIPaddr,ngxDirectiveBlock,ngxVariableBlock,ngxString,ngxThirdPartyLuaBlock oneline
+syn region ngxString start=+[^:a-zA-Z>!\\@]\z(["']\)+lc=1 end=+\z1+ skip=+\\\\\|\\\z1+ contains=ngxVariableString,ngxSSLCipherInsecure
+syn match ngxComment ' *#.*$'
+
+" These regular expressions where taken (and adapted) from
+" http://vim.1045645.n5.nabble.com/IPv6-support-for-quot-dns-quot-zonefile-syntax-highlighting-td1197292.html
+syn match ngxInteger '\W\zs\(\d[0-9.]*\|[0-9.]*\d\)\w\?\ze\W'
+syn match ngxIPaddr '\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}\(\x\{1,4}:\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[::\(\(\x\{1,4}:\)\{,6}\x\{1,4}\|\(\x\{1,4}:\)\{,5}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{1}:\(\(\x\{1,4}:\)\{,5}\x\{1,4}\|\(\x\{1,4}:\)\{,4}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{2}:\(\(\x\{1,4}:\)\{,4}\x\{1,4}\|\(\x\{1,4}:\)\{,3}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{3}:\(\(\x\{1,4}:\)\{,3}\x\{1,4}\|\(\x\{1,4}:\)\{,2}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{4}:\(\(\x\{1,4}:\)\{,2}\x\{1,4}\|\(\x\{1,4}:\)\{,1}\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{5}:\(\(\x\{1,4}:\)\{,1}\x\{1,4}\|\([0-2]\?\d\{1,2}\.\)\{3}[0-2]\?\d\{1,2}\)\]'
+syn match ngxIPaddr '\[\(\x\{1,4}:\)\{6}:\x\{1,4}\]'
+
+" Highlight wildcard listening signs also as IPaddr
+syn match ngxIPaddr '\s\zs\[::]'
+syn match ngxIPaddr '\s\zs\*'
+
+syn keyword ngxBoolean on
+syn keyword ngxBoolean off
+
+syn keyword ngxDirectiveBlock http contained
+syn keyword ngxDirectiveBlock mail contained
+syn keyword ngxDirectiveBlock events contained
+syn keyword ngxDirectiveBlock server contained
+syn keyword ngxDirectiveBlock match contained
+syn keyword ngxDirectiveBlock types contained
+syn keyword ngxDirectiveBlock location contained
+syn keyword ngxDirectiveBlock upstream contained
+syn keyword ngxDirectiveBlock charset_map contained
+syn keyword ngxDirectiveBlock limit_except contained
+syn keyword ngxDirectiveBlock if contained
+syn keyword ngxDirectiveBlock geo contained
+syn keyword ngxDirectiveBlock map contained
+syn keyword ngxDirectiveBlock split_clients contained
+
+syn keyword ngxDirectiveImportant include
+syn keyword ngxDirectiveImportant root
+syn keyword ngxDirectiveImportant server contained
+syn region ngxDirectiveImportantServer matchgroup=ngxDirectiveImportant start=+^\s*\zsserver\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxUpstreamServerOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirectiveImportant server_name
+syn keyword ngxDirectiveImportant listen contained
+syn region ngxDirectiveImportantListen matchgroup=ngxDirectiveImportant start=+listen+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxListenOptions,ngxString,ngxIPaddr,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirectiveImportant internal
+syn keyword ngxDirectiveImportant proxy_pass
+syn keyword ngxDirectiveImportant memcached_pass
+syn keyword ngxDirectiveImportant fastcgi_pass
+syn keyword ngxDirectiveImportant scgi_pass
+syn keyword ngxDirectiveImportant uwsgi_pass
+syn keyword ngxDirectiveImportant try_files
+syn keyword ngxDirectiveImportant error_page
+syn keyword ngxDirectiveImportant post_action
+
+syn keyword ngxUpstreamServerOptions weight contained
+syn keyword ngxUpstreamServerOptions max_conns contained
+syn keyword ngxUpstreamServerOptions max_fails contained
+syn keyword ngxUpstreamServerOptions fail_timeout contained
+syn keyword ngxUpstreamServerOptions backup contained
+syn keyword ngxUpstreamServerOptions down contained
+syn keyword ngxUpstreamServerOptions resolve contained
+syn keyword ngxUpstreamServerOptions route contained
+syn keyword ngxUpstreamServerOptions service contained
+syn keyword ngxUpstreamServerOptions default_server contained
+syn keyword ngxUpstreamServerOptions slow_start contained
+
+syn keyword ngxListenOptions default_server contained
+syn keyword ngxListenOptions ssl contained
+syn keyword ngxListenOptions http2 contained
+syn keyword ngxListenOptions spdy contained
+syn keyword ngxListenOptions proxy_protocol contained
+syn keyword ngxListenOptions setfib contained
+syn keyword ngxListenOptions fastopen contained
+syn keyword ngxListenOptions backlog contained
+syn keyword ngxListenOptions rcvbuf contained
+syn keyword ngxListenOptions sndbuf contained
+syn keyword ngxListenOptions accept_filter contained
+syn keyword ngxListenOptions deferred contained
+syn keyword ngxListenOptions bind contained
+syn keyword ngxListenOptions ipv6only contained
+syn keyword ngxListenOptions reuseport contained
+syn keyword ngxListenOptions so_keepalive contained
+syn keyword ngxListenOptions keepidle contained
+
+syn keyword ngxDirectiveControl break
+syn keyword ngxDirectiveControl return
+syn keyword ngxDirectiveControl rewrite
+syn keyword ngxDirectiveControl set
+
+syn keyword ngxDirectiveDeprecated connections
+syn keyword ngxDirectiveDeprecated imap
+syn keyword ngxDirectiveDeprecated limit_zone
+syn keyword ngxDirectiveDeprecated mysql_test
+syn keyword ngxDirectiveDeprecated open_file_cache_retest
+syn keyword ngxDirectiveDeprecated optimize_server_names
+syn keyword ngxDirectiveDeprecated satisfy_any
+syn keyword ngxDirectiveDeprecated so_keepalive
+
+syn keyword ngxDirective absolute_redirect
+syn keyword ngxDirective accept_mutex
+syn keyword ngxDirective accept_mutex_delay
+syn keyword ngxDirective acceptex_read
+syn keyword ngxDirective access_log
+syn keyword ngxDirective add_after_body
+syn keyword ngxDirective add_before_body
+syn keyword ngxDirective add_header
+syn keyword ngxDirective addition_types
+syn keyword ngxDirective aio
+syn keyword ngxDirective aio_write
+syn keyword ngxDirective alias
+syn keyword ngxDirective allow
+syn keyword ngxDirective ancient_browser
+syn keyword ngxDirective ancient_browser_value
+syn keyword ngxDirective auth_basic
+syn keyword ngxDirective auth_basic_user_file
+syn keyword ngxDirective auth_http
+syn keyword ngxDirective auth_http_header
+syn keyword ngxDirective auth_http_pass_client_cert
+syn keyword ngxDirective auth_http_timeout
+syn keyword ngxDirective auth_jwt
+syn keyword ngxDirective auth_jwt_key_file
+syn keyword ngxDirective auth_request
+syn keyword ngxDirective auth_request_set
+syn keyword ngxDirective autoindex
+syn keyword ngxDirective autoindex_exact_size
+syn keyword ngxDirective autoindex_format
+syn keyword ngxDirective autoindex_localtime
+syn keyword ngxDirective charset
+syn keyword ngxDirective charset_map
+syn keyword ngxDirective charset_types
+syn keyword ngxDirective chunked_transfer_encoding
+syn keyword ngxDirective client_body_buffer_size
+syn keyword ngxDirective client_body_in_file_only
+syn keyword ngxDirective client_body_in_single_buffer
+syn keyword ngxDirective client_body_temp_path
+syn keyword ngxDirective client_body_timeout
+syn keyword ngxDirective client_header_buffer_size
+syn keyword ngxDirective client_header_timeout
+syn keyword ngxDirective client_max_body_size
+syn keyword ngxDirective connection_pool_size
+syn keyword ngxDirective create_full_put_path
+syn keyword ngxDirective daemon
+syn keyword ngxDirective dav_access
+syn keyword ngxDirective dav_methods
+syn keyword ngxDirective debug_connection
+syn keyword ngxDirective debug_points
+syn keyword ngxDirective default_type
+syn keyword ngxDirective degradation
+syn keyword ngxDirective degrade
+syn keyword ngxDirective deny
+syn keyword ngxDirective devpoll_changes
+syn keyword ngxDirective devpoll_events
+syn keyword ngxDirective directio
+syn keyword ngxDirective directio_alignment
+syn keyword ngxDirective disable_symlinks
+syn keyword ngxDirective empty_gif
+syn keyword ngxDirective env
+syn keyword ngxDirective epoll_events
+syn keyword ngxDirective error_log
+syn keyword ngxDirective etag
+syn keyword ngxDirective eventport_events
+syn keyword ngxDirective expires
+syn keyword ngxDirective f4f
+syn keyword ngxDirective f4f_buffer_size
+syn keyword ngxDirective fastcgi_bind
+syn keyword ngxDirective fastcgi_buffer_size
+syn keyword ngxDirective fastcgi_buffering
+syn keyword ngxDirective fastcgi_buffers
+syn keyword ngxDirective fastcgi_busy_buffers_size
+syn keyword ngxDirective fastcgi_cache
+syn keyword ngxDirective fastcgi_cache_bypass
+syn keyword ngxDirective fastcgi_cache_key
+syn keyword ngxDirective fastcgi_cache_lock
+syn keyword ngxDirective fastcgi_cache_lock_age
+syn keyword ngxDirective fastcgi_cache_lock_timeout
+syn keyword ngxDirective fastcgi_cache_max_range_offset
+syn keyword ngxDirective fastcgi_cache_methods
+syn keyword ngxDirective fastcgi_cache_min_uses
+syn keyword ngxDirective fastcgi_cache_path
+syn keyword ngxDirective fastcgi_cache_purge
+syn keyword ngxDirective fastcgi_cache_revalidate
+syn keyword ngxDirective fastcgi_cache_use_stale
+syn keyword ngxDirective fastcgi_cache_valid
+syn keyword ngxDirective fastcgi_catch_stderr
+syn keyword ngxDirective fastcgi_connect_timeout
+syn keyword ngxDirective fastcgi_force_ranges
+syn keyword ngxDirective fastcgi_hide_header
+syn keyword ngxDirective fastcgi_ignore_client_abort
+syn keyword ngxDirective fastcgi_ignore_headers
+syn keyword ngxDirective fastcgi_index
+syn keyword ngxDirective fastcgi_intercept_errors
+syn keyword ngxDirective fastcgi_keep_conn
+syn keyword ngxDirective fastcgi_limit_rate
+syn keyword ngxDirective fastcgi_max_temp_file_size
+syn keyword ngxDirective fastcgi_next_upstream
+syn keyword ngxDirective fastcgi_next_upstream_timeout
+syn keyword ngxDirective fastcgi_next_upstream_tries
+syn keyword ngxDirective fastcgi_no_cache
+syn keyword ngxDirective fastcgi_param
+syn keyword ngxDirective fastcgi_pass_header
+syn keyword ngxDirective fastcgi_pass_request_body
+syn keyword ngxDirective fastcgi_pass_request_headers
+syn keyword ngxDirective fastcgi_read_timeout
+syn keyword ngxDirective fastcgi_request_buffering
+syn keyword ngxDirective fastcgi_send_lowat
+syn keyword ngxDirective fastcgi_send_timeout
+syn keyword ngxDirective fastcgi_split_path_info
+syn keyword ngxDirective fastcgi_store
+syn keyword ngxDirective fastcgi_store_access
+syn keyword ngxDirective fastcgi_temp_file_write_size
+syn keyword ngxDirective fastcgi_temp_path
+syn keyword ngxDirective flv
+syn keyword ngxDirective geoip_city
+syn keyword ngxDirective geoip_country
+syn keyword ngxDirective geoip_org
+syn keyword ngxDirective geoip_proxy
+syn keyword ngxDirective geoip_proxy_recursive
+syn keyword ngxDirective google_perftools_profiles
+syn keyword ngxDirective gunzip
+syn keyword ngxDirective gunzip_buffers
+syn keyword ngxDirective gzip nextgroup=ngxGzipOn,ngxGzipOff skipwhite
+syn keyword ngxGzipOn on contained
+syn keyword ngxGzipOff off contained
+syn keyword ngxDirective gzip_buffers
+syn keyword ngxDirective gzip_comp_level
+syn keyword ngxDirective gzip_disable
+syn keyword ngxDirective gzip_hash
+syn keyword ngxDirective gzip_http_version
+syn keyword ngxDirective gzip_min_length
+syn keyword ngxDirective gzip_no_buffer
+syn keyword ngxDirective gzip_proxied
+syn keyword ngxDirective gzip_static
+syn keyword ngxDirective gzip_types
+syn keyword ngxDirective gzip_vary
+syn keyword ngxDirective gzip_window
+syn keyword ngxDirective hash
+syn keyword ngxDirective health_check
+syn keyword ngxDirective health_check_timeout
+syn keyword ngxDirective hls
+syn keyword ngxDirective hls_buffers
+syn keyword ngxDirective hls_forward_args
+syn keyword ngxDirective hls_fragment
+syn keyword ngxDirective hls_mp4_buffer_size
+syn keyword ngxDirective hls_mp4_max_buffer_size
+syn keyword ngxDirective http2_chunk_size
+syn keyword ngxDirective http2_body_preread_size
+syn keyword ngxDirective http2_idle_timeout
+syn keyword ngxDirective http2_max_concurrent_streams
+syn keyword ngxDirective http2_max_field_size
+syn keyword ngxDirective http2_max_header_size
+syn keyword ngxDirective http2_max_requests
+syn keyword ngxDirective http2_recv_buffer_size
+syn keyword ngxDirective http2_recv_timeout
+syn keyword ngxDirective if_modified_since
+syn keyword ngxDirective ignore_invalid_headers
+syn keyword ngxDirective image_filter
+syn keyword ngxDirective image_filter_buffer
+syn keyword ngxDirective image_filter_interlace
+syn keyword ngxDirective image_filter_jpeg_quality
+syn keyword ngxDirective image_filter_sharpen
+syn keyword ngxDirective image_filter_transparency
+syn keyword ngxDirective image_filter_webp_quality
+syn keyword ngxDirective imap_auth
+syn keyword ngxDirective imap_capabilities
+syn keyword ngxDirective imap_client_buffer
+syn keyword ngxDirective index
+syn keyword ngxDirective iocp_threads
+syn keyword ngxDirective ip_hash
+syn keyword ngxDirective js_access
+syn keyword ngxDirective js_content
+syn keyword ngxDirective js_filter
+syn keyword ngxDirective js_include
+syn keyword ngxDirective js_preread
+syn keyword ngxDirective js_set
+syn keyword ngxDirective keepalive
+syn keyword ngxDirective keepalive_disable
+syn keyword ngxDirective keepalive_requests
+syn keyword ngxDirective keepalive_timeout
+syn keyword ngxDirective kqueue_changes
+syn keyword ngxDirective kqueue_events
+syn keyword ngxDirective large_client_header_buffers
+syn keyword ngxDirective least_conn
+syn keyword ngxDirective least_time
+syn keyword ngxDirective limit_conn
+syn keyword ngxDirective limit_conn_log_level
+syn keyword ngxDirective limit_conn_status
+syn keyword ngxDirective limit_conn_zone
+syn keyword ngxDirective limit_rate
+syn keyword ngxDirective limit_rate_after
+syn keyword ngxDirective limit_req
+syn keyword ngxDirective limit_req_log_level
+syn keyword ngxDirective limit_req_status
+syn keyword ngxDirective limit_req_zone
+syn keyword ngxDirective lingering_close
+syn keyword ngxDirective lingering_time
+syn keyword ngxDirective lingering_timeout
+syn keyword ngxDirective load_module
+syn keyword ngxDirective lock_file
+syn keyword ngxDirective log_format
+syn keyword ngxDirective log_not_found
+syn keyword ngxDirective log_subrequest
+syn keyword ngxDirective map_hash_bucket_size
+syn keyword ngxDirective map_hash_max_size
+syn keyword ngxDirective master_process
+syn keyword ngxDirective max_ranges
+syn keyword ngxDirective memcached_bind
+syn keyword ngxDirective memcached_buffer_size
+syn keyword ngxDirective memcached_connect_timeout
+syn keyword ngxDirective memcached_force_ranges
+syn keyword ngxDirective memcached_gzip_flag
+syn keyword ngxDirective memcached_next_upstream
+syn keyword ngxDirective memcached_next_upstream_timeout
+syn keyword ngxDirective memcached_next_upstream_tries
+syn keyword ngxDirective memcached_read_timeout
+syn keyword ngxDirective memcached_send_timeout
+syn keyword ngxDirective merge_slashes
+syn keyword ngxDirective min_delete_depth
+syn keyword ngxDirective modern_browser
+syn keyword ngxDirective modern_browser_value
+syn keyword ngxDirective mp4
+syn keyword ngxDirective mp4_buffer_size
+syn keyword ngxDirective mp4_max_buffer_size
+syn keyword ngxDirective mp4_limit_rate
+syn keyword ngxDirective mp4_limit_rate_after
+syn keyword ngxDirective msie_padding
+syn keyword ngxDirective msie_refresh
+syn keyword ngxDirective multi_accept
+syn keyword ngxDirective ntlm
+syn keyword ngxDirective open_file_cache
+syn keyword ngxDirective open_file_cache_errors
+syn keyword ngxDirective open_file_cache_events
+syn keyword ngxDirective open_file_cache_min_uses
+syn keyword ngxDirective open_file_cache_valid
+syn keyword ngxDirective open_log_file_cache
+syn keyword ngxDirective output_buffers
+syn keyword ngxDirective override_charset
+syn keyword ngxDirective pcre_jit
+syn keyword ngxDirective perl
+syn keyword ngxDirective perl_modules
+syn keyword ngxDirective perl_require
+syn keyword ngxDirective perl_set
+syn keyword ngxDirective pid
+syn keyword ngxDirective pop3_auth
+syn keyword ngxDirective pop3_capabilities
+syn keyword ngxDirective port_in_redirect
+syn keyword ngxDirective post_acceptex
+syn keyword ngxDirective postpone_gzipping
+syn keyword ngxDirective postpone_output
+syn keyword ngxDirective preread_buffer_size
+syn keyword ngxDirective preread_timeout
+syn keyword ngxDirective protocol nextgroup=ngxMailProtocol skipwhite
+syn keyword ngxMailProtocol imap pop3 smtp contained
+syn keyword ngxDirective proxy
+syn keyword ngxDirective proxy_bind
+syn keyword ngxDirective proxy_buffer
+syn keyword ngxDirective proxy_buffer_size
+syn keyword ngxDirective proxy_buffering
+syn keyword ngxDirective proxy_buffers
+syn keyword ngxDirective proxy_busy_buffers_size
+syn keyword ngxDirective proxy_cache
+syn keyword ngxDirective proxy_cache_bypass
+syn keyword ngxDirective proxy_cache_convert_head
+syn keyword ngxDirective proxy_cache_key
+syn keyword ngxDirective proxy_cache_lock
+syn keyword ngxDirective proxy_cache_lock_age
+syn keyword ngxDirective proxy_cache_lock_timeout
+syn keyword ngxDirective proxy_cache_max_range_offset
+syn keyword ngxDirective proxy_cache_methods
+syn keyword ngxDirective proxy_cache_min_uses
+syn keyword ngxDirective proxy_cache_path
+syn keyword ngxDirective proxy_cache_purge
+syn keyword ngxDirective proxy_cache_revalidate
+syn keyword ngxDirective proxy_cache_use_stale
+syn keyword ngxDirective proxy_cache_valid
+syn keyword ngxDirective proxy_connect_timeout
+syn keyword ngxDirective proxy_cookie_domain
+syn keyword ngxDirective proxy_cookie_path
+syn keyword ngxDirective proxy_download_rate
+syn keyword ngxDirective proxy_force_ranges
+syn keyword ngxDirective proxy_headers_hash_bucket_size
+syn keyword ngxDirective proxy_headers_hash_max_size
+syn keyword ngxDirective proxy_hide_header
+syn keyword ngxDirective proxy_http_version
+syn keyword ngxDirective proxy_ignore_client_abort
+syn keyword ngxDirective proxy_ignore_headers
+syn keyword ngxDirective proxy_intercept_errors
+syn keyword ngxDirective proxy_limit_rate
+syn keyword ngxDirective proxy_max_temp_file_size
+syn keyword ngxDirective proxy_method
+syn keyword ngxDirective proxy_next_upstream contained
+syn region ngxDirectiveProxyNextUpstream matchgroup=ngxDirective start=+^\s*\zsproxy_next_upstream\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxProxyNextUpstreamOptions,ngxString,ngxTemplateVar
+syn keyword ngxDirective proxy_next_upstream_timeout
+syn keyword ngxDirective proxy_next_upstream_tries
+syn keyword ngxDirective proxy_no_cache
+syn keyword ngxDirective proxy_pass_error_message
+syn keyword ngxDirective proxy_pass_header
+syn keyword ngxDirective proxy_pass_request_body
+syn keyword ngxDirective proxy_pass_request_headers
+syn keyword ngxDirective proxy_protocol
+syn keyword ngxDirective proxy_protocol_timeout
+syn keyword ngxDirective proxy_read_timeout
+syn keyword ngxDirective proxy_redirect
+syn keyword ngxDirective proxy_request_buffering
+syn keyword ngxDirective proxy_responses
+syn keyword ngxDirective proxy_send_lowat
+syn keyword ngxDirective proxy_send_timeout
+syn keyword ngxDirective proxy_set_body
+syn keyword ngxDirective proxy_set_header
+syn keyword ngxDirective proxy_ssl_certificate
+syn keyword ngxDirective proxy_ssl_certificate_key
+syn keyword ngxDirective proxy_ssl_ciphers
+syn keyword ngxDirective proxy_ssl_crl
+syn keyword ngxDirective proxy_ssl_name
+syn keyword ngxDirective proxy_ssl_password_file
+syn keyword ngxDirective proxy_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective proxy_ssl_server_name
+syn keyword ngxDirective proxy_ssl_session_reuse
+syn keyword ngxDirective proxy_ssl_trusted_certificate
+syn keyword ngxDirective proxy_ssl_verify
+syn keyword ngxDirective proxy_ssl_verify_depth
+syn keyword ngxDirective proxy_store
+syn keyword ngxDirective proxy_store_access
+syn keyword ngxDirective proxy_temp_file_write_size
+syn keyword ngxDirective proxy_temp_path
+syn keyword ngxDirective proxy_timeout
+syn keyword ngxDirective proxy_upload_rate
+syn keyword ngxDirective queue
+syn keyword ngxDirective random_index
+syn keyword ngxDirective read_ahead
+syn keyword ngxDirective real_ip_header
+syn keyword ngxDirective real_ip_recursive
+syn keyword ngxDirective recursive_error_pages
+syn keyword ngxDirective referer_hash_bucket_size
+syn keyword ngxDirective referer_hash_max_size
+syn keyword ngxDirective request_pool_size
+syn keyword ngxDirective reset_timedout_connection
+syn keyword ngxDirective resolver
+syn keyword ngxDirective resolver_timeout
+syn keyword ngxDirective rewrite_log
+syn keyword ngxDirective rtsig_overflow_events
+syn keyword ngxDirective rtsig_overflow_test
+syn keyword ngxDirective rtsig_overflow_threshold
+syn keyword ngxDirective rtsig_signo
+syn keyword ngxDirective satisfy
+syn keyword ngxDirective scgi_bind
+syn keyword ngxDirective scgi_buffer_size
+syn keyword ngxDirective scgi_buffering
+syn keyword ngxDirective scgi_buffers
+syn keyword ngxDirective scgi_busy_buffers_size
+syn keyword ngxDirective scgi_cache
+syn keyword ngxDirective scgi_cache_bypass
+syn keyword ngxDirective scgi_cache_key
+syn keyword ngxDirective scgi_cache_lock
+syn keyword ngxDirective scgi_cache_lock_age
+syn keyword ngxDirective scgi_cache_lock_timeout
+syn keyword ngxDirective scgi_cache_max_range_offset
+syn keyword ngxDirective scgi_cache_methods
+syn keyword ngxDirective scgi_cache_min_uses
+syn keyword ngxDirective scgi_cache_path
+syn keyword ngxDirective scgi_cache_purge
+syn keyword ngxDirective scgi_cache_revalidate
+syn keyword ngxDirective scgi_cache_use_stale
+syn keyword ngxDirective scgi_cache_valid
+syn keyword ngxDirective scgi_connect_timeout
+syn keyword ngxDirective scgi_force_ranges
+syn keyword ngxDirective scgi_hide_header
+syn keyword ngxDirective scgi_ignore_client_abort
+syn keyword ngxDirective scgi_ignore_headers
+syn keyword ngxDirective scgi_intercept_errors
+syn keyword ngxDirective scgi_limit_rate
+syn keyword ngxDirective scgi_max_temp_file_size
+syn keyword ngxDirective scgi_next_upstream
+syn keyword ngxDirective scgi_next_upstream_timeout
+syn keyword ngxDirective scgi_next_upstream_tries
+syn keyword ngxDirective scgi_no_cache
+syn keyword ngxDirective scgi_param
+syn keyword ngxDirective scgi_pass_header
+syn keyword ngxDirective scgi_pass_request_body
+syn keyword ngxDirective scgi_pass_request_headers
+syn keyword ngxDirective scgi_read_timeout
+syn keyword ngxDirective scgi_request_buffering
+syn keyword ngxDirective scgi_send_timeout
+syn keyword ngxDirective scgi_store
+syn keyword ngxDirective scgi_store_access
+syn keyword ngxDirective scgi_temp_file_write_size
+syn keyword ngxDirective scgi_temp_path
+syn keyword ngxDirective secure_link
+syn keyword ngxDirective secure_link_md5
+syn keyword ngxDirective secure_link_secret
+syn keyword ngxDirective send_lowat
+syn keyword ngxDirective send_timeout
+syn keyword ngxDirective sendfile
+syn keyword ngxDirective sendfile_max_chunk
+syn keyword ngxDirective server_name_in_redirect
+syn keyword ngxDirective server_names_hash_bucket_size
+syn keyword ngxDirective server_names_hash_max_size
+syn keyword ngxDirective server_tokens
+syn keyword ngxDirective session_log
+syn keyword ngxDirective session_log_format
+syn keyword ngxDirective session_log_zone
+syn keyword ngxDirective set_real_ip_from
+syn keyword ngxDirective slice
+syn keyword ngxDirective smtp_auth
+syn keyword ngxDirective smtp_capabilities
+syn keyword ngxDirective smtp_client_buffer
+syn keyword ngxDirective smtp_greeting_delay
+syn keyword ngxDirective source_charset
+syn keyword ngxDirective spdy_chunk_size
+syn keyword ngxDirective spdy_headers_comp
+syn keyword ngxDirective spdy_keepalive_timeout
+syn keyword ngxDirective spdy_max_concurrent_streams
+syn keyword ngxDirective spdy_pool_size
+syn keyword ngxDirective spdy_recv_buffer_size
+syn keyword ngxDirective spdy_recv_timeout
+syn keyword ngxDirective spdy_streams_index_size
+syn keyword ngxDirective ssi
+syn keyword ngxDirective ssi_ignore_recycled_buffers
+syn keyword ngxDirective ssi_last_modified
+syn keyword ngxDirective ssi_min_file_chunk
+syn keyword ngxDirective ssi_silent_errors
+syn keyword ngxDirective ssi_types
+syn keyword ngxDirective ssi_value_length
+syn keyword ngxDirective ssl
+syn keyword ngxDirective ssl_buffer_size
+syn keyword ngxDirective ssl_certificate
+syn keyword ngxDirective ssl_certificate_key
+syn keyword ngxDirective ssl_ciphers
+syn keyword ngxDirective ssl_client_certificate
+syn keyword ngxDirective ssl_crl
+syn keyword ngxDirective ssl_dhparam
+syn keyword ngxDirective ssl_ecdh_curve
+syn keyword ngxDirective ssl_engine
+syn keyword ngxDirective ssl_handshake_timeout
+syn keyword ngxDirective ssl_password_file
+syn keyword ngxDirective ssl_prefer_server_ciphers nextgroup=ngxSSLPreferServerCiphersOff,ngxSSLPreferServerCiphersOn skipwhite
+syn keyword ngxSSLPreferServerCiphersOn on contained
+syn keyword ngxSSLPreferServerCiphersOff off contained
+syn keyword ngxDirective ssl_preread
+syn keyword ngxDirective ssl_protocols nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1\.1' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+syn match ngxSSLProtocol 'TLSv1\.2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+
+" Do not enable highlighting of insecure protocols if sslecure is loaded
+if !exists('g:loaded_sslsecure')
+ syn keyword ngxSSLProtocolDeprecated SSLv2 SSLv3 contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+else
+ syn match ngxSSLProtocol 'SSLv2' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+ syn match ngxSSLProtocol 'SSLv3' contained nextgroup=ngxSSLProtocol,ngxSSLProtocolDeprecated skipwhite
+endif
+
+syn keyword ngxDirective ssl_session_cache
+syn keyword ngxDirective ssl_session_ticket_key
+syn keyword ngxDirective ssl_session_tickets nextgroup=ngxSSLSessionTicketsOn,ngxSSLSessionTicketsOff skipwhite
+syn keyword ngxSSLSessionTicketsOn on contained
+syn keyword ngxSSLSessionTicketsOff off contained
+syn keyword ngxDirective ssl_session_timeout
+syn keyword ngxDirective ssl_stapling
+syn keyword ngxDirective ssl_stapling_file
+syn keyword ngxDirective ssl_stapling_responder
+syn keyword ngxDirective ssl_stapling_verify
+syn keyword ngxDirective ssl_trusted_certificate
+syn keyword ngxDirective ssl_verify_client
+syn keyword ngxDirective ssl_verify_depth
+syn keyword ngxDirective starttls
+syn keyword ngxDirective state
+syn keyword ngxDirective status
+syn keyword ngxDirective status_format
+syn keyword ngxDirective status_zone
+syn keyword ngxDirective sticky contained
+syn keyword ngxDirective sticky_cookie_insert contained
+syn region ngxDirectiveSticky matchgroup=ngxDirective start=+^\s*\zssticky\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxDirective stub_status
+syn keyword ngxDirective sub_filter
+syn keyword ngxDirective sub_filter_last_modified
+syn keyword ngxDirective sub_filter_once
+syn keyword ngxDirective sub_filter_types
+syn keyword ngxDirective tcp_nodelay
+syn keyword ngxDirective tcp_nopush
+syn keyword ngxDirective thread_pool
+syn keyword ngxDirective thread_stack_size
+syn keyword ngxDirective timeout
+syn keyword ngxDirective timer_resolution
+syn keyword ngxDirective types_hash_bucket_size
+syn keyword ngxDirective types_hash_max_size
+syn keyword ngxDirective underscores_in_headers
+syn keyword ngxDirective uninitialized_variable_warn
+syn keyword ngxDirective upstream_conf
+syn keyword ngxDirective use
+syn keyword ngxDirective user
+syn keyword ngxDirective userid
+syn keyword ngxDirective userid_domain
+syn keyword ngxDirective userid_expires
+syn keyword ngxDirective userid_mark
+syn keyword ngxDirective userid_name
+syn keyword ngxDirective userid_p3p
+syn keyword ngxDirective userid_path
+syn keyword ngxDirective userid_service
+syn keyword ngxDirective uwsgi_bind
+syn keyword ngxDirective uwsgi_buffer_size
+syn keyword ngxDirective uwsgi_buffering
+syn keyword ngxDirective uwsgi_buffers
+syn keyword ngxDirective uwsgi_busy_buffers_size
+syn keyword ngxDirective uwsgi_cache
+syn keyword ngxDirective uwsgi_cache_bypass
+syn keyword ngxDirective uwsgi_cache_key
+syn keyword ngxDirective uwsgi_cache_lock
+syn keyword ngxDirective uwsgi_cache_lock_age
+syn keyword ngxDirective uwsgi_cache_lock_timeout
+syn keyword ngxDirective uwsgi_cache_methods
+syn keyword ngxDirective uwsgi_cache_min_uses
+syn keyword ngxDirective uwsgi_cache_path
+syn keyword ngxDirective uwsgi_cache_purge
+syn keyword ngxDirective uwsgi_cache_revalidate
+syn keyword ngxDirective uwsgi_cache_use_stale
+syn keyword ngxDirective uwsgi_cache_valid
+syn keyword ngxDirective uwsgi_connect_timeout
+syn keyword ngxDirective uwsgi_force_ranges
+syn keyword ngxDirective uwsgi_hide_header
+syn keyword ngxDirective uwsgi_ignore_client_abort
+syn keyword ngxDirective uwsgi_ignore_headers
+syn keyword ngxDirective uwsgi_intercept_errors
+syn keyword ngxDirective uwsgi_limit_rate
+syn keyword ngxDirective uwsgi_max_temp_file_size
+syn keyword ngxDirective uwsgi_modifier1
+syn keyword ngxDirective uwsgi_modifier2
+syn keyword ngxDirective uwsgi_next_upstream
+syn keyword ngxDirective uwsgi_next_upstream_timeout
+syn keyword ngxDirective uwsgi_next_upstream_tries
+syn keyword ngxDirective uwsgi_no_cache
+syn keyword ngxDirective uwsgi_param
+syn keyword ngxDirective uwsgi_pass
+syn keyword ngxDirective uwsgi_pass_header
+syn keyword ngxDirective uwsgi_pass_request_body
+syn keyword ngxDirective uwsgi_pass_request_headers
+syn keyword ngxDirective uwsgi_read_timeout
+syn keyword ngxDirective uwsgi_request_buffering
+syn keyword ngxDirective uwsgi_send_timeout
+syn keyword ngxDirective uwsgi_ssl_certificate
+syn keyword ngxDirective uwsgi_ssl_certificate_key
+syn keyword ngxDirective uwsgi_ssl_ciphers
+syn keyword ngxDirective uwsgi_ssl_crl
+syn keyword ngxDirective uwsgi_ssl_name
+syn keyword ngxDirective uwsgi_ssl_password_file
+syn keyword ngxDirective uwsgi_ssl_protocols nextgroup=ngxSSLProtocol skipwhite
+syn keyword ngxDirective uwsgi_ssl_server_name
+syn keyword ngxDirective uwsgi_ssl_session_reuse
+syn keyword ngxDirective uwsgi_ssl_trusted_certificate
+syn keyword ngxDirective uwsgi_ssl_verify
+syn keyword ngxDirective uwsgi_ssl_verify_depth
+syn keyword ngxDirective uwsgi_store
+syn keyword ngxDirective uwsgi_store_access
+syn keyword ngxDirective uwsgi_string
+syn keyword ngxDirective uwsgi_temp_file_write_size
+syn keyword ngxDirective uwsgi_temp_path
+syn keyword ngxDirective valid_referers
+syn keyword ngxDirective variables_hash_bucket_size
+syn keyword ngxDirective variables_hash_max_size
+syn keyword ngxDirective worker_aio_requests
+syn keyword ngxDirective worker_connections
+syn keyword ngxDirective worker_cpu_affinity
+syn keyword ngxDirective worker_priority
+syn keyword ngxDirective worker_processes
+syn keyword ngxDirective worker_rlimit_core
+syn keyword ngxDirective worker_rlimit_nofile
+syn keyword ngxDirective worker_rlimit_sigpending
+syn keyword ngxDirective worker_threads
+syn keyword ngxDirective working_directory
+syn keyword ngxDirective xclient
+syn keyword ngxDirective xml_entities
+syn keyword ngxDirective xslt_last_modified
+syn keyword ngxDirective xslt_param
+syn keyword ngxDirective xslt_string_param
+syn keyword ngxDirective xslt_stylesheet
+syn keyword ngxDirective xslt_types
+syn keyword ngxDirective zone
+
+" Do not enable highlighting of insecure ciphers if sslecure is loaded
+if !exists('g:loaded_sslsecure')
+ " Mark insecure SSL Ciphers (Note: List might not not complete)
+ " Reference: https://www.openssl.org/docs/man1.0.2/apps/ciphers.html
+ syn match ngxSSLCipherInsecure '[^!]\zsSSLv3'
+ syn match ngxSSLCipherInsecure '[^!]\zsSSLv2'
+ syn match ngxSSLCipherInsecure '[^!]\zsHIGH'
+ syn match ngxSSLCipherInsecure '[^!]\zsMEDIUM'
+ syn match ngxSSLCipherInsecure '[^!]\zsLOW'
+ syn match ngxSSLCipherInsecure '[^!]\zsDEFAULT'
+ syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFDEFAULT'
+ syn match ngxSSLCipherInsecure '[^!]\zsALL'
+ syn match ngxSSLCipherInsecure '[^!]\zsCOMPLEMENTOFALL'
+
+ " SHA ciphers are only used in HMAC with all known OpenSSL/ LibreSSL cipher suites and MAC
+ " usage is still considered safe
+ " syn match ngxSSLCipherInsecure '[^!]\zsSHA\ze\D' " Match SHA1 without matching SHA256+
+ " syn match ngxSSLCipherInsecure '[^!]\zsSHA1'
+ syn match ngxSSLCipherInsecure '[^!]\zsMD5'
+ syn match ngxSSLCipherInsecure '[^!]\zsRC2'
+ syn match ngxSSLCipherInsecure '[^!]\zsRC4'
+ syn match ngxSSLCipherInsecure '[^!]\zs3DES'
+ syn match ngxSSLCipherInsecure '[^!3]\zsDES'
+ syn match ngxSSLCipherInsecure '[^!]\zsaDSS'
+ syn match ngxSSLCipherInsecure '[^!a]\zsDSS'
+ syn match ngxSSLCipherInsecure '[^!]\zsPSK'
+ syn match ngxSSLCipherInsecure '[^!]\zsIDEA'
+ syn match ngxSSLCipherInsecure '[^!]\zsSEED'
+ syn match ngxSSLCipherInsecure '[^!]\zsEXP\w*' " Match all EXPORT ciphers
+ syn match ngxSSLCipherInsecure '[^!]\zsaGOST\w*' " Match all GOST ciphers
+ syn match ngxSSLCipherInsecure '[^!]\zskGOST\w*'
+ syn match ngxSSLCipherInsecure '[^!ak]\zsGOST\w*'
+ syn match ngxSSLCipherInsecure '[^!]\zs[kae]\?FZA' " Not implemented
+ syn match ngxSSLCipherInsecure '[^!]\zsECB'
+ syn match ngxSSLCipherInsecure '[^!]\zs[aes]NULL'
+
+ " Anonymous cipher suites should never be used
+ syn match ngxSSLCipherInsecure '[^!ECa]\zsDH\ze[^E]' " Try to match DH without DHE, EDH, EECDH, etc.
+ syn match ngxSSLCipherInsecure '[^!EA]\zsECDH\ze[^E]' " Do not match EECDH, ECDHE
+ syn match ngxSSLCipherInsecure '[^!]\zsADH'
+ syn match ngxSSLCipherInsecure '[^!]\zskDHE'
+ syn match ngxSSLCipherInsecure '[^!]\zskEDH'
+ syn match ngxSSLCipherInsecure '[^!]\zskECDHE'
+ syn match ngxSSLCipherInsecure '[^!]\zskEECDH'
+ syn match ngxSSLCipherInsecure '[^!E]\zsAECDH'
+endif
+
+syn keyword ngxProxyNextUpstreamOptions error contained
+syn keyword ngxProxyNextUpstreamOptions timeout contained
+syn keyword ngxProxyNextUpstreamOptions invalid_header contained
+syn keyword ngxProxyNextUpstreamOptions http_500 contained
+syn keyword ngxProxyNextUpstreamOptions http_502 contained
+syn keyword ngxProxyNextUpstreamOptions http_503 contained
+syn keyword ngxProxyNextUpstreamOptions http_504 contained
+syn keyword ngxProxyNextUpstreamOptions http_403 contained
+syn keyword ngxProxyNextUpstreamOptions http_404 contained
+syn keyword ngxProxyNextUpstreamOptions http_429 contained
+syn keyword ngxProxyNextUpstreamOptions non_idempotent contained
+syn keyword ngxProxyNextUpstreamOptions off contained
+
+syn keyword ngxStickyOptions cookie contained
+syn region ngxStickyOptionsCookie matchgroup=ngxStickyOptions start=+^\s*\zssticky\s\s*cookie\ze\s.*;+ skip=+\\\\\|\\\;+ end=+;+he=e-1 contains=ngxCookieOptions,ngxString,ngxBoolean,ngxInteger,ngxTemplateVar
+syn keyword ngxStickyOptions route contained
+syn keyword ngxStickyOptions learn contained
+
+syn keyword ngxCookieOptions expires contained
+syn keyword ngxCookieOptions domain contained
+syn keyword ngxCookieOptions httponly contained
+syn keyword ngxCookieOptions secure contained
+syn keyword ngxCookieOptions path contained
+
+" 3rd party module list:
+" https://www.nginx.com/resources/wiki/modules/
+
+" Accept Language Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty set_from_accept_language
+
+" Access Key Module (DEPRECATED)
+" Denies access unless the request URL contains an access key.
+syn keyword ngxDirectiveDeprecated accesskey
+syn keyword ngxDirectiveDeprecated accesskey_arg
+syn keyword ngxDirectiveDeprecated accesskey_hashmethod
+syn keyword ngxDirectiveDeprecated accesskey_signature
+
+" Asynchronous FastCGI Module
+" Primarily a modified version of the Nginx FastCGI module which implements multiplexing of connections, allowing a single FastCGI server to handle many concurrent requests.
+" syn keyword ngxDirectiveThirdParty fastcgi_bind
+" syn keyword ngxDirectiveThirdParty fastcgi_buffer_size
+" syn keyword ngxDirectiveThirdParty fastcgi_buffers
+" syn keyword ngxDirectiveThirdParty fastcgi_busy_buffers_size
+" syn keyword ngxDirectiveThirdParty fastcgi_cache
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_key
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_methods
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_min_uses
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_path
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_use_stale
+" syn keyword ngxDirectiveThirdParty fastcgi_cache_valid
+" syn keyword ngxDirectiveThirdParty fastcgi_catch_stderr
+" syn keyword ngxDirectiveThirdParty fastcgi_connect_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_hide_header
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_client_abort
+" syn keyword ngxDirectiveThirdParty fastcgi_ignore_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_index
+" syn keyword ngxDirectiveThirdParty fastcgi_intercept_errors
+" syn keyword ngxDirectiveThirdParty fastcgi_max_temp_file_size
+" syn keyword ngxDirectiveThirdParty fastcgi_next_upstream
+" syn keyword ngxDirectiveThirdParty fastcgi_param
+" syn keyword ngxDirectiveThirdParty fastcgi_pass
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_header
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_body
+" syn keyword ngxDirectiveThirdParty fastcgi_pass_request_headers
+" syn keyword ngxDirectiveThirdParty fastcgi_read_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_send_lowat
+" syn keyword ngxDirectiveThirdParty fastcgi_send_timeout
+" syn keyword ngxDirectiveThirdParty fastcgi_split_path_info
+" syn keyword ngxDirectiveThirdParty fastcgi_store
+" syn keyword ngxDirectiveThirdParty fastcgi_store_access
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_file_write_size
+" syn keyword ngxDirectiveThirdParty fastcgi_temp_path
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_fail_timeout
+syn keyword ngxDirectiveDeprecated fastcgi_upstream_max_fails
+
+" Akamai G2O Module
+" Nginx Module for Authenticating Akamai G2O requests
+syn keyword ngxDirectiveThirdParty g2o
+syn keyword ngxDirectiveThirdParty g2o_nonce
+syn keyword ngxDirectiveThirdParty g2o_key
+
+" Lua Module
+" You can be very simple to execute lua code for nginx
+syn keyword ngxDirectiveThirdParty lua_file
+
+" Array Variable Module
+" Add support for array-typed variables to nginx config files
+syn keyword ngxDirectiveThirdParty array_split
+syn keyword ngxDirectiveThirdParty array_join
+syn keyword ngxDirectiveThirdParty array_map
+syn keyword ngxDirectiveThirdParty array_map_op
+
+" Nginx Audio Track for HTTP Live Streaming
+" This nginx module generates audio track for hls streams on the fly.
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_rootpath
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_format
+syn keyword ngxDirectiveThirdParty ngx_hls_audio_track_output_header
+
+" AWS Proxy Module
+" Nginx module to proxy to authenticated AWS services
+syn keyword ngxDirectiveThirdParty aws_access_key
+syn keyword ngxDirectiveThirdParty aws_key_scope
+syn keyword ngxDirectiveThirdParty aws_signing_key
+syn keyword ngxDirectiveThirdParty aws_endpoint
+syn keyword ngxDirectiveThirdParty aws_s3_bucket
+syn keyword ngxDirectiveThirdParty aws_sign
+
+" Backtrace module
+" A Nginx module to dump backtrace when a worker process exits abnormally
+syn keyword ngxDirectiveThirdParty backtrace_log
+syn keyword ngxDirectiveThirdParty backtrace_max_stack_size
+
+" Brotli Module
+" Nginx module for Brotli compression
+syn keyword ngxDirectiveThirdParty brotli_static
+syn keyword ngxDirectiveThirdParty brotli
+syn keyword ngxDirectiveThirdParty brotli_types
+syn keyword ngxDirectiveThirdParty brotli_buffers
+syn keyword ngxDirectiveThirdParty brotli_comp_level
+syn keyword ngxDirectiveThirdParty brotli_window
+syn keyword ngxDirectiveThirdParty brotli_min_length
+
+" Cache Purge Module
+" Adds ability to purge content from FastCGI, proxy, SCGI and uWSGI caches.
+syn keyword ngxDirectiveThirdParty fastcgi_cache_purge
+syn keyword ngxDirectiveThirdParty proxy_cache_purge
+" syn keyword ngxDirectiveThirdParty scgi_cache_purge
+" syn keyword ngxDirectiveThirdParty uwsgi_cache_purge
+
+" Chunkin Module (DEPRECATED)
+" HTTP 1.1 chunked-encoding request body support for Nginx.
+syn keyword ngxDirectiveDeprecated chunkin
+syn keyword ngxDirectiveDeprecated chunkin_keepalive
+syn keyword ngxDirectiveDeprecated chunkin_max_chunks_per_buf
+syn keyword ngxDirectiveDeprecated chunkin_resume
+
+" Circle GIF Module
+" Generates simple circle images with the colors and size specified in the URL.
+syn keyword ngxDirectiveThirdParty circle_gif
+syn keyword ngxDirectiveThirdParty circle_gif_max_radius
+syn keyword ngxDirectiveThirdParty circle_gif_min_radius
+syn keyword ngxDirectiveThirdParty circle_gif_step_radius
+
+" Nginx-Clojure Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty jvm_path
+syn keyword ngxDirectiveThirdParty jvm_var
+syn keyword ngxDirectiveThirdParty jvm_classpath
+syn keyword ngxDirectiveThirdParty jvm_classpath_check
+syn keyword ngxDirectiveThirdParty jvm_workers
+syn keyword ngxDirectiveThirdParty jvm_options
+syn keyword ngxDirectiveThirdParty jvm_handler_type
+syn keyword ngxDirectiveThirdParty jvm_init_handler_name
+syn keyword ngxDirectiveThirdParty jvm_init_handler_code
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_name
+syn keyword ngxDirectiveThirdParty jvm_exit_handler_code
+syn keyword ngxDirectiveThirdParty handlers_lazy_init
+syn keyword ngxDirectiveThirdParty auto_upgrade_ws
+syn keyword ngxDirectiveThirdParty content_handler_type
+syn keyword ngxDirectiveThirdParty content_handler_name
+syn keyword ngxDirectiveThirdParty content_handler_code
+syn keyword ngxDirectiveThirdParty rewrite_handler_type
+syn keyword ngxDirectiveThirdParty rewrite_handler_name
+syn keyword ngxDirectiveThirdParty rewrite_handler_code
+syn keyword ngxDirectiveThirdParty access_handler_type
+syn keyword ngxDirectiveThirdParty access_handler_name
+syn keyword ngxDirectiveThirdParty access_handler_code
+syn keyword ngxDirectiveThirdParty header_filter_type
+syn keyword ngxDirectiveThirdParty header_filter_name
+syn keyword ngxDirectiveThirdParty header_filter_code
+syn keyword ngxDirectiveThirdParty content_handler_property
+syn keyword ngxDirectiveThirdParty rewrite_handler_property
+syn keyword ngxDirectiveThirdParty access_handler_property
+syn keyword ngxDirectiveThirdParty header_filter_property
+syn keyword ngxDirectiveThirdParty always_read_body
+syn keyword ngxDirectiveThirdParty shared_map
+syn keyword ngxDirectiveThirdParty write_page_size
+
+" Upstream Consistent Hash
+" A load balancer that uses an internal consistent hash ring to select the right backend node.
+syn keyword ngxDirectiveThirdParty consistent_hash
+
+" Nginx Development Kit
+" The NDK is an Nginx module that is designed to extend the core functionality of the excellent Nginx webserver in a way that can be used as a basis of other Nginx modules.
+" NDK_UPSTREAM_LIST
+" This submodule provides a directive that creates a list of upstreams, with optional weighting. This list can then be used by other modules to hash over the upstreams however they choose.
+syn keyword ngxDirectiveThirdParty upstream_list
+
+" Drizzle Module
+" Upstream module for talking to MySQL and Drizzle directly
+syn keyword ngxDirectiveThirdParty drizzle_server
+syn keyword ngxDirectiveThirdParty drizzle_keepalive
+syn keyword ngxDirectiveThirdParty drizzle_query
+syn keyword ngxDirectiveThirdParty drizzle_pass
+syn keyword ngxDirectiveThirdParty drizzle_connect_timeout
+syn keyword ngxDirectiveThirdParty drizzle_send_query_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_cols_timeout
+syn keyword ngxDirectiveThirdParty drizzle_recv_rows_timeout
+syn keyword ngxDirectiveThirdParty drizzle_buffer_size
+syn keyword ngxDirectiveThirdParty drizzle_module_header
+syn keyword ngxDirectiveThirdParty drizzle_status
+
+" Dynamic ETags Module
+" Attempt at handling ETag / If-None-Match on proxied content.
+syn keyword ngxDirectiveThirdParty dynamic_etags
+
+" Echo Module
+" Bringing the power of "echo", "sleep", "time" and more to Nginx's config file
+syn keyword ngxDirectiveThirdParty echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_blocking_sleep
+syn keyword ngxDirectiveThirdParty echo_reset_timer
+syn keyword ngxDirectiveThirdParty echo_read_request_body
+syn keyword ngxDirectiveThirdParty echo_location_async
+syn keyword ngxDirectiveThirdParty echo_location
+syn keyword ngxDirectiveThirdParty echo_subrequest_async
+syn keyword ngxDirectiveThirdParty echo_subrequest
+syn keyword ngxDirectiveThirdParty echo_foreach_split
+syn keyword ngxDirectiveThirdParty echo_end
+syn keyword ngxDirectiveThirdParty echo_request_body
+syn keyword ngxDirectiveThirdParty echo_exec
+syn keyword ngxDirectiveThirdParty echo_status
+syn keyword ngxDirectiveThirdParty echo_before_body
+syn keyword ngxDirectiveThirdParty echo_after_body
+
+" Encrypted Session Module
+" Encrypt and decrypt nginx variable values
+syn keyword ngxDirectiveThirdParty encrypted_session_key
+syn keyword ngxDirectiveThirdParty encrypted_session_iv
+syn keyword ngxDirectiveThirdParty encrypted_session_expires
+syn keyword ngxDirectiveThirdParty set_encrypt_session
+syn keyword ngxDirectiveThirdParty set_decrypt_session
+
+" Enhanced Memcached Module
+" This module is based on the standard Nginx Memcached module, with some additonal features
+syn keyword ngxDirectiveThirdParty enhanced_memcached_pass
+syn keyword ngxDirectiveThirdParty enhanced_memcached_hash_keys_with_md5
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_put
+syn keyword ngxDirectiveThirdParty enhanced_memcached_allow_delete
+syn keyword ngxDirectiveThirdParty enhanced_memcached_stats
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush
+syn keyword ngxDirectiveThirdParty enhanced_memcached_flush_namespace
+syn keyword ngxDirectiveThirdParty enhanced_memcached_bind
+syn keyword ngxDirectiveThirdParty enhanced_memcached_connect_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_send_timeout
+syn keyword ngxDirectiveThirdParty enhanced_memcached_buffer_size
+syn keyword ngxDirectiveThirdParty enhanced_memcached_read_timeout
+
+" Events Module (DEPRECATED)
+" Provides options for start/stop events.
+syn keyword ngxDirectiveDeprecated on_start
+syn keyword ngxDirectiveDeprecated on_stop
+
+" EY Balancer Module
+" Adds a request queue to Nginx that allows the limiting of concurrent requests passed to the upstream.
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty max_connections_max_queue_length
+syn keyword ngxDirectiveThirdParty max_connections_queue_timeout
+
+" Upstream Fair Balancer
+" Sends an incoming request to the least-busy backend server, rather than distributing requests round-robin.
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
+
+" Fancy Indexes Module
+" Like the built-in autoindex module, but fancier.
+syn keyword ngxDirectiveThirdParty fancyindex
+syn keyword ngxDirectiveThirdParty fancyindex_default_sort
+syn keyword ngxDirectiveThirdParty fancyindex_directories_first
+syn keyword ngxDirectiveThirdParty fancyindex_css_href
+syn keyword ngxDirectiveThirdParty fancyindex_exact_size
+syn keyword ngxDirectiveThirdParty fancyindex_name_length
+syn keyword ngxDirectiveThirdParty fancyindex_footer
+syn keyword ngxDirectiveThirdParty fancyindex_header
+syn keyword ngxDirectiveThirdParty fancyindex_show_path
+syn keyword ngxDirectiveThirdParty fancyindex_ignore
+syn keyword ngxDirectiveThirdParty fancyindex_hide_symlinks
+syn keyword ngxDirectiveThirdParty fancyindex_localtime
+syn keyword ngxDirectiveThirdParty fancyindex_time_format
+
+" Form Auth Module
+" Provides authentication and authorization with credentials submitted via POST request
+syn keyword ngxDirectiveThirdParty form_auth
+syn keyword ngxDirectiveThirdParty form_auth_pam_service
+syn keyword ngxDirectiveThirdParty form_auth_login
+syn keyword ngxDirectiveThirdParty form_auth_password
+syn keyword ngxDirectiveThirdParty form_auth_remote_user
+
+" Form Input Module
+" Reads HTTP POST and PUT request body encoded in "application/x-www-form-urlencoded" and parses the arguments into nginx variables.
+syn keyword ngxDirectiveThirdParty set_form_input
+syn keyword ngxDirectiveThirdParty set_form_input_multi
+
+" GeoIP Module (DEPRECATED)
+" Country code lookups via the MaxMind GeoIP API.
+syn keyword ngxDirectiveDeprecated geoip_country_file
+
+" GeoIP 2 Module
+" Creates variables with values from the maxmind geoip2 databases based on the client IP
+syn keyword ngxDirectiveThirdParty geoip2
+
+" GridFS Module
+" Nginx module for serving files from MongoDB's GridFS
+syn keyword ngxDirectiveThirdParty gridfs
+
+" Headers More Module
+" Set and clear input and output headers...more than "add"!
+syn keyword ngxDirectiveThirdParty more_clear_headers
+syn keyword ngxDirectiveThirdParty more_clear_input_headers
+syn keyword ngxDirectiveThirdParty more_set_headers
+syn keyword ngxDirectiveThirdParty more_set_input_headers
+
+" Health Checks Upstreams Module
+" Polls backends and if they respond with HTTP 200 + an optional request body, they are marked good. Otherwise, they are marked bad.
+syn keyword ngxDirectiveThirdParty healthcheck_enabled
+syn keyword ngxDirectiveThirdParty healthcheck_delay
+syn keyword ngxDirectiveThirdParty healthcheck_timeout
+syn keyword ngxDirectiveThirdParty healthcheck_failcount
+syn keyword ngxDirectiveThirdParty healthcheck_send
+syn keyword ngxDirectiveThirdParty healthcheck_expected
+syn keyword ngxDirectiveThirdParty healthcheck_buffer
+syn keyword ngxDirectiveThirdParty healthcheck_status
+
+" HTTP Accounting Module
+" Add traffic stat function to nginx. Useful for http accounting based on nginx configuration logic
+syn keyword ngxDirectiveThirdParty http_accounting
+syn keyword ngxDirectiveThirdParty http_accounting_log
+syn keyword ngxDirectiveThirdParty http_accounting_id
+syn keyword ngxDirectiveThirdParty http_accounting_interval
+syn keyword ngxDirectiveThirdParty http_accounting_perturb
+
+" Nginx Digest Authentication module
+" Digest Authentication for Nginx
+syn keyword ngxDirectiveThirdParty auth_digest
+syn keyword ngxDirectiveThirdParty auth_digest_user_file
+syn keyword ngxDirectiveThirdParty auth_digest_timeout
+syn keyword ngxDirectiveThirdParty auth_digest_expires
+syn keyword ngxDirectiveThirdParty auth_digest_replays
+syn keyword ngxDirectiveThirdParty auth_digest_shm_size
+
+" Auth PAM Module
+" HTTP Basic Authentication using PAM.
+syn keyword ngxDirectiveThirdParty auth_pam
+syn keyword ngxDirectiveThirdParty auth_pam_service_name
+
+" HTTP Auth Request Module
+" Implements client authorization based on the result of a subrequest
+" syn keyword ngxDirectiveThirdParty auth_request
+" syn keyword ngxDirectiveThirdParty auth_request_set
+
+" HTTP Concatenation module for Nginx
+" A Nginx module for concatenating files in a given context: CSS and JS files usually
+syn keyword ngxDirectiveThirdParty concat
+syn keyword ngxDirectiveThirdParty concat_types
+syn keyword ngxDirectiveThirdParty concat_unique
+syn keyword ngxDirectiveThirdParty concat_max_files
+syn keyword ngxDirectiveThirdParty concat_delimiter
+syn keyword ngxDirectiveThirdParty concat_ignore_file_error
+
+" HTTP Dynamic Upstream Module
+" Update upstreams' config by restful interface
+syn keyword ngxDirectiveThirdParty dyups_interface
+syn keyword ngxDirectiveThirdParty dyups_read_msg_timeout
+syn keyword ngxDirectiveThirdParty dyups_shm_zone_size
+syn keyword ngxDirectiveThirdParty dyups_upstream_conf
+syn keyword ngxDirectiveThirdParty dyups_trylock
+
+" HTTP Footer If Filter Module
+" The ngx_http_footer_if_filter_module is used to add given content to the end of the response according to the condition specified.
+syn keyword ngxDirectiveThirdParty footer_if
+
+" HTTP Footer Filter Module
+" This module implements a body filter that adds a given string to the page footer.
+syn keyword ngxDirectiveThirdParty footer
+syn keyword ngxDirectiveThirdParty footer_types
+
+" HTTP Internal Redirect Module
+" Make an internal redirect to the uri specified according to the condition specified.
+syn keyword ngxDirectiveThirdParty internal_redirect_if
+syn keyword ngxDirectiveThirdParty internal_redirect_if_no_postponed
+
+" HTTP JavaScript Module
+" Embedding SpiderMonkey. Nearly full port on Perl module.
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_filter
+syn keyword ngxDirectiveThirdParty js_filter_types
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_maxmem
+syn keyword ngxDirectiveThirdParty js_require
+syn keyword ngxDirectiveThirdParty js_set
+syn keyword ngxDirectiveThirdParty js_utf8
+
+" HTTP Push Module (DEPRECATED)
+" Turn Nginx into an adept long-polling HTTP Push (Comet) server.
+syn keyword ngxDirectiveDeprecated push_buffer_size
+syn keyword ngxDirectiveDeprecated push_listener
+syn keyword ngxDirectiveDeprecated push_message_timeout
+syn keyword ngxDirectiveDeprecated push_queue_messages
+syn keyword ngxDirectiveDeprecated push_sender
+
+" HTTP Redis Module
+" Redis support.
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+
+" Iconv Module
+" A character conversion nginx module using libiconv
+syn keyword ngxDirectiveThirdParty set_iconv
+syn keyword ngxDirectiveThirdParty iconv_buffer_size
+syn keyword ngxDirectiveThirdParty iconv_filter
+
+" IP Blocker Module
+" An efficient shared memory IP blocking system for nginx.
+syn keyword ngxDirectiveThirdParty ip_blocker
+
+" IP2Location Module
+" Allows user to lookup for geolocation information using IP2Location database
+syn keyword ngxDirectiveThirdParty ip2location_database
+
+" JS Module
+" Reflect the nginx functionality in JS
+syn keyword ngxDirectiveThirdParty js
+syn keyword ngxDirectiveThirdParty js_access
+syn keyword ngxDirectiveThirdParty js_load
+syn keyword ngxDirectiveThirdParty js_set
+
+" Limit Upload Rate Module
+" Limit client-upload rate when they are sending request bodies to you
+syn keyword ngxDirectiveThirdParty limit_upload_rate
+syn keyword ngxDirectiveThirdParty limit_upload_rate_after
+
+" Limit Upstream Module
+" Limit the number of connections to upstream for NGINX
+syn keyword ngxDirectiveThirdParty limit_upstream_zone
+syn keyword ngxDirectiveThirdParty limit_upstream_conn
+syn keyword ngxDirectiveThirdParty limit_upstream_log_level
+
+" Log If Module
+" Conditional accesslog for nginx
+syn keyword ngxDirectiveThirdParty access_log_bypass_if
+
+" Log Request Speed (DEPRECATED)
+" Log the time it took to process each request.
+syn keyword ngxDirectiveDeprecated log_request_speed_filter
+syn keyword ngxDirectiveDeprecated log_request_speed_filter_timeout
+
+" Log ZeroMQ Module
+" ZeroMQ logger module for nginx
+syn keyword ngxDirectiveThirdParty log_zmq_server
+syn keyword ngxDirectiveThirdParty log_zmq_endpoint
+syn keyword ngxDirectiveThirdParty log_zmq_format
+syn keyword ngxDirectiveThirdParty log_zmq_off
+
+" Lower/UpperCase Module
+" This module simply uppercases or lowercases a string and saves it into a new variable.
+syn keyword ngxDirectiveThirdParty lower
+syn keyword ngxDirectiveThirdParty upper
+
+" Lua Upstream Module
+" Nginx C module to expose Lua API to ngx_lua for Nginx upstreams
+
+" Lua Module
+" Embed the Power of Lua into NGINX HTTP servers
+syn keyword ngxDirectiveThirdParty lua_use_default_type
+syn keyword ngxDirectiveThirdParty lua_malloc_trim
+syn keyword ngxDirectiveThirdParty lua_code_cache
+syn keyword ngxDirectiveThirdParty lua_regex_cache_max_entries
+syn keyword ngxDirectiveThirdParty lua_regex_match_limit
+syn keyword ngxDirectiveThirdParty lua_package_path
+syn keyword ngxDirectiveThirdParty lua_package_cpath
+syn keyword ngxDirectiveThirdParty init_by_lua
+syn keyword ngxDirectiveThirdParty init_by_lua_file
+syn keyword ngxDirectiveThirdParty init_worker_by_lua
+syn keyword ngxDirectiveThirdParty init_worker_by_lua_file
+syn keyword ngxDirectiveThirdParty set_by_lua
+syn keyword ngxDirectiveThirdParty set_by_lua_file
+syn keyword ngxDirectiveThirdParty content_by_lua
+syn keyword ngxDirectiveThirdParty content_by_lua_file
+syn keyword ngxDirectiveThirdParty rewrite_by_lua
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_file
+syn keyword ngxDirectiveThirdParty access_by_lua
+syn keyword ngxDirectiveThirdParty access_by_lua_file
+syn keyword ngxDirectiveThirdParty header_filter_by_lua
+syn keyword ngxDirectiveThirdParty header_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty body_filter_by_lua
+syn keyword ngxDirectiveThirdParty body_filter_by_lua_file
+syn keyword ngxDirectiveThirdParty log_by_lua
+syn keyword ngxDirectiveThirdParty log_by_lua_file
+syn keyword ngxDirectiveThirdParty balancer_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_need_request_body
+syn keyword ngxDirectiveThirdParty ssl_certificate_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_fetch_by_lua_file
+syn keyword ngxDirectiveThirdParty ssl_session_store_by_lua_file
+syn keyword ngxDirectiveThirdParty lua_shared_dict
+syn keyword ngxDirectiveThirdParty lua_socket_connect_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_send_lowat
+syn keyword ngxDirectiveThirdParty lua_socket_read_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_buffer_size
+syn keyword ngxDirectiveThirdParty lua_socket_pool_size
+syn keyword ngxDirectiveThirdParty lua_socket_keepalive_timeout
+syn keyword ngxDirectiveThirdParty lua_socket_log_errors
+syn keyword ngxDirectiveThirdParty lua_ssl_ciphers
+syn keyword ngxDirectiveThirdParty lua_ssl_crl
+syn keyword ngxDirectiveThirdParty lua_ssl_protocols
+syn keyword ngxDirectiveThirdParty lua_ssl_trusted_certificate
+syn keyword ngxDirectiveThirdParty lua_ssl_verify_depth
+syn keyword ngxDirectiveThirdParty lua_http10_buffering
+syn keyword ngxDirectiveThirdParty rewrite_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty access_by_lua_no_postpone
+syn keyword ngxDirectiveThirdParty lua_transform_underscores_in_response_headers
+syn keyword ngxDirectiveThirdParty lua_check_client_abort
+syn keyword ngxDirectiveThirdParty lua_max_pending_timers
+syn keyword ngxDirectiveThirdParty lua_max_running_timers
+
+" MD5 Filter Module
+" A content filter for nginx, which returns the md5 hash of the content otherwise returned.
+syn keyword ngxDirectiveThirdParty md5_filter
+
+" Memc Module
+" An extended version of the standard memcached module that supports set, add, delete, and many more memcached commands.
+syn keyword ngxDirectiveThirdParty memc_buffer_size
+syn keyword ngxDirectiveThirdParty memc_cmds_allowed
+syn keyword ngxDirectiveThirdParty memc_connect_timeout
+syn keyword ngxDirectiveThirdParty memc_flags_to_last_modified
+syn keyword ngxDirectiveThirdParty memc_next_upstream
+syn keyword ngxDirectiveThirdParty memc_pass
+syn keyword ngxDirectiveThirdParty memc_read_timeout
+syn keyword ngxDirectiveThirdParty memc_send_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_fail_timeout
+syn keyword ngxDirectiveThirdParty memc_upstream_max_fails
+
+" Mod Security Module
+" ModSecurity is an open source, cross platform web application firewall (WAF) engine
+syn keyword ngxDirectiveThirdParty ModSecurityConfig
+syn keyword ngxDirectiveThirdParty ModSecurityEnabled
+syn keyword ngxDirectiveThirdParty pool_context
+syn keyword ngxDirectiveThirdParty pool_context_hash_size
+
+" Mogilefs Module
+" MogileFS client for nginx web server.
+syn keyword ngxDirectiveThirdParty mogilefs_pass
+syn keyword ngxDirectiveThirdParty mogilefs_methods
+syn keyword ngxDirectiveThirdParty mogilefs_domain
+syn keyword ngxDirectiveThirdParty mogilefs_class
+syn keyword ngxDirectiveThirdParty mogilefs_tracker
+syn keyword ngxDirectiveThirdParty mogilefs_noverify
+syn keyword ngxDirectiveThirdParty mogilefs_connect_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_send_timeout
+syn keyword ngxDirectiveThirdParty mogilefs_read_timeout
+
+" Mongo Module
+" Upstream module that allows nginx to communicate directly with MongoDB database.
+syn keyword ngxDirectiveThirdParty mongo_auth
+syn keyword ngxDirectiveThirdParty mongo_pass
+syn keyword ngxDirectiveThirdParty mongo_query
+syn keyword ngxDirectiveThirdParty mongo_json
+syn keyword ngxDirectiveThirdParty mongo_bind
+syn keyword ngxDirectiveThirdParty mongo_connect_timeout
+syn keyword ngxDirectiveThirdParty mongo_send_timeout
+syn keyword ngxDirectiveThirdParty mongo_read_timeout
+syn keyword ngxDirectiveThirdParty mongo_buffering
+syn keyword ngxDirectiveThirdParty mongo_buffer_size
+syn keyword ngxDirectiveThirdParty mongo_buffers
+syn keyword ngxDirectiveThirdParty mongo_busy_buffers_size
+syn keyword ngxDirectiveThirdParty mongo_next_upstream
+
+" MP4 Streaming Lite Module
+" Will seek to a certain time within H.264/MP4 files when provided with a 'start' parameter in the URL.
+" syn keyword ngxDirectiveThirdParty mp4
+
+" NAXSI Module
+" NAXSI is an open-source, high performance, low rules maintenance WAF for NGINX
+syn keyword ngxDirectiveThirdParty DeniedUrl denied_url
+syn keyword ngxDirectiveThirdParty LearningMode learning_mode
+syn keyword ngxDirectiveThirdParty SecRulesEnabled rules_enabled
+syn keyword ngxDirectiveThirdParty SecRulesDisabled rules_disabled
+syn keyword ngxDirectiveThirdParty CheckRule check_rule
+syn keyword ngxDirectiveThirdParty BasicRule basic_rule
+syn keyword ngxDirectiveThirdParty MainRule main_rule
+syn keyword ngxDirectiveThirdParty LibInjectionSql libinjection_sql
+syn keyword ngxDirectiveThirdParty LibInjectionXss libinjection_xss
+
+" Nchan Module
+" Fast, horizontally scalable, multiprocess pub/sub queuing server and proxy for HTTP, long-polling, Websockets and EventSource (SSE)
+syn keyword ngxDirectiveThirdParty nchan_channel_id
+syn keyword ngxDirectiveThirdParty nchan_channel_id_split_delimiter
+syn keyword ngxDirectiveThirdParty nchan_eventsource_event
+syn keyword ngxDirectiveThirdParty nchan_longpoll_multipart_response
+syn keyword ngxDirectiveThirdParty nchan_publisher
+syn keyword ngxDirectiveThirdParty nchan_publisher_channel_id
+syn keyword ngxDirectiveThirdParty nchan_publisher_upstream_request
+syn keyword ngxDirectiveThirdParty nchan_pubsub
+syn keyword ngxDirectiveThirdParty nchan_subscribe_request
+syn keyword ngxDirectiveThirdParty nchan_subscriber
+syn keyword ngxDirectiveThirdParty nchan_subscriber_channel_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_compound_etag_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_first_message
+syn keyword ngxDirectiveThirdParty nchan_subscriber_http_raw_stream_separator
+syn keyword ngxDirectiveThirdParty nchan_subscriber_last_message_id
+syn keyword ngxDirectiveThirdParty nchan_subscriber_message_id_custom_etag_header
+syn keyword ngxDirectiveThirdParty nchan_subscriber_timeout
+syn keyword ngxDirectiveThirdParty nchan_unsubscribe_request
+syn keyword ngxDirectiveThirdParty nchan_websocket_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_authorize_request
+syn keyword ngxDirectiveThirdParty nchan_max_reserved_memory
+syn keyword ngxDirectiveThirdParty nchan_message_buffer_length
+syn keyword ngxDirectiveThirdParty nchan_message_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_idle_channel_cache_timeout
+syn keyword ngxDirectiveThirdParty nchan_redis_namespace
+syn keyword ngxDirectiveThirdParty nchan_redis_pass
+syn keyword ngxDirectiveThirdParty nchan_redis_ping_interval
+syn keyword ngxDirectiveThirdParty nchan_redis_server
+syn keyword ngxDirectiveThirdParty nchan_redis_storage_mode
+syn keyword ngxDirectiveThirdParty nchan_redis_url
+syn keyword ngxDirectiveThirdParty nchan_store_messages
+syn keyword ngxDirectiveThirdParty nchan_use_redis
+syn keyword ngxDirectiveThirdParty nchan_access_control_allow_origin
+syn keyword ngxDirectiveThirdParty nchan_channel_group
+syn keyword ngxDirectiveThirdParty nchan_channel_group_accounting
+syn keyword ngxDirectiveThirdParty nchan_group_location
+syn keyword ngxDirectiveThirdParty nchan_group_max_channels
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_disk
+syn keyword ngxDirectiveThirdParty nchan_group_max_messages_memory
+syn keyword ngxDirectiveThirdParty nchan_group_max_subscribers
+syn keyword ngxDirectiveThirdParty nchan_subscribe_existing_channels_only
+syn keyword ngxDirectiveThirdParty nchan_channel_event_string
+syn keyword ngxDirectiveThirdParty nchan_channel_events_channel_id
+syn keyword ngxDirectiveThirdParty nchan_stub_status
+syn keyword ngxDirectiveThirdParty nchan_max_channel_id_length
+syn keyword ngxDirectiveThirdParty nchan_max_channel_subscribers
+syn keyword ngxDirectiveThirdParty nchan_channel_timeout
+syn keyword ngxDirectiveThirdParty nchan_storage_engine
+
+" Nginx Notice Module
+" Serve static file to POST requests.
+syn keyword ngxDirectiveThirdParty notice
+syn keyword ngxDirectiveThirdParty notice_type
+
+" OCSP Proxy Module
+" Nginx OCSP processing module designed for response caching
+syn keyword ngxDirectiveThirdParty ocsp_proxy
+syn keyword ngxDirectiveThirdParty ocsp_cache_timeout
+
+" Eval Module
+" Module for nginx web server evaluates response of proxy or memcached module into variables.
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_buffer_size
+syn keyword ngxDirectiveThirdParty eval_override_content_type
+syn keyword ngxDirectiveThirdParty eval_subrequest_in_memory
+
+" OpenSSL Version Module
+" Nginx OpenSSL version check at startup
+syn keyword ngxDirectiveThirdParty openssl_version_minimum
+syn keyword ngxDirectiveThirdParty openssl_builddate_minimum
+
+" Owner Match Module
+" Control access for specific owners and groups of files
+syn keyword ngxDirectiveThirdParty omallow
+syn keyword ngxDirectiveThirdParty omdeny
+
+" Accept Language Module
+" Parses the Accept-Language header and gives the most suitable locale from a list of supported locales.
+syn keyword ngxDirectiveThirdParty pagespeed
+
+" PHP Memcache Standard Balancer Module
+" Loadbalancer that is compatible to the standard loadbalancer in the php-memcache module
+syn keyword ngxDirectiveThirdParty hash_key
+
+" PHP Session Module
+" Nginx module to parse php sessions
+syn keyword ngxDirectiveThirdParty php_session_parse
+syn keyword ngxDirectiveThirdParty php_session_strip_formatting
+
+" Phusion Passenger Module
+" Passenger is an open source web application server.
+syn keyword ngxDirectiveThirdParty passenger_root
+syn keyword ngxDirectiveThirdParty passenger_enabled
+syn keyword ngxDirectiveThirdParty passenger_base_uri
+syn keyword ngxDirectiveThirdParty passenger_document_root
+syn keyword ngxDirectiveThirdParty passenger_ruby
+syn keyword ngxDirectiveThirdParty passenger_python
+syn keyword ngxDirectiveThirdParty passenger_nodejs
+syn keyword ngxDirectiveThirdParty passenger_meteor_app_settings
+syn keyword ngxDirectiveThirdParty passenger_app_env
+syn keyword ngxDirectiveThirdParty passenger_app_root
+syn keyword ngxDirectiveThirdParty passenger_app_group_name
+syn keyword ngxDirectiveThirdParty passenger_app_type
+syn keyword ngxDirectiveThirdParty passenger_startup_file
+syn keyword ngxDirectiveThirdParty passenger_restart_dir
+syn keyword ngxDirectiveThirdParty passenger_spawn_method
+syn keyword ngxDirectiveThirdParty passenger_env_var
+syn keyword ngxDirectiveThirdParty passenger_load_shell_envvars
+syn keyword ngxDirectiveThirdParty passenger_rolling_restarts
+syn keyword ngxDirectiveThirdParty passenger_resist_deployment_errors
+syn keyword ngxDirectiveThirdParty passenger_user_switching
+syn keyword ngxDirectiveThirdParty passenger_user
+syn keyword ngxDirectiveThirdParty passenger_group
+syn keyword ngxDirectiveThirdParty passenger_default_user
+syn keyword ngxDirectiveThirdParty passenger_default_group
+syn keyword ngxDirectiveThirdParty passenger_show_version_in_header
+syn keyword ngxDirectiveThirdParty passenger_friendly_error_pages
+syn keyword ngxDirectiveThirdParty passenger_disable_security_update_check
+syn keyword ngxDirectiveThirdParty passenger_security_update_check_proxy
+syn keyword ngxDirectiveThirdParty passenger_max_pool_size
+syn keyword ngxDirectiveThirdParty passenger_min_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances
+syn keyword ngxDirectiveThirdParty passenger_max_instances_per_app
+syn keyword ngxDirectiveThirdParty passenger_pool_idle_time
+syn keyword ngxDirectiveThirdParty passenger_max_preloader_idle_time
+syn keyword ngxDirectiveThirdParty passenger_force_max_concurrent_requests_per_process
+syn keyword ngxDirectiveThirdParty passenger_start_timeout
+syn keyword ngxDirectiveThirdParty passenger_concurrency_model
+syn keyword ngxDirectiveThirdParty passenger_thread_count
+syn keyword ngxDirectiveThirdParty passenger_max_requests
+syn keyword ngxDirectiveThirdParty passenger_max_request_time
+syn keyword ngxDirectiveThirdParty passenger_memory_limit
+syn keyword ngxDirectiveThirdParty passenger_stat_throttle_rate
+syn keyword ngxDirectiveThirdParty passenger_core_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_app_file_descriptor_ulimit
+syn keyword ngxDirectiveThirdParty passenger_pre_start
+syn keyword ngxDirectiveThirdParty passenger_set_header
+syn keyword ngxDirectiveThirdParty passenger_max_request_queue_size
+syn keyword ngxDirectiveThirdParty passenger_request_queue_overflow_status_code
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions
+syn keyword ngxDirectiveThirdParty passenger_sticky_sessions_cookie_name
+syn keyword ngxDirectiveThirdParty passenger_abort_websockets_on_process_shutdown
+syn keyword ngxDirectiveThirdParty passenger_ignore_client_abort
+syn keyword ngxDirectiveThirdParty passenger_intercept_errors
+syn keyword ngxDirectiveThirdParty passenger_pass_header
+syn keyword ngxDirectiveThirdParty passenger_ignore_headers
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_bucket_size
+syn keyword ngxDirectiveThirdParty passenger_headers_hash_max_size
+syn keyword ngxDirectiveThirdParty passenger_buffer_response
+syn keyword ngxDirectiveThirdParty passenger_response_buffer_high_watermark
+syn keyword ngxDirectiveThirdParty passenger_buffer_size, passenger_buffers, passenger_busy_buffers_size
+syn keyword ngxDirectiveThirdParty passenger_socket_backlog
+syn keyword ngxDirectiveThirdParty passenger_log_level
+syn keyword ngxDirectiveThirdParty passenger_log_file
+syn keyword ngxDirectiveThirdParty passenger_file_descriptor_log_file
+syn keyword ngxDirectiveThirdParty passenger_debugger
+syn keyword ngxDirectiveThirdParty passenger_instance_registry_dir
+syn keyword ngxDirectiveThirdParty passenger_data_buffer_dir
+syn keyword ngxDirectiveThirdParty passenger_fly_with
+syn keyword ngxDirectiveThirdParty union_station_support
+syn keyword ngxDirectiveThirdParty union_station_key
+syn keyword ngxDirectiveThirdParty union_station_proxy_address
+syn keyword ngxDirectiveThirdParty union_station_filter
+syn keyword ngxDirectiveThirdParty union_station_gateway_address
+syn keyword ngxDirectiveThirdParty union_station_gateway_port
+syn keyword ngxDirectiveThirdParty union_station_gateway_cert
+syn keyword ngxDirectiveDeprecated rails_spawn_method
+syn keyword ngxDirectiveDeprecated passenger_debug_log_file
+
+" Postgres Module
+" Upstream module that allows nginx to communicate directly with PostgreSQL database.
+syn keyword ngxDirectiveThirdParty postgres_server
+syn keyword ngxDirectiveThirdParty postgres_keepalive
+syn keyword ngxDirectiveThirdParty postgres_pass
+syn keyword ngxDirectiveThirdParty postgres_query
+syn keyword ngxDirectiveThirdParty postgres_rewrite
+syn keyword ngxDirectiveThirdParty postgres_output
+syn keyword ngxDirectiveThirdParty postgres_set
+syn keyword ngxDirectiveThirdParty postgres_escape
+syn keyword ngxDirectiveThirdParty postgres_connect_timeout
+syn keyword ngxDirectiveThirdParty postgres_result_timeout
+
+" Pubcookie Module
+" Authorizes users using encrypted cookies
+syn keyword ngxDirectiveThirdParty pubcookie_inactive_expire
+syn keyword ngxDirectiveThirdParty pubcookie_hard_expire
+syn keyword ngxDirectiveThirdParty pubcookie_app_id
+syn keyword ngxDirectiveThirdParty pubcookie_dir_depth
+syn keyword ngxDirectiveThirdParty pubcookie_catenate_app_ids
+syn keyword ngxDirectiveThirdParty pubcookie_app_srv_id
+syn keyword ngxDirectiveThirdParty pubcookie_login
+syn keyword ngxDirectiveThirdParty pubcookie_login_method
+syn keyword ngxDirectiveThirdParty pubcookie_post
+syn keyword ngxDirectiveThirdParty pubcookie_domain
+syn keyword ngxDirectiveThirdParty pubcookie_granting_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_session_cert_file
+syn keyword ngxDirectiveThirdParty pubcookie_crypt_key_file
+syn keyword ngxDirectiveThirdParty pubcookie_end_session
+syn keyword ngxDirectiveThirdParty pubcookie_encryption
+syn keyword ngxDirectiveThirdParty pubcookie_session_reauth
+syn keyword ngxDirectiveThirdParty pubcookie_auth_type_names
+syn keyword ngxDirectiveThirdParty pubcookie_no_prompt
+syn keyword ngxDirectiveThirdParty pubcookie_on_demand
+syn keyword ngxDirectiveThirdParty pubcookie_addl_request
+syn keyword ngxDirectiveThirdParty pubcookie_no_obscure_cookies
+syn keyword ngxDirectiveThirdParty pubcookie_no_clean_creds
+syn keyword ngxDirectiveThirdParty pubcookie_egd_device
+syn keyword ngxDirectiveThirdParty pubcookie_no_blank
+syn keyword ngxDirectiveThirdParty pubcookie_super_debug
+syn keyword ngxDirectiveThirdParty pubcookie_set_remote_user
+
+" Push Stream Module
+" A pure stream http push technology for your Nginx setup
+syn keyword ngxDirectiveThirdParty push_stream_channels_statistics
+syn keyword ngxDirectiveThirdParty push_stream_publisher
+syn keyword ngxDirectiveThirdParty push_stream_subscriber
+syn keyword ngxDirectiveThirdParty push_stream_shared_memory_size
+syn keyword ngxDirectiveThirdParty push_stream_channel_deleted_message_text
+syn keyword ngxDirectiveThirdParty push_stream_channel_inactivity_time
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_text
+syn keyword ngxDirectiveThirdParty push_stream_timeout_with_body
+syn keyword ngxDirectiveThirdParty push_stream_message_ttl
+syn keyword ngxDirectiveThirdParty push_stream_max_subscribers_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_messages_stored_per_channel
+syn keyword ngxDirectiveThirdParty push_stream_max_channel_id_length
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_channels
+syn keyword ngxDirectiveThirdParty push_stream_max_number_of_wildcard_channels
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_prefix
+syn keyword ngxDirectiveThirdParty push_stream_events_channel_id
+syn keyword ngxDirectiveThirdParty push_stream_channels_path
+syn keyword ngxDirectiveThirdParty push_stream_store_messages
+syn keyword ngxDirectiveThirdParty push_stream_channel_info_on_publish
+syn keyword ngxDirectiveThirdParty push_stream_authorized_channels_only
+syn keyword ngxDirectiveThirdParty push_stream_header_template_file
+syn keyword ngxDirectiveThirdParty push_stream_header_template
+syn keyword ngxDirectiveThirdParty push_stream_message_template
+syn keyword ngxDirectiveThirdParty push_stream_footer_template
+syn keyword ngxDirectiveThirdParty push_stream_wildcard_channel_max_qtd
+syn keyword ngxDirectiveThirdParty push_stream_ping_message_interval
+syn keyword ngxDirectiveThirdParty push_stream_subscriber_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_longpolling_connection_ttl
+syn keyword ngxDirectiveThirdParty push_stream_websocket_allow_publish
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_time
+syn keyword ngxDirectiveThirdParty push_stream_last_received_message_tag
+syn keyword ngxDirectiveThirdParty push_stream_last_event_id
+syn keyword ngxDirectiveThirdParty push_stream_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_padding_by_user_agent
+syn keyword ngxDirectiveThirdParty push_stream_allowed_origins
+syn keyword ngxDirectiveThirdParty push_stream_allow_connections_to_events_channel
+
+" rDNS Module
+" Make a reverse DNS (rDNS) lookup for incoming connection and provides simple access control of incoming hostname by allow/deny rules
+syn keyword ngxDirectiveThirdParty rdns
+syn keyword ngxDirectiveThirdParty rdns_allow
+syn keyword ngxDirectiveThirdParty rdns_deny
+
+" RDS CSV Module
+" Nginx output filter module to convert Resty-DBD-Streams (RDS) to Comma-Separated Values (CSV)
+syn keyword ngxDirectiveThirdParty rds_csv
+syn keyword ngxDirectiveThirdParty rds_csv_row_terminator
+syn keyword ngxDirectiveThirdParty rds_csv_field_separator
+syn keyword ngxDirectiveThirdParty rds_csv_field_name_header
+syn keyword ngxDirectiveThirdParty rds_csv_content_type
+syn keyword ngxDirectiveThirdParty rds_csv_buffer_size
+
+" RDS JSON Module
+" An output filter that formats Resty DBD Streams generated by ngx_drizzle and others to JSON
+syn keyword ngxDirectiveThirdParty rds_json
+syn keyword ngxDirectiveThirdParty rds_json_buffer_size
+syn keyword ngxDirectiveThirdParty rds_json_format
+syn keyword ngxDirectiveThirdParty rds_json_root
+syn keyword ngxDirectiveThirdParty rds_json_success_property
+syn keyword ngxDirectiveThirdParty rds_json_user_property
+syn keyword ngxDirectiveThirdParty rds_json_errcode_key
+syn keyword ngxDirectiveThirdParty rds_json_errstr_key
+syn keyword ngxDirectiveThirdParty rds_json_ret
+syn keyword ngxDirectiveThirdParty rds_json_content_type
+
+" Redis Module
+" Use this module to perform simple caching
+syn keyword ngxDirectiveThirdParty redis_pass
+syn keyword ngxDirectiveThirdParty redis_bind
+syn keyword ngxDirectiveThirdParty redis_connect_timeout
+syn keyword ngxDirectiveThirdParty redis_read_timeout
+syn keyword ngxDirectiveThirdParty redis_send_timeout
+syn keyword ngxDirectiveThirdParty redis_buffer_size
+syn keyword ngxDirectiveThirdParty redis_next_upstream
+syn keyword ngxDirectiveThirdParty redis_gzip_flag
+
+" Redis 2 Module
+" Nginx upstream module for the Redis 2.0 protocol
+syn keyword ngxDirectiveThirdParty redis2_query
+syn keyword ngxDirectiveThirdParty redis2_raw_query
+syn keyword ngxDirectiveThirdParty redis2_raw_queries
+syn keyword ngxDirectiveThirdParty redis2_literal_raw_query
+syn keyword ngxDirectiveThirdParty redis2_pass
+syn keyword ngxDirectiveThirdParty redis2_connect_timeout
+syn keyword ngxDirectiveThirdParty redis2_send_timeout
+syn keyword ngxDirectiveThirdParty redis2_read_timeout
+syn keyword ngxDirectiveThirdParty redis2_buffer_size
+syn keyword ngxDirectiveThirdParty redis2_next_upstream
+
+" Replace Filter Module
+" Streaming regular expression replacement in response bodies
+syn keyword ngxDirectiveThirdParty replace_filter
+syn keyword ngxDirectiveThirdParty replace_filter_types
+syn keyword ngxDirectiveThirdParty replace_filter_max_buffered_size
+syn keyword ngxDirectiveThirdParty replace_filter_last_modified
+syn keyword ngxDirectiveThirdParty replace_filter_skip
+
+" Roboo Module
+" HTTP Robot Mitigator
+
+" RRD Graph Module
+" This module provides an HTTP interface to RRDtool's graphing facilities.
+syn keyword ngxDirectiveThirdParty rrd_graph
+syn keyword ngxDirectiveThirdParty rrd_graph_root
+
+" RTMP Module
+" NGINX-based Media Streaming Server
+syn keyword ngxDirectiveThirdParty rtmp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+syn keyword ngxDirectiveThirdParty application
+" syn keyword ngxDirectiveThirdParty timeout
+syn keyword ngxDirectiveThirdParty ping
+syn keyword ngxDirectiveThirdParty ping_timeout
+syn keyword ngxDirectiveThirdParty max_streams
+syn keyword ngxDirectiveThirdParty ack_window
+syn keyword ngxDirectiveThirdParty chunk_size
+syn keyword ngxDirectiveThirdParty max_queue
+syn keyword ngxDirectiveThirdParty max_message
+syn keyword ngxDirectiveThirdParty out_queue
+syn keyword ngxDirectiveThirdParty out_cork
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+syn keyword ngxDirectiveThirdParty exec_push
+syn keyword ngxDirectiveThirdParty exec_pull
+syn keyword ngxDirectiveThirdParty exec
+syn keyword ngxDirectiveThirdParty exec_options
+syn keyword ngxDirectiveThirdParty exec_static
+syn keyword ngxDirectiveThirdParty exec_kill_signal
+syn keyword ngxDirectiveThirdParty respawn
+syn keyword ngxDirectiveThirdParty respawn_timeout
+syn keyword ngxDirectiveThirdParty exec_publish
+syn keyword ngxDirectiveThirdParty exec_play
+syn keyword ngxDirectiveThirdParty exec_play_done
+syn keyword ngxDirectiveThirdParty exec_publish_done
+syn keyword ngxDirectiveThirdParty exec_record_done
+syn keyword ngxDirectiveThirdParty live
+syn keyword ngxDirectiveThirdParty meta
+syn keyword ngxDirectiveThirdParty interleave
+syn keyword ngxDirectiveThirdParty wait_key
+syn keyword ngxDirectiveThirdParty wait_video
+syn keyword ngxDirectiveThirdParty publish_notify
+syn keyword ngxDirectiveThirdParty drop_idle_publisher
+syn keyword ngxDirectiveThirdParty sync
+syn keyword ngxDirectiveThirdParty play_restart
+syn keyword ngxDirectiveThirdParty idle_streams
+syn keyword ngxDirectiveThirdParty record
+syn keyword ngxDirectiveThirdParty record_path
+syn keyword ngxDirectiveThirdParty record_suffix
+syn keyword ngxDirectiveThirdParty record_unique
+syn keyword ngxDirectiveThirdParty record_append
+syn keyword ngxDirectiveThirdParty record_lock
+syn keyword ngxDirectiveThirdParty record_max_size
+syn keyword ngxDirectiveThirdParty record_max_frames
+syn keyword ngxDirectiveThirdParty record_interval
+syn keyword ngxDirectiveThirdParty recorder
+syn keyword ngxDirectiveThirdParty record_notify
+syn keyword ngxDirectiveThirdParty play
+syn keyword ngxDirectiveThirdParty play_temp_path
+syn keyword ngxDirectiveThirdParty play_local_path
+syn keyword ngxDirectiveThirdParty pull
+syn keyword ngxDirectiveThirdParty push
+syn keyword ngxDirectiveThirdParty push_reconnect
+syn keyword ngxDirectiveThirdParty session_relay
+syn keyword ngxDirectiveThirdParty on_connect
+syn keyword ngxDirectiveThirdParty on_play
+syn keyword ngxDirectiveThirdParty on_publish
+syn keyword ngxDirectiveThirdParty on_done
+syn keyword ngxDirectiveThirdParty on_play_done
+syn keyword ngxDirectiveThirdParty on_publish_done
+syn keyword ngxDirectiveThirdParty on_record_done
+syn keyword ngxDirectiveThirdParty on_update
+syn keyword ngxDirectiveThirdParty notify_update_timeout
+syn keyword ngxDirectiveThirdParty notify_update_strict
+syn keyword ngxDirectiveThirdParty notify_relay_redirect
+syn keyword ngxDirectiveThirdParty notify_method
+syn keyword ngxDirectiveThirdParty hls
+syn keyword ngxDirectiveThirdParty hls_path
+syn keyword ngxDirectiveThirdParty hls_fragment
+syn keyword ngxDirectiveThirdParty hls_playlist_length
+syn keyword ngxDirectiveThirdParty hls_sync
+syn keyword ngxDirectiveThirdParty hls_continuous
+syn keyword ngxDirectiveThirdParty hls_nested
+syn keyword ngxDirectiveThirdParty hls_base_url
+syn keyword ngxDirectiveThirdParty hls_cleanup
+syn keyword ngxDirectiveThirdParty hls_fragment_naming
+syn keyword ngxDirectiveThirdParty hls_fragment_slicing
+syn keyword ngxDirectiveThirdParty hls_variant
+syn keyword ngxDirectiveThirdParty hls_type
+syn keyword ngxDirectiveThirdParty hls_keys
+syn keyword ngxDirectiveThirdParty hls_key_path
+syn keyword ngxDirectiveThirdParty hls_key_url
+syn keyword ngxDirectiveThirdParty hls_fragments_per_key
+syn keyword ngxDirectiveThirdParty dash
+syn keyword ngxDirectiveThirdParty dash_path
+syn keyword ngxDirectiveThirdParty dash_fragment
+syn keyword ngxDirectiveThirdParty dash_playlist_length
+syn keyword ngxDirectiveThirdParty dash_nested
+syn keyword ngxDirectiveThirdParty dash_cleanup
+" syn keyword ngxDirectiveThirdParty access_log
+" syn keyword ngxDirectiveThirdParty log_format
+syn keyword ngxDirectiveThirdParty max_connections
+syn keyword ngxDirectiveThirdParty rtmp_stat
+syn keyword ngxDirectiveThirdParty rtmp_stat_stylesheet
+syn keyword ngxDirectiveThirdParty rtmp_auto_push
+syn keyword ngxDirectiveThirdParty rtmp_auto_push_reconnect
+syn keyword ngxDirectiveThirdParty rtmp_socket_dir
+syn keyword ngxDirectiveThirdParty rtmp_control
+
+" RTMPT Module
+" Module for nginx to proxy rtmp using http protocol
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_target
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_rtmp_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_http_timeout
+syn keyword ngxDirectiveThirdParty rtmpt_proxy
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stat
+syn keyword ngxDirectiveThirdParty rtmpt_proxy_stylesheet
+
+" Syntactically Awesome Module
+" Providing on-the-fly compiling of Sass files as an NGINX module.
+syn keyword ngxDirectiveThirdParty sass_compile
+syn keyword ngxDirectiveThirdParty sass_error_log
+syn keyword ngxDirectiveThirdParty sass_include_path
+syn keyword ngxDirectiveThirdParty sass_indent
+syn keyword ngxDirectiveThirdParty sass_is_indented_syntax
+syn keyword ngxDirectiveThirdParty sass_linefeed
+syn keyword ngxDirectiveThirdParty sass_precision
+syn keyword ngxDirectiveThirdParty sass_output_style
+syn keyword ngxDirectiveThirdParty sass_source_comments
+syn keyword ngxDirectiveThirdParty sass_source_map_embed
+
+" Secure Download Module
+" Enables you to create links which are only valid until a certain datetime is reached
+syn keyword ngxDirectiveThirdParty secure_download
+syn keyword ngxDirectiveThirdParty secure_download_secret
+syn keyword ngxDirectiveThirdParty secure_download_path_mode
+
+" Selective Cache Purge Module
+" A module to purge cache by GLOB patterns. The supported patterns are the same as supported by Redis.
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_unix_socket
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_host
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_port
+syn keyword ngxDirectiveThirdParty selective_cache_purge_redis_database
+syn keyword ngxDirectiveThirdParty selective_cache_purge_query
+
+" Set cconv Module
+" Cconv rewrite set commands
+syn keyword ngxDirectiveThirdParty set_cconv_to_simp
+syn keyword ngxDirectiveThirdParty set_cconv_to_trad
+syn keyword ngxDirectiveThirdParty set_pinyin_to_normal
+
+" Set Hash Module
+" Nginx module that allows the setting of variables to the value of a variety of hashes
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_md5_upper
+syn keyword ngxDirectiveThirdParty set_murmur2
+syn keyword ngxDirectiveThirdParty set_murmur2_upper
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_sha1_upper
+
+" Set Lang Module
+" Provides a variety of ways for setting a variable denoting the langauge that content should be returned in.
+syn keyword ngxDirectiveThirdParty set_lang
+syn keyword ngxDirectiveThirdParty set_lang_method
+syn keyword ngxDirectiveThirdParty lang_cookie
+syn keyword ngxDirectiveThirdParty lang_get_var
+syn keyword ngxDirectiveThirdParty lang_list
+syn keyword ngxDirectiveThirdParty lang_post_var
+syn keyword ngxDirectiveThirdParty lang_host
+syn keyword ngxDirectiveThirdParty lang_referer
+
+" Set Misc Module
+" Various set_xxx directives added to nginx's rewrite module
+syn keyword ngxDirectiveThirdParty set_if_empty
+syn keyword ngxDirectiveThirdParty set_quote_sql_str
+syn keyword ngxDirectiveThirdParty set_quote_pgsql_str
+syn keyword ngxDirectiveThirdParty set_quote_json_str
+syn keyword ngxDirectiveThirdParty set_unescape_uri
+syn keyword ngxDirectiveThirdParty set_escape_uri
+syn keyword ngxDirectiveThirdParty set_hashed_upstream
+syn keyword ngxDirectiveThirdParty set_encode_base32
+syn keyword ngxDirectiveThirdParty set_base32_padding
+syn keyword ngxDirectiveThirdParty set_misc_base32_padding
+syn keyword ngxDirectiveThirdParty set_base32_alphabet
+syn keyword ngxDirectiveThirdParty set_decode_base32
+syn keyword ngxDirectiveThirdParty set_encode_base64
+syn keyword ngxDirectiveThirdParty set_decode_base64
+syn keyword ngxDirectiveThirdParty set_encode_hex
+syn keyword ngxDirectiveThirdParty set_decode_hex
+syn keyword ngxDirectiveThirdParty set_sha1
+syn keyword ngxDirectiveThirdParty set_md5
+syn keyword ngxDirectiveThirdParty set_hmac_sha1
+syn keyword ngxDirectiveThirdParty set_random
+syn keyword ngxDirectiveThirdParty set_secure_random_alphanum
+syn keyword ngxDirectiveThirdParty set_secure_random_lcalpha
+syn keyword ngxDirectiveThirdParty set_rotate
+syn keyword ngxDirectiveThirdParty set_local_today
+syn keyword ngxDirectiveThirdParty set_formatted_gmt_time
+syn keyword ngxDirectiveThirdParty set_formatted_local_time
+
+" SFlow Module
+" A binary, random-sampling nginx module designed for: lightweight, centralized, continuous, real-time monitoring of very large and very busy web farms.
+syn keyword ngxDirectiveThirdParty sflow
+
+" Shibboleth Module
+" Shibboleth auth request module for nginx
+syn keyword ngxDirectiveThirdParty shib_request
+syn keyword ngxDirectiveThirdParty shib_request_set
+syn keyword ngxDirectiveThirdParty shib_request_use_headers
+
+" Slice Module
+" Nginx module for serving a file in slices (reverse byte-range)
+" syn keyword ngxDirectiveThirdParty slice
+syn keyword ngxDirectiveThirdParty slice_arg_begin
+syn keyword ngxDirectiveThirdParty slice_arg_end
+syn keyword ngxDirectiveThirdParty slice_header
+syn keyword ngxDirectiveThirdParty slice_footer
+syn keyword ngxDirectiveThirdParty slice_header_first
+syn keyword ngxDirectiveThirdParty slice_footer_last
+
+" SlowFS Cache Module
+" Module adding ability to cache static files.
+syn keyword ngxDirectiveThirdParty slowfs_big_file_size
+syn keyword ngxDirectiveThirdParty slowfs_cache
+syn keyword ngxDirectiveThirdParty slowfs_cache_key
+syn keyword ngxDirectiveThirdParty slowfs_cache_min_uses
+syn keyword ngxDirectiveThirdParty slowfs_cache_path
+syn keyword ngxDirectiveThirdParty slowfs_cache_purge
+syn keyword ngxDirectiveThirdParty slowfs_cache_valid
+syn keyword ngxDirectiveThirdParty slowfs_temp_path
+
+" Small Light Module
+" Dynamic Image Transformation Module For nginx.
+syn keyword ngxDirectiveThirdParty small_light
+syn keyword ngxDirectiveThirdParty small_light_getparam_mode
+syn keyword ngxDirectiveThirdParty small_light_material_dir
+syn keyword ngxDirectiveThirdParty small_light_pattern_define
+syn keyword ngxDirectiveThirdParty small_light_radius_max
+syn keyword ngxDirectiveThirdParty small_light_sigma_max
+syn keyword ngxDirectiveThirdParty small_light_imlib2_temp_dir
+syn keyword ngxDirectiveThirdParty small_light_buffer
+
+" Sorted Querystring Filter Module
+" Nginx module to expose querystring parameters sorted in a variable to be used on cache_key as example
+syn keyword ngxDirectiveThirdParty sorted_querystring_filter_parameter
+
+" Sphinx2 Module
+" Nginx upstream module for Sphinx 2.x
+syn keyword ngxDirectiveThirdParty sphinx2_pass
+syn keyword ngxDirectiveThirdParty sphinx2_bind
+syn keyword ngxDirectiveThirdParty sphinx2_connect_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_send_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_buffer_size
+syn keyword ngxDirectiveThirdParty sphinx2_read_timeout
+syn keyword ngxDirectiveThirdParty sphinx2_next_upstream
+
+" HTTP SPNEGO auth Module
+" This module implements adds SPNEGO support to nginx(http://nginx.org). It currently supports only Kerberos authentication via GSSAPI
+syn keyword ngxDirectiveThirdParty auth_gss
+syn keyword ngxDirectiveThirdParty auth_gss_keytab
+syn keyword ngxDirectiveThirdParty auth_gss_realm
+syn keyword ngxDirectiveThirdParty auth_gss_service_name
+syn keyword ngxDirectiveThirdParty auth_gss_authorized_principal
+syn keyword ngxDirectiveThirdParty auth_gss_allow_basic_fallback
+
+" SR Cache Module
+" Transparent subrequest-based caching layout for arbitrary nginx locations
+syn keyword ngxDirectiveThirdParty srcache_fetch
+syn keyword ngxDirectiveThirdParty srcache_fetch_skip
+syn keyword ngxDirectiveThirdParty srcache_store
+syn keyword ngxDirectiveThirdParty srcache_store_max_size
+syn keyword ngxDirectiveThirdParty srcache_store_skip
+syn keyword ngxDirectiveThirdParty srcache_store_statuses
+syn keyword ngxDirectiveThirdParty srcache_store_ranges
+syn keyword ngxDirectiveThirdParty srcache_header_buffer_size
+syn keyword ngxDirectiveThirdParty srcache_store_hide_header
+syn keyword ngxDirectiveThirdParty srcache_store_pass_header
+syn keyword ngxDirectiveThirdParty srcache_methods
+syn keyword ngxDirectiveThirdParty srcache_ignore_content_encoding
+syn keyword ngxDirectiveThirdParty srcache_request_cache_control
+syn keyword ngxDirectiveThirdParty srcache_response_cache_control
+syn keyword ngxDirectiveThirdParty srcache_store_no_store
+syn keyword ngxDirectiveThirdParty srcache_store_no_cache
+syn keyword ngxDirectiveThirdParty srcache_store_private
+syn keyword ngxDirectiveThirdParty srcache_default_expire
+syn keyword ngxDirectiveThirdParty srcache_max_expire
+
+" SSSD Info Module
+" Retrives additional attributes from SSSD for current authentizated user
+syn keyword ngxDirectiveThirdParty sssd_info
+syn keyword ngxDirectiveThirdParty sssd_info_output_to
+syn keyword ngxDirectiveThirdParty sssd_info_groups
+syn keyword ngxDirectiveThirdParty sssd_info_group
+syn keyword ngxDirectiveThirdParty sssd_info_group_separator
+syn keyword ngxDirectiveThirdParty sssd_info_attributes
+syn keyword ngxDirectiveThirdParty sssd_info_attribute
+syn keyword ngxDirectiveThirdParty sssd_info_attribute_separator
+
+" Static Etags Module
+" Generate etags for static content
+syn keyword ngxDirectiveThirdParty FileETag
+
+" Statsd Module
+" An nginx module for sending statistics to statsd
+syn keyword ngxDirectiveThirdParty statsd_server
+syn keyword ngxDirectiveThirdParty statsd_sample_rate
+syn keyword ngxDirectiveThirdParty statsd_count
+syn keyword ngxDirectiveThirdParty statsd_timing
+
+" Sticky Module
+" Add a sticky cookie to be always forwarded to the same upstream server
+" syn keyword ngxDirectiveThirdParty sticky
+
+" Stream Echo Module
+" TCP/stream echo module for NGINX (a port of ngx_http_echo_module)
+syn keyword ngxDirectiveThirdParty echo
+syn keyword ngxDirectiveThirdParty echo_duplicate
+syn keyword ngxDirectiveThirdParty echo_flush_wait
+syn keyword ngxDirectiveThirdParty echo_sleep
+syn keyword ngxDirectiveThirdParty echo_send_timeout
+syn keyword ngxDirectiveThirdParty echo_read_bytes
+syn keyword ngxDirectiveThirdParty echo_read_line
+syn keyword ngxDirectiveThirdParty echo_request_data
+syn keyword ngxDirectiveThirdParty echo_discard_request
+syn keyword ngxDirectiveThirdParty echo_read_buffer_size
+syn keyword ngxDirectiveThirdParty echo_read_timeout
+syn keyword ngxDirectiveThirdParty echo_client_error_log_level
+syn keyword ngxDirectiveThirdParty echo_lingering_close
+syn keyword ngxDirectiveThirdParty echo_lingering_time
+syn keyword ngxDirectiveThirdParty echo_lingering_timeout
+
+" Stream Lua Module
+" Embed the power of Lua into Nginx stream/TCP Servers.
+syn keyword ngxDirectiveThirdParty lua_resolver
+syn keyword ngxDirectiveThirdParty lua_resolver_timeout
+syn keyword ngxDirectiveThirdParty lua_lingering_close
+syn keyword ngxDirectiveThirdParty lua_lingering_time
+syn keyword ngxDirectiveThirdParty lua_lingering_timeout
+
+" Stream Upsync Module
+" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx.
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upsync_show
+
+" Strip Module
+" Whitespace remover.
+syn keyword ngxDirectiveThirdParty strip
+
+" Subrange Module
+" Split one big HTTP/Range request to multiple subrange requesets
+syn keyword ngxDirectiveThirdParty subrange
+
+" Substitutions Module
+" A filter module which can do both regular expression and fixed string substitutions on response bodies.
+syn keyword ngxDirectiveThirdParty subs_filter
+syn keyword ngxDirectiveThirdParty subs_filter_types
+
+" Summarizer Module
+" Upstream nginx module to get summaries of documents using the summarizer daemon service
+syn keyword ngxDirectiveThirdParty smrzr_filename
+syn keyword ngxDirectiveThirdParty smrzr_ratio
+
+" Supervisord Module
+" Module providing nginx with API to communicate with supervisord and manage (start/stop) backends on-demand.
+syn keyword ngxDirectiveThirdParty supervisord
+syn keyword ngxDirectiveThirdParty supervisord_inherit_backend_status
+syn keyword ngxDirectiveThirdParty supervisord_name
+syn keyword ngxDirectiveThirdParty supervisord_start
+syn keyword ngxDirectiveThirdParty supervisord_stop
+
+" Tarantool Upstream Module
+" Tarantool NginX upstream module (REST, JSON API, websockets, load balancing)
+syn keyword ngxDirectiveThirdParty tnt_pass
+syn keyword ngxDirectiveThirdParty tnt_http_methods
+syn keyword ngxDirectiveThirdParty tnt_http_rest_methods
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request
+syn keyword ngxDirectiveThirdParty tnt_pass_http_request_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_method
+syn keyword ngxDirectiveThirdParty tnt_http_allowed_methods - experemental
+syn keyword ngxDirectiveThirdParty tnt_send_timeout
+syn keyword ngxDirectiveThirdParty tnt_read_timeout
+syn keyword ngxDirectiveThirdParty tnt_buffer_size
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_connect_timeout
+syn keyword ngxDirectiveThirdParty tnt_next_upstream
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_tries
+syn keyword ngxDirectiveThirdParty tnt_next_upstream_timeout
+
+" TCP Proxy Module
+" Add the feature of tcp proxy with nginx, with health check and status monitor
+syn keyword ngxDirectiveBlock tcp
+" syn keyword ngxDirectiveThirdParty server
+" syn keyword ngxDirectiveThirdParty listen
+" syn keyword ngxDirectiveThirdParty allow
+" syn keyword ngxDirectiveThirdParty deny
+" syn keyword ngxDirectiveThirdParty so_keepalive
+" syn keyword ngxDirectiveThirdParty tcp_nodelay
+" syn keyword ngxDirectiveThirdParty timeout
+" syn keyword ngxDirectiveThirdParty server_name
+" syn keyword ngxDirectiveThirdParty resolver
+" syn keyword ngxDirectiveThirdParty resolver_timeout
+" syn keyword ngxDirectiveThirdParty upstream
+syn keyword ngxDirectiveThirdParty check
+syn keyword ngxDirectiveThirdParty check_http_send
+syn keyword ngxDirectiveThirdParty check_http_expect_alive
+syn keyword ngxDirectiveThirdParty check_smtp_send
+syn keyword ngxDirectiveThirdParty check_smtp_expect_alive
+syn keyword ngxDirectiveThirdParty check_shm_size
+syn keyword ngxDirectiveThirdParty check_status
+" syn keyword ngxDirectiveThirdParty ip_hash
+" syn keyword ngxDirectiveThirdParty proxy_pass
+" syn keyword ngxDirectiveThirdParty proxy_buffer
+" syn keyword ngxDirectiveThirdParty proxy_connect_timeout
+" syn keyword ngxDirectiveThirdParty proxy_read_timeout
+syn keyword ngxDirectiveThirdParty proxy_write_timeout
+
+" Testcookie Module
+" NGINX module for L7 DDoS attack mitigation
+syn keyword ngxDirectiveThirdParty testcookie
+syn keyword ngxDirectiveThirdParty testcookie_name
+syn keyword ngxDirectiveThirdParty testcookie_domain
+syn keyword ngxDirectiveThirdParty testcookie_expires
+syn keyword ngxDirectiveThirdParty testcookie_path
+syn keyword ngxDirectiveThirdParty testcookie_secret
+syn keyword ngxDirectiveThirdParty testcookie_session
+syn keyword ngxDirectiveThirdParty testcookie_arg
+syn keyword ngxDirectiveThirdParty testcookie_max_attempts
+syn keyword ngxDirectiveThirdParty testcookie_p3p
+syn keyword ngxDirectiveThirdParty testcookie_fallback
+syn keyword ngxDirectiveThirdParty testcookie_whitelist
+syn keyword ngxDirectiveThirdParty testcookie_pass
+syn keyword ngxDirectiveThirdParty testcookie_redirect_via_refresh
+syn keyword ngxDirectiveThirdParty testcookie_refresh_template
+syn keyword ngxDirectiveThirdParty testcookie_refresh_status
+syn keyword ngxDirectiveThirdParty testcookie_deny_keepalive
+syn keyword ngxDirectiveThirdParty testcookie_get_only
+syn keyword ngxDirectiveThirdParty testcookie_https_location
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_cookie_key
+syn keyword ngxDirectiveThirdParty testcookie_refresh_encrypt_iv
+syn keyword ngxDirectiveThirdParty testcookie_internal
+syn keyword ngxDirectiveThirdParty testcookie_httponly_flag
+syn keyword ngxDirectiveThirdParty testcookie_secure_flag
+
+" Types Filter Module
+" Change the `Content-Type` output header depending on an extension variable according to a condition specified in the 'if' clause.
+syn keyword ngxDirectiveThirdParty types_filter
+syn keyword ngxDirectiveThirdParty types_filter_use_default
+
+" Unzip Module
+" Enabling fetching of files that are stored in zipped archives.
+syn keyword ngxDirectiveThirdParty file_in_unzip_archivefile
+syn keyword ngxDirectiveThirdParty file_in_unzip_extract
+syn keyword ngxDirectiveThirdParty file_in_unzip
+
+" Upload Progress Module
+" An upload progress system, that monitors RFC1867 POST upload as they are transmitted to upstream servers
+syn keyword ngxDirectiveThirdParty upload_progress
+syn keyword ngxDirectiveThirdParty track_uploads
+syn keyword ngxDirectiveThirdParty report_uploads
+syn keyword ngxDirectiveThirdParty upload_progress_content_type
+syn keyword ngxDirectiveThirdParty upload_progress_header
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_parameter
+syn keyword ngxDirectiveThirdParty upload_progress_json_output
+syn keyword ngxDirectiveThirdParty upload_progress_jsonp_output
+syn keyword ngxDirectiveThirdParty upload_progress_template
+
+" Upload Module
+" Parses request body storing all files being uploaded to a directory specified by upload_store directive
+syn keyword ngxDirectiveThirdParty upload_pass
+syn keyword ngxDirectiveThirdParty upload_resumable
+syn keyword ngxDirectiveThirdParty upload_store
+syn keyword ngxDirectiveThirdParty upload_state_store
+syn keyword ngxDirectiveThirdParty upload_store_access
+syn keyword ngxDirectiveThirdParty upload_set_form_field
+syn keyword ngxDirectiveThirdParty upload_aggregate_form_field
+syn keyword ngxDirectiveThirdParty upload_pass_form_field
+syn keyword ngxDirectiveThirdParty upload_cleanup
+syn keyword ngxDirectiveThirdParty upload_buffer_size
+syn keyword ngxDirectiveThirdParty upload_max_part_header_len
+syn keyword ngxDirectiveThirdParty upload_max_file_size
+syn keyword ngxDirectiveThirdParty upload_limit_rate
+syn keyword ngxDirectiveThirdParty upload_max_output_body_len
+syn keyword ngxDirectiveThirdParty upload_tame_arrays
+syn keyword ngxDirectiveThirdParty upload_pass_args
+
+" Upstream Fair Module
+" The fair load balancer module for nginx http://nginx.localdomain.pl
+syn keyword ngxDirectiveThirdParty fair
+syn keyword ngxDirectiveThirdParty upstream_fair_shm_size
+
+" Upstream Hash Module (DEPRECATED)
+" Provides simple upstream load distribution by hashing a configurable variable.
+" syn keyword ngxDirectiveDeprecated hash
+syn keyword ngxDirectiveDeprecated hash_again
+
+" Upstream Domain Resolve Module
+" A load-balancer that resolves an upstream domain name asynchronously.
+syn keyword ngxDirectiveThirdParty jdomain
+
+" Upsync Module
+" Sync upstreams from consul or others, dynamiclly modify backend-servers attribute(weight, max_fails,...), needn't reload nginx
+syn keyword ngxDirectiveThirdParty upsync
+syn keyword ngxDirectiveThirdParty upsync_dump_path
+syn keyword ngxDirectiveThirdParty upsync_lb
+syn keyword ngxDirectiveThirdParty upstream_show
+
+" URL Module
+" Nginx url encoding converting module
+syn keyword ngxDirectiveThirdParty url_encoding_convert
+syn keyword ngxDirectiveThirdParty url_encoding_convert_from
+syn keyword ngxDirectiveThirdParty url_encoding_convert_to
+
+" User Agent Module
+" Match browsers and crawlers
+syn keyword ngxDirectiveThirdParty user_agent
+
+" Upstrema Ketama Chash Module
+" Nginx load-balancer module implementing ketama consistent hashing.
+syn keyword ngxDirectiveThirdParty ketama_chash
+
+" Video Thumbextractor Module
+" Extract thumbs from a video file
+syn keyword ngxDirectiveThirdParty video_thumbextractor
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_filename
+syn keyword ngxDirectiveThirdParty video_thumbextractor_video_second
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_width
+syn keyword ngxDirectiveThirdParty video_thumbextractor_image_height
+syn keyword ngxDirectiveThirdParty video_thumbextractor_only_keyframe
+syn keyword ngxDirectiveThirdParty video_thumbextractor_next_time
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_rows
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_max_cols
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_sample_interval
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_color
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_margin
+syn keyword ngxDirectiveThirdParty video_thumbextractor_tile_padding
+syn keyword ngxDirectiveThirdParty video_thumbextractor_threads
+syn keyword ngxDirectiveThirdParty video_thumbextractor_processes_per_worker
+
+" Eval Module
+" Module for nginx web server evaluates response of proxy or memcached module into variables.
+syn keyword ngxDirectiveThirdParty eval
+syn keyword ngxDirectiveThirdParty eval_escalate
+syn keyword ngxDirectiveThirdParty eval_override_content_type
+
+" VTS Module
+" Nginx virtual host traffic status module
+syn keyword ngxDirectiveThirdParty vhost_traffic_status
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_zone
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_format
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_display_jsonp
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_host
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_filter_check_duplicate
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_traffic_by_set_key
+syn keyword ngxDirectiveThirdParty vhost_traffic_status_limit_check_duplicate
+
+" XSS Module
+" Native support for cross-site scripting (XSS) in an nginx.
+syn keyword ngxDirectiveThirdParty xss_get
+syn keyword ngxDirectiveThirdParty xss_callback_arg
+syn keyword ngxDirectiveThirdParty xss_override_status
+syn keyword ngxDirectiveThirdParty xss_check_status
+syn keyword ngxDirectiveThirdParty xss_input_types
+
+" ZIP Module
+" ZIP archiver for nginx
+
+" Contained LUA blocks for embedded syntax highlighting
+syn keyword ngxThirdPartyLuaBlock balancer_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock init_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock init_worker_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock set_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock content_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock rewrite_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock access_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock header_filter_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock body_filter_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock log_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_certificate_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_session_fetch_by_lua_block contained
+syn keyword ngxThirdPartyLuaBlock ssl_session_store_by_lua_block contained
+
+
+" Nested syntax in ERB templating statements
+" Subtype needs to be set to '', otherwise recursive errors occur when opening *.nginx files
+let b:eruby_subtype = ''
+unlet b:current_syntax
+syn include @ERB syntax/eruby.vim
+syn region ngxTemplate start=+<%[^\=]+ end=+%>+ oneline contains=@ERB
+syn region ngxTemplateVar start=+<%=+ end=+%>+ oneline
+let b:current_syntax = "nginx"
+
+" Nested syntax in Jinja templating statements
+" This dependend on https://github.com/lepture/vim-jinja
+unlet b:current_syntax
+try
+ syn include @JINJA syntax/jinja.vim
+ syn region ngxTemplate start=+{%+ end=+%}+ oneline contains=@JINJA
+ syn region ngxTemplateVar start=+{{+ end=+}}+ oneline
+catch
+endtry
+let b:current_syntax = "nginx"
+
+" Enable nested LUA syntax highlighting
+unlet b:current_syntax
+syn include @LUA syntax/lua.vim
+syn region ngxLua start=+^\s*\w\+_by_lua_block\s*{+ end=+}+me=s-1 contains=ngxBlock,@LUA
+let b:current_syntax = "nginx"
+
+
+" Highlight
+hi link ngxComment Comment
+hi link ngxVariable Identifier
+hi link ngxVariableBlock Identifier
+hi link ngxVariableString PreProc
+hi link ngxBlock Normal
+hi link ngxString String
+hi link ngxIPaddr Delimiter
+hi link ngxBoolean Boolean
+hi link ngxInteger Number
+hi link ngxDirectiveBlock Statement
+hi link ngxDirectiveImportant Type
+hi link ngxDirectiveControl Keyword
+hi link ngxDirectiveDeprecated Error
+hi link ngxDirective Function
+hi link ngxDirectiveThirdParty Function
+hi link ngxListenOptions PreProc
+hi link ngxUpstreamServerOptions PreProc
+hi link ngxProxyNextUpstreamOptions PreProc
+hi link ngxMailProtocol Keyword
+hi link ngxSSLProtocol PreProc
+hi link ngxSSLProtocolDeprecated Error
+hi link ngxStickyOptions ngxDirective
+hi link ngxCookieOptions PreProc
+hi link ngxTemplateVar Identifier
+
+hi link ngxSSLSessionTicketsOff ngxBoolean
+hi link ngxSSLSessionTicketsOn Error
+hi link ngxSSLPreferServerCiphersOn ngxBoolean
+hi link ngxSSLPreferServerCiphersOff Error
+hi link ngxGzipOff ngxBoolean
+hi link ngxGzipOn Error
+hi link ngxSSLCipherInsecure Error
+
+hi link ngxThirdPartyLuaBlock Function
diff --git a/sources_non_forked/syntastic/README.markdown b/sources_non_forked/syntastic/README.markdown
index 8f0e4607..346123ee 100644
--- a/sources_non_forked/syntastic/README.markdown
+++ b/sources_non_forked/syntastic/README.markdown
@@ -61,16 +61,16 @@ Source Language, ActionScript, Ada, Ansible configurations, API Blueprint,
AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C, C++,
C#, Cabal, Chef, CMake, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata,
-GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript,
-JSON, JSX, Julia, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua,
-Markdown, MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl,
-Perl POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug
+GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON,
+JSX, Julia, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown,
+MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl
+6, Perl POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug
(formerly Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax
NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity,
Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL,
-Vim help, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models, z80,
-Zope page templates, and Zsh. See the [manual][checkers] for details about the
-corresponding supported checkers (`:help syntastic-checkers` in Vim).
+Vim help, VimL, Vue.js, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models,
+z80, Zope page templates, and Zsh. See the [manual][checkers] for details about
+the corresponding supported checkers (`:help syntastic-checkers` in Vim).
A number of third-party Vim plugins also provide checkers for syntastic, for
example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust],
@@ -437,15 +437,15 @@ scripts.
__4.12. Q. How can I check scripts written for different versions of Ruby?__
A. Install a Ruby version manager such as [rvm][rvm] or [rbenv][rbenv],
-activate the environment for the relevant version of Ruby, and install in it
-the checkers you want to use. Set `g:syntastic_ruby_checkers` accordingly in
-your `vimrc`, and run [Vim][vim] from the virtual environment.
+activate the relevant version of Ruby, and install in it the checkers you want
+to use. Set `g:syntastic_ruby_checkers` accordingly in your `vimrc`, and run
+[Vim][vim] under the relevant Ruby version.
-If you're starting Vim from a desktop manager rather than from a terminal you
-might need to write wrapper scripts around your checkers, to activate the
-virtual environment before running the actual checks. Then you'll need to
-point the relevant `g:syntastic_ruby__exec` variables to the wrapper
-scripts.
+If you're starting Vim from a desktop manager rather than from a terminal
+and depending on the version manager you use you might need to write wrapper
+scripts around your checkers, to activate the relevant version of Ruby
+before running the actual checks. Then you'll need to point the relevant
+`g:syntastic_ruby__exec` variables to the wrapper scripts.
diff --git a/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim
index 136fa589..c69f3978 100644
--- a/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim
+++ b/sources_non_forked/syntastic/autoload/syntastic/postprocess.vim
@@ -65,6 +65,17 @@ function! syntastic#postprocess#guards(errors) abort " {{{2
return a:errors
endfunction " }}}2
+" convert error messages from UTF-8 to the current encoding
+function! syntastic#postprocess#iconv(errors) abort " {{{2
+ if has('iconv') && &encoding !=# '' && &encoding !=# 'utf-8'
+ for e in a:errors
+ let e['text'] = iconv(e['text'], "utf-8", &encoding)
+ endfor
+ endif
+
+ return a:errors
+endfunction " }}}2
+
" }}}1
let &cpo = s:save_cpo
diff --git a/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim b/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
index 43a1b9ac..79e4face 100644
--- a/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
+++ b/sources_non_forked/syntastic/autoload/syntastic/preprocess.vim
@@ -264,6 +264,43 @@ function! syntastic#preprocess#perl(errors) abort " {{{2
return syntastic#util#unique(out)
endfunction " }}}2
+function! syntastic#preprocess#perl6(errors) abort " {{{2
+ if a:errors[0] ==# 'Syntax OK'
+ return []
+ endif
+
+ let errs = s:_decode_JSON(join(a:errors, ''))
+
+ let out = []
+ if type(errs) == type({})
+ try
+ for val in values(errs)
+ let line = get(val, 'line', 0)
+ let pos = get(val, 'pos', 0)
+ if pos && has('byte_offset')
+ let line_pos = byte2line(pos + 1)
+ let column = line_pos > 0 ? pos - line2byte(line_pos) + 2 : 0
+ else
+ let column = 0
+ endif
+
+ call add(out, join([
+ \ get(val, 'filename', ''),
+ \ line,
+ \ column,
+ \ get(val, 'message', '') ], ':'))
+ endfor
+ catch /\m^Vim\%((\a\+)\)\=:E716/
+ call syntastic#log#warn('checker perl6/perl6: unrecognized error item ' . string(val))
+ let out = []
+ endtry
+ else
+ call syntastic#log#warn('checker perl6/perl6: unrecognized error format')
+ endif
+
+ return out
+endfunction " }}}2
+
function! syntastic#preprocess#prospector(errors) abort " {{{2
let errs = join(a:errors, '')
if errs ==# ''
diff --git a/sources_non_forked/syntastic/autoload/syntastic/util.vim b/sources_non_forked/syntastic/autoload/syntastic/util.vim
index 3f0f70fb..8a17fe64 100644
--- a/sources_non_forked/syntastic/autoload/syntastic/util.vim
+++ b/sources_non_forked/syntastic/autoload/syntastic/util.vim
@@ -253,7 +253,7 @@ endfunction " }}}2
function! syntastic#util#findFileInParent(what, where) abort " {{{2
let old_suffixesadd = &suffixesadd
let &suffixesadd = ''
- let file = findfile(a:what, escape(a:where, ' ') . ';')
+ let file = findfile(a:what, escape(a:where, ' ,') . ';')
let &suffixesadd = old_suffixesadd
return file
endfunction " }}}2
@@ -307,8 +307,14 @@ function! syntastic#util#fname2buf(fname) abort " {{{2
" this is a best-effort attempt to escape file patterns (cf. :h file-pattern)
" XXX it fails for filenames containing something like \{2,3}
+ let buf = -1
for md in [':~:.', ':~', ':p']
- let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$')
+ try
+ " Older versions of Vim can throw E94 here
+ let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$')
+ catch
+ " catch everything
+ endtry
if buf != -1
break
endif
diff --git a/sources_non_forked/syntastic/doc/syntastic-checkers.txt b/sources_non_forked/syntastic/doc/syntastic-checkers.txt
index e4d7b15e..ec76927a 100644
--- a/sources_non_forked/syntastic/doc/syntastic-checkers.txt
+++ b/sources_non_forked/syntastic/doc/syntastic-checkers.txt
@@ -81,6 +81,7 @@ SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang*
OCaml....................................|syntastic-checkers-ocaml|
Perl.....................................|syntastic-checkers-perl|
+ Perl 6...................................|syntastic-checkers-perl6|
PHP......................................|syntastic-checkers-php|
POD......................................|syntastic-checkers-pod|
Pug (formerly Jade)......................|syntastic-checkers-pug|
@@ -121,6 +122,7 @@ SYNTAX CHECKERS BY LANGUAGE *syntastic-checkers-lang*
VHDL.....................................|syntastic-checkers-vhdl|
Vim help.................................|syntastic-checkers-help|
VimL.....................................|syntastic-checkers-vim|
+ Vue.js...................................|syntastic-checkers-vue|
xHTML....................................|syntastic-checkers-xhtml|
XML......................................|syntastic-checkers-xml|
@@ -227,18 +229,18 @@ fatal errors in one of the included files.
Type: string
Default: unset
Compilation flags (such as defines or include directories) to be passed to the
-checker.
+linter.
*'g:syntastic_ada_config_file'*
Type: string
Default: ".syntastic_ada_config"
-File containing additional compilation flags to be passed to the checker, one
+File containing additional compilation flags to be passed to the linter, one
option per line (cf. |syntastic-config-files|).
*'g:syntastic_ada_include_dirs'*
Type: array of strings
Default: []
-Include directories to be passed to the checker, in addition to the above
+Include directories to be passed to the linter, in addition to the above
compilation flags. You can set it like this: >
let g:syntastic_ada_include_dirs = ["includes", "headers"]
<
@@ -262,7 +264,7 @@ Note~
This checker doesn't call the "makeprgBuild()" function, and thus it ignores
the usual 'g:syntastic_ada_gcc_