commit
8dcf44f6a9
350 changed files with 11162 additions and 3339 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,6 +4,7 @@ temp_dirs/yankring_history_v2.txt
|
||||||
sources_forked/yankring/doc/tags
|
sources_forked/yankring/doc/tags
|
||||||
sources_non_forked/tlib/doc/tags
|
sources_non_forked/tlib/doc/tags
|
||||||
sources_non_forked/ctrlp.vim/doc/tags*
|
sources_non_forked/ctrlp.vim/doc/tags*
|
||||||
|
my_plugins/
|
||||||
my_configs.vim
|
my_configs.vim
|
||||||
tags
|
tags
|
||||||
.DS_Store
|
.DS_Store
|
||||||
|
|
19
README.md
19
README.md
|
@ -11,20 +11,32 @@ There are two versions:
|
||||||
|
|
||||||
I would, of course, recommend using the awesome version.
|
I would, of course, recommend using the awesome version.
|
||||||
|
|
||||||
|
|
||||||
## How to install 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:
|
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
|
git clone --depth=1 https://github.com/amix/vimrc.git ~/.vim_runtime
|
||||||
sh ~/.vim_runtime/install_awesome_vimrc.sh
|
sh ~/.vim_runtime/install_awesome_vimrc.sh
|
||||||
|
|
||||||
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.
|
|
||||||
|
## 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/)
|
||||||
|
|
||||||
|
|
||||||
## How to install the Basic version?
|
## 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 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.
|
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
|
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`
|
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?
|
## How to update to latest version?
|
||||||
|
|
||||||
Just do a git rebase!
|
Just do a git rebase!
|
||||||
|
|
0
my_plugins/.gitkeep
Normal file
0
my_plugins/.gitkeep
Normal file
|
@ -76,9 +76,9 @@ The quickfix results window is augmented with these convenience mappings:
|
||||||
? a quick summary of these keys, repeat to close
|
? a quick summary of these keys, repeat to close
|
||||||
o to open (same as Enter)
|
o to open (same as Enter)
|
||||||
O to open and close the quickfix window
|
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
|
||||||
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
|
||||||
H to open in horizontal split, keeping focus on the results
|
H to open in horizontal split, keeping focus on the results
|
||||||
v to open in vertical split
|
v to open in vertical split
|
||||||
|
@ -87,6 +87,10 @@ The quickfix results window is augmented with these convenience mappings:
|
||||||
|
|
||||||
### Gotchas
|
### 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
|
Some characters have special meaning, and need to be escaped in your search
|
||||||
pattern. For instance, `#`. You need to escape it with `:Ack '\\\#define
|
pattern. For instance, `#`. You need to escape it with `:Ack '\\\#define
|
||||||
foo'` to search for '#define foo'. See [issue #5].
|
foo'` to search for '#define foo'. See [issue #5].
|
||||||
|
|
|
@ -1006,7 +1006,9 @@ fu! s:KeyLoop()
|
||||||
wh exists('s:init') && s:keyloop
|
wh exists('s:init') && s:keyloop
|
||||||
try
|
try
|
||||||
set t_ve=
|
set t_ve=
|
||||||
|
if guicursor != ''
|
||||||
set guicursor=a:NONE
|
set guicursor=a:NONE
|
||||||
|
en
|
||||||
let nr = getchar()
|
let nr = getchar()
|
||||||
fina
|
fina
|
||||||
let &t_ve = t_ve
|
let &t_ve = t_ve
|
||||||
|
@ -2009,7 +2011,7 @@ fu! s:bufnrfilpath(line)
|
||||||
if (a:line =~ '[\/]\?\[\d\+\*No Name\]$')
|
if (a:line =~ '[\/]\?\[\d\+\*No Name\]$')
|
||||||
let bufnr = str2nr(matchstr(a:line, '[\/]\?\[\zs\d\+\ze\*No Name\]$'))
|
let bufnr = str2nr(matchstr(a:line, '[\/]\?\[\zs\d\+\ze\*No Name\]$'))
|
||||||
let filpath = bufnr
|
let filpath = bufnr
|
||||||
else
|
els
|
||||||
let bufnr = bufnr(a:line)
|
let bufnr = bufnr(a:line)
|
||||||
retu [bufnr, a:line]
|
retu [bufnr, a:line]
|
||||||
en
|
en
|
||||||
|
@ -2414,7 +2416,7 @@ fu! s:buildpat(lst)
|
||||||
let c = a:lst[item - 1]
|
let c = a:lst[item - 1]
|
||||||
let pat .= (c == '/' ? '[^/]\{-}' : '[^'.c.'/]\{-}').a:lst[item]
|
let pat .= (c == '/' ? '[^/]\{-}' : '[^'.c.'/]\{-}').a:lst[item]
|
||||||
endfo
|
endfo
|
||||||
else
|
els
|
||||||
for item in range(1, len(a:lst) - 1)
|
for item in range(1, len(a:lst) - 1)
|
||||||
let pat .= '[^'.a:lst[item - 1].']\{-}'.a:lst[item]
|
let pat .= '[^'.a:lst[item - 1].']\{-}'.a:lst[item]
|
||||||
endfo
|
endfo
|
||||||
|
|
|
@ -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
|
let g:ctrlp_tilde_homedir = 0
|
||||||
<
|
<
|
||||||
Note: This applies also to all dir paths stored by :CtrlPBookmarkDirAdd!
|
Note: This applies also to all dir paths stored by :CtrlPBookmarkDirAdd!
|
||||||
<
|
|
||||||
|
|
||||||
*'g:ctrlp_mruf_relative'*
|
*'g:ctrlp_mruf_relative'*
|
||||||
Set this to 1 to show only MRU files in the current working directory: >
|
Set this to 1 to show only MRU files in the current working directory: >
|
||||||
|
@ -873,12 +872,12 @@ COMMANDS *ctrlp-commands*
|
||||||
|
|
||||||
*:CtrlPCurFile*
|
*:CtrlPCurFile*
|
||||||
: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.
|
the variable's current value.
|
||||||
|
|
||||||
*:CtrlPCurWD*
|
*:CtrlPCurWD*
|
||||||
: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.
|
the variable's current value.
|
||||||
|
|
||||||
*:CtrlPMRU*
|
*:CtrlPMRU*
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
<p align="center"><img src="http://imgh.us/gruvbox_logo.svg"></p>
|
<p align="center"><img src="http://svgur.com/i/3Dp.svg"></p>
|
||||||
|
|
||||||
gruvbox is heavily inspired by [badwolf][], [jellybeans][] and [solarized][].
|
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.)
|
* 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
|
* 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][], [CtrlP][], [Startify][]
|
* 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
|
[EasyMotion]: https://github.com/Lokaltog/vim-easymotion
|
||||||
[vim-sneak]: https://github.com/justinmk/vim-sneak
|
[vim-sneak]: https://github.com/justinmk/vim-sneak
|
||||||
|
@ -80,8 +80,11 @@ Features
|
||||||
[ShowMarks]: http://www.vim.org/scripts/script.php?script_id=152
|
[ShowMarks]: http://www.vim.org/scripts/script.php?script_id=152
|
||||||
[Signature]: https://github.com/kshenoy/vim-signature
|
[Signature]: https://github.com/kshenoy/vim-signature
|
||||||
[Syntastic]: https://github.com/scrooloose/syntastic
|
[Syntastic]: https://github.com/scrooloose/syntastic
|
||||||
|
[Ale]: https://github.com/w0rp/ale
|
||||||
[CtrlP]: https://github.com/kien/ctrlp.vim
|
[CtrlP]: https://github.com/kien/ctrlp.vim
|
||||||
[Startify]: https://github.com/mhinz/vim-startify
|
[Startify]: https://github.com/mhinz/vim-startify
|
||||||
|
[NERDTree]: https://github.com/scrooloose/nerdtree
|
||||||
|
[Dirvish]: https://github.com/justinmk/vim-dirvish
|
||||||
|
|
||||||
Contributions
|
Contributions
|
||||||
-------------
|
-------------
|
||||||
|
@ -93,8 +96,8 @@ See [gruvbox-contrib][] repo for contributions, ports and extras.
|
||||||
ToDo
|
ToDo
|
||||||
----
|
----
|
||||||
|
|
||||||
* Filetype syntax highlighting (R, TeX, Swift, Erlang, Purescript and I'm still dissatisfied with CSS)
|
* Filetype syntax highlighting (R, TeX, Swift, Erlang)
|
||||||
* Plugin support (MiniBufExplorer, Tagbar, Netrw, VimPLug)
|
* Plugin support (Tagbar, VimPlug)
|
||||||
|
|
||||||
Self-Promotion
|
Self-Promotion
|
||||||
--------------
|
--------------
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
" Description: Retro groove color scheme for Airline
|
" Description: Retro groove color scheme for Airline
|
||||||
" Author: morhetz <morhetz@gmail.com>
|
" Author: morhetz <morhetz@gmail.com>
|
||||||
" Source: https://github.com/morhetz/gruvbox
|
" Source: https://github.com/morhetz/gruvbox
|
||||||
" Last Modified: 22 Aug 2014
|
" Last Modified: 12 Aug 2017
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
|
|
||||||
let g:airline#themes#gruvbox#palette = {}
|
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 error_group = airline#themes#get_highlight2(['Normal', 'bg'], ['WarningMsg', 'fg'])
|
||||||
|
|
||||||
let s:N1 = airline#themes#get_highlight2(['Normal', 'bg'], ['StatusLineNC', 'bg'])
|
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 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 = airline#themes#generate_color_map(s:N1, s:N2, s:N3)
|
||||||
let g:airline#themes#gruvbox#palette.normal_modified = { 'airline_c': modified_group }
|
let g:airline#themes#gruvbox#palette.normal_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:I1 = airline#themes#get_highlight2(['Normal', 'bg'], ['Identifier', 'fg'])
|
||||||
let s:I2 = s:N2
|
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 = 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_modified = g:airline#themes#gruvbox#palette.normal_modified
|
||||||
let g:airline#themes#gruvbox#palette.insert.airline_warning = g:airline#themes#gruvbox#palette.normal.airline_warning
|
let g:airline#themes#gruvbox#palette.insert.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.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 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:V2 = s:N2
|
||||||
let s:V3 = airline#themes#get_highlight2(['Normal', 'bg'], ['TabLine', 'fg'])
|
let s:V3 = airline#themes#get_highlight2(['Normal', 'bg'], ['TabLine', 'fg'])
|
||||||
let g:airline#themes#gruvbox#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3)
|
let g:airline#themes#gruvbox#palette.visual = airline#themes#generate_color_map(s:V1, s:V2, s:V3)
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
" Description: Gruvbox colorscheme for Lightline (itchyny/lightline.vim)
|
" Description: Gruvbox colorscheme for Lightline (itchyny/lightline.vim)
|
||||||
" Author: gmoe <me@griffinmoe.com>
|
" Author: gmoe <me@griffinmoe.com>
|
||||||
" Source: https://github.com/morhetz/gruvbox
|
" Source: https://github.com/morhetz/gruvbox
|
||||||
" Last Modified: 31 Oct 2015
|
" Last Modified: 20 Sep 2017
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
|
|
||||||
function! s:getGruvColor(group)
|
function! s:getGruvColor(group)
|
||||||
|
@ -25,21 +25,25 @@ if exists('g:lightline')
|
||||||
let s:blue = s:getGruvColor('GruvboxBlue')
|
let s:blue = s:getGruvColor('GruvboxBlue')
|
||||||
let s:aqua = s:getGruvColor('GruvboxAqua')
|
let s:aqua = s:getGruvColor('GruvboxAqua')
|
||||||
let s:orange = s:getGruvColor('GruvboxOrange')
|
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':{}, 'inactive':{}, 'insert':{}, 'replace':{}, 'visual':{}, 'tabline':{}, 'terminal':{}}
|
||||||
let s:p.normal.left = [ [ s:bg0, s:fg4 ], [ s:fg4, s:bg2 ] ]
|
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.right = [ [ s:bg0, s:fg4 ], [ s:fg4, s:bg2 ] ]
|
||||||
let s:p.normal.middle = [ [ s:fg4, s:bg1 ] ]
|
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.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.left = [ [ s:bg4, s:bg1 ], [ s:bg4, s:bg1 ] ]
|
||||||
let s:p.inactive.middle = [ [ 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.right = [ [ s:bg0, s:blue ], [ s:fg1, s:bg2 ] ]
|
||||||
let s:p.insert.middle = [ [ s:fg4, 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.right = [ [ s:bg0, s:aqua ], [ s:fg1, s:bg2 ] ]
|
||||||
let s:p.replace.middle = [ [ s:fg4, 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.right = [ [ s:bg0, s:orange ], [ s:bg0, s:bg4 ] ]
|
||||||
let s:p.visual.middle = [ [ s:fg4, s:bg1 ] ]
|
let s:p.visual.middle = [ [ s:fg4, s:bg1 ] ]
|
||||||
let s:p.tabline.left = [ [ s:fg4, s:bg2 ] ]
|
let s:p.tabline.left = [ [ s:fg4, s:bg2 ] ]
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
" Description: Retro groove color scheme for Vim
|
" Description: Retro groove color scheme for Vim
|
||||||
" Author: morhetz <morhetz@gmail.com>
|
" Author: morhetz <morhetz@gmail.com>
|
||||||
" Source: https://github.com/morhetz/gruvbox
|
" Source: https://github.com/morhetz/gruvbox
|
||||||
" Last Modified: 04 Sep 2015
|
" Last Modified: 12 Aug 2017
|
||||||
" -----------------------------------------------------------------------------
|
" -----------------------------------------------------------------------------
|
||||||
|
|
||||||
" Supporting code -------------------------------------------------------------
|
" Supporting code -------------------------------------------------------------
|
||||||
|
@ -18,7 +18,7 @@ endif
|
||||||
|
|
||||||
let g:colors_name='gruvbox'
|
let g:colors_name='gruvbox'
|
||||||
|
|
||||||
if !has('gui_running') && &t_Co != 256
|
if !(has('termguicolors') && &termguicolors) && !has('gui_running') && &t_Co != 256
|
||||||
finish
|
finish
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -269,7 +269,35 @@ let s:gb.aqua = s:aqua
|
||||||
let s:gb.orange = s:orange
|
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: {{{
|
" Overload Setting: {{{
|
||||||
|
|
||||||
let s:hls_cursor = s:orange
|
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)
|
let s:color_column = get(s:gb, g:gruvbox_color_column)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:vert_split = s:bg2
|
let s:vert_split = s:bg0
|
||||||
if exists('g:gruvbox_vert_split')
|
if exists('g:gruvbox_vert_split')
|
||||||
let s:vert_split = get(s:gb, g:gruvbox_vert_split)
|
let s:vert_split = get(s:gb, g:gruvbox_vert_split)
|
||||||
endif
|
endif
|
||||||
|
@ -451,9 +479,9 @@ if version >= 700
|
||||||
hi! link CursorColumn CursorLine
|
hi! link CursorColumn CursorLine
|
||||||
|
|
||||||
" Tab pages line filler
|
" 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
|
" 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
|
" Not active tab page label
|
||||||
hi! link TabLine TabLineFill
|
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('Underlined', s:blue, s:none, s:underline)
|
||||||
|
|
||||||
call s:HL('StatusLine', s:bg4, s:bg0, s:bold . s:inverse)
|
call s:HL('StatusLine', s:bg2, s:fg1, s:inverse)
|
||||||
call s:HL('StatusLineNC', s:bg2, s:fg4, s:bold . s:inverse)
|
call s:HL('StatusLineNC', s:bg1, s:fg4, s:inverse)
|
||||||
|
|
||||||
" The column separating vertically split windows
|
" 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
|
" Current match in wildmenu completion
|
||||||
call s:HL('WildMenu', s:blue, s:bg2, s:bold)
|
call s:HL('WildMenu', s:blue, s:bg2, s:bold)
|
||||||
|
@ -541,7 +569,7 @@ hi! link lCursor Cursor
|
||||||
if g:gruvbox_improved_strings == 0
|
if g:gruvbox_improved_strings == 0
|
||||||
hi! link Special GruvboxOrange
|
hi! link Special GruvboxOrange
|
||||||
else
|
else
|
||||||
call s:HL('Special', s:bg1, s:orange, s:italic)
|
call s:HL('Special', s:orange, s:bg1, s:italicize_strings)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call s:HL('Comment', s:gray, s:none, s:italicize_comments)
|
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
|
if g:gruvbox_improved_strings == 0
|
||||||
call s:HL('String', s:green, s:none, s:italicize_strings)
|
call s:HL('String', s:green, s:none, s:italicize_strings)
|
||||||
else
|
else
|
||||||
call s:HL('String', s:bg1, s:fg1, s:italicize_strings)
|
call s:HL('String', s:fg1, s:bg1, s:italicize_strings)
|
||||||
endif
|
endif
|
||||||
" Boolean constant: TRUE, false
|
" Boolean constant: TRUE, false
|
||||||
hi! link Boolean GruvboxPurple
|
hi! link Boolean GruvboxPurple
|
||||||
|
@ -660,10 +688,8 @@ hi! link EasyMotionShade Comment
|
||||||
" }}}
|
" }}}
|
||||||
" Sneak: {{{
|
" Sneak: {{{
|
||||||
|
|
||||||
hi! link SneakPluginTarget Search
|
autocmd ColorScheme gruvbox hi! link Sneak Search
|
||||||
hi! link SneakStreakTarget Search
|
autocmd ColorScheme gruvbox hi! link SneakLabel Search
|
||||||
call s:HL('SneakStreakMask', s:yellow, s:yellow)
|
|
||||||
hi! link SneakStreakStatusLine Search
|
|
||||||
|
|
||||||
" }}}
|
" }}}
|
||||||
" Indent Guides: {{{
|
" Indent Guides: {{{
|
||||||
|
@ -779,7 +805,7 @@ call s:HL('CtrlPStats', s:fg4, s:bg2, s:bold)
|
||||||
" Startify: {{{
|
" Startify: {{{
|
||||||
|
|
||||||
hi! link StartifyBracket GruvboxFg3
|
hi! link StartifyBracket GruvboxFg3
|
||||||
hi! link StartifyFile GruvboxFg0
|
hi! link StartifyFile GruvboxFg1
|
||||||
hi! link StartifyNumber GruvboxBlue
|
hi! link StartifyNumber GruvboxBlue
|
||||||
hi! link StartifyPath GruvboxGray
|
hi! link StartifyPath GruvboxGray
|
||||||
hi! link StartifySlash 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('BufTabLineHidden', s:bg4, s:bg1)
|
||||||
call s:HL('BufTabLineFill', s:bg0, s:bg0)
|
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 -----------------------------------------------------------
|
" Filetype specific -----------------------------------------------------------
|
||||||
|
@ -932,9 +1014,13 @@ hi! link pythonImport GruvboxBlue
|
||||||
hi! link pythonRun GruvboxBlue
|
hi! link pythonRun GruvboxBlue
|
||||||
hi! link pythonCoding GruvboxBlue
|
hi! link pythonCoding GruvboxBlue
|
||||||
hi! link pythonOperator GruvboxRed
|
hi! link pythonOperator GruvboxRed
|
||||||
|
hi! link pythonException GruvboxRed
|
||||||
hi! link pythonExceptions GruvboxPurple
|
hi! link pythonExceptions GruvboxPurple
|
||||||
hi! link pythonBoolean GruvboxPurple
|
hi! link pythonBoolean GruvboxPurple
|
||||||
hi! link pythonDot GruvboxFg3
|
hi! link pythonDot GruvboxFg3
|
||||||
|
hi! link pythonConditional GruvboxRed
|
||||||
|
hi! link pythonRepeat GruvboxRed
|
||||||
|
hi! link pythonDottedName GruvboxGreenBold
|
||||||
|
|
||||||
" }}}
|
" }}}
|
||||||
" CSS: {{{
|
" CSS: {{{
|
||||||
|
@ -999,9 +1085,24 @@ hi! link javascriptEndColons GruvboxFg1
|
||||||
hi! link javascriptFuncArg GruvboxFg1
|
hi! link javascriptFuncArg GruvboxFg1
|
||||||
hi! link javascriptGlobalMethod GruvboxFg1
|
hi! link javascriptGlobalMethod GruvboxFg1
|
||||||
hi! link javascriptNodeGlobal 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 javascriptProp GruvboxFg1
|
||||||
hi! link javascriptVariable GruvboxRed
|
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 javascriptIdentifier GruvboxOrange
|
||||||
" hi! link javascriptClassSuper GruvboxOrange
|
" hi! link javascriptClassSuper GruvboxOrange
|
||||||
hi! link javascriptIdentifier GruvboxOrange
|
hi! link javascriptIdentifier GruvboxOrange
|
||||||
|
@ -1030,7 +1131,7 @@ hi! link javascriptObjectLabel GruvboxFg1
|
||||||
hi! link javascriptPropertyName GruvboxFg1
|
hi! link javascriptPropertyName GruvboxFg1
|
||||||
|
|
||||||
hi! link javascriptLogicSymbols GruvboxFg1
|
hi! link javascriptLogicSymbols GruvboxFg1
|
||||||
hi! link javascriptArrowFunc GruvboxFg1
|
hi! link javascriptArrowFunc GruvboxYellow
|
||||||
|
|
||||||
hi! link javascriptDocParamName GruvboxFg4
|
hi! link javascriptDocParamName GruvboxFg4
|
||||||
hi! link javascriptDocTags GruvboxFg4
|
hi! link javascriptDocTags GruvboxFg4
|
||||||
|
@ -1038,11 +1139,38 @@ hi! link javascriptDocNotation GruvboxFg4
|
||||||
hi! link javascriptDocParamType GruvboxFg4
|
hi! link javascriptDocParamType GruvboxFg4
|
||||||
hi! link javascriptDocNamedParamType 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: {{{
|
" TypeScript: {{{
|
||||||
|
|
||||||
hi! link typeScriptReserved GruvboxAqua
|
hi! link typeScriptReserved GruvboxAqua
|
||||||
hi! link typeScriptLabel GruvboxAqua
|
hi! link typeScriptLabel GruvboxAqua
|
||||||
|
hi! link typeScriptFuncKeyword GruvboxAqua
|
||||||
hi! link typeScriptIdentifier GruvboxOrange
|
hi! link typeScriptIdentifier GruvboxOrange
|
||||||
hi! link typeScriptBraces GruvboxFg1
|
hi! link typeScriptBraces GruvboxFg1
|
||||||
hi! link typeScriptEndColons GruvboxFg1
|
hi! link typeScriptEndColons GruvboxFg1
|
||||||
|
@ -1052,6 +1180,32 @@ hi! link typeScriptLogicSymbols GruvboxFg1
|
||||||
hi! link typeScriptDocSeeTag Comment
|
hi! link typeScriptDocSeeTag Comment
|
||||||
hi! link typeScriptDocParam Comment
|
hi! link typeScriptDocParam Comment
|
||||||
hi! link typeScriptDocTags vimCommentTitle
|
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: {{{
|
" CoffeeScript: {{{
|
||||||
|
|
10
sources_non_forked/gruvbox/package.json
Normal file
10
sources_non_forked/gruvbox/package.json
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
{
|
||||||
|
"name": "gruvbox",
|
||||||
|
"version": "2.0.0",
|
||||||
|
"repository": "git@github.com:morhetz/gruvbox.git",
|
||||||
|
"author": "Pavel Pertsev <morhetz@gmail.com>",
|
||||||
|
"license": "MIT",
|
||||||
|
"vim": {
|
||||||
|
"opt": true
|
||||||
|
}
|
||||||
|
}
|
|
@ -21,7 +21,6 @@ env:
|
||||||
- VIM_VERSION=8.0.0000
|
- VIM_VERSION=8.0.0000
|
||||||
- VIM_VERSION=7.4
|
- VIM_VERSION=7.4
|
||||||
- VIM_VERSION=7.3
|
- VIM_VERSION=7.3
|
||||||
- VIM_VERSION=7.2.051
|
|
||||||
|
|
||||||
script:
|
script:
|
||||||
- export PATH=$HOME/vim-$VIM_VERSION/bin:$PATH
|
- export PATH=$HOME/vim-$VIM_VERSION/bin:$PATH
|
||||||
|
|
|
@ -47,8 +47,8 @@ landscape is my colorscheme, which is a high-contrast cui-supported colorscheme,
|
||||||
|
|
||||||
## Why yet another clone of powerline?
|
## Why yet another clone of powerline?
|
||||||
+ [vim-powerline](https://github.com/Lokaltog/vim-powerline) is a nice plugin, but deprecated.
|
+ [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.
|
+ [powerline](https://github.com/powerline/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`.
|
+ [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
|
## Spirit of this plugin
|
||||||
+ Minimalism. The core script is very small to achive enough functions as a statusline plugin.
|
+ Minimalism. The core script is very small to achive enough functions as a statusline plugin.
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
" Filename: autoload/lightline.vim
|
" Filename: autoload/lightline.vim
|
||||||
" Author: itchyny
|
" Author: itchyny
|
||||||
" License: MIT License
|
" License: MIT License
|
||||||
" Last Change: 2016/12/03 12:08:08.
|
" Last Change: 2017/11/11 13:29:26.
|
||||||
" =============================================================================
|
" =============================================================================
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
|
@ -105,7 +105,7 @@ let s:_lightline = {
|
||||||
\ 'paste': '%{&paste?"PASTE":""}', 'readonly': '%R', 'charvalue': '%b', 'charvaluehex': '%B',
|
\ 'paste': '%{&paste?"PASTE":""}', 'readonly': '%R', 'charvalue': '%b', 'charvaluehex': '%B',
|
||||||
\ 'spell': '%{&spell?&spelllang:""}', 'fileencoding': '%{&fenc!=#""?&fenc:&enc}', 'fileformat': '%{&ff}',
|
\ 'spell': '%{&spell?&spelllang:""}', 'fileencoding': '%{&fenc!=#""?&fenc:&enc}', 'fileformat': '%{&ff}',
|
||||||
\ 'filetype': '%{&ft!=#""?&ft:"no ft"}', 'percent': '%3p%%', 'percentwin': '%P',
|
\ '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': {
|
\ 'component_visible_condition': {
|
||||||
\ 'modified': '&modified||!&modifiable', 'readonly': '&readonly', 'paste': '&paste', 'spell': '&spell'
|
\ 'modified': '&modified||!&modifiable', 'readonly': '&readonly', 'paste': '&paste', 'spell': '&spell'
|
||||||
|
@ -118,6 +118,7 @@ let s:_lightline = {
|
||||||
\ 'component_type': {
|
\ 'component_type': {
|
||||||
\ 'tabs': 'tabsel', 'close': 'raw'
|
\ 'tabs': 'tabsel', 'close': 'raw'
|
||||||
\ },
|
\ },
|
||||||
|
\ 'component_raw': {},
|
||||||
\ 'tab_component': {},
|
\ 'tab_component': {},
|
||||||
\ 'tab_component_function': {
|
\ 'tab_component_function': {
|
||||||
\ 'filename': 'lightline#tab#filename', 'modified': 'lightline#tab#modified',
|
\ '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.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 [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 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
|
for mode in modes
|
||||||
let s:highlight[mode] = 1
|
let s:highlight[mode] = 1
|
||||||
let d = has_key(c, mode) ? mode : has_key(f, mode) && has_key(c, f[mode]) ? f[mode] : 'normal'
|
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
|
function! s:convert(name, index) abort
|
||||||
if has_key(s:lightline.component_expand, a:name)
|
if has_key(s:lightline.component_expand, a:name)
|
||||||
let type = get(s:lightline.component_type, a:name, a:index)
|
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
|
else
|
||||||
return [[[a:name], 0, a:index]]
|
return [[[a:name], 0, a:index]]
|
||||||
endif
|
endif
|
||||||
|
@ -393,7 +396,7 @@ function! s:line(tabline, inactive) abort
|
||||||
endif
|
endif
|
||||||
let [l, r] = a:tabline ? [s:lightline.tab_llen, s:lightline.tab_rlen] : [s:lightline.llen, s:lightline.rlen]
|
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 [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 mode = a:tabline ? 'tabline' : a:inactive ? 'inactive' : 'active'
|
||||||
let l_ = has_key(s:lightline, mode) ? s:lightline[mode].left : s:lightline.active.left
|
let l_ = has_key(s:lightline, mode) ? s:lightline[mode].left : s:lightline.active.left
|
||||||
let [lt, lc, ll] = s:expand(copy(l_))
|
let [lt, lc, ll] = s:expand(copy(l_))
|
||||||
|
@ -403,7 +406,7 @@ function! s:line(tabline, inactive) abort
|
||||||
let _ .= '%#LightlineLeft_' . mode . '_' . ll[i] . '#'
|
let _ .= '%#LightlineLeft_' . mode . '_' . ll[i] . '#'
|
||||||
for j in range(len(lt[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 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 !=# ''
|
if j < len(lt[i]) - 1 && s.left !=# ''
|
||||||
let _ .= s:subseparator(lt[i][(j):], s.left, lc[i][(j):])
|
let _ .= s:subseparator(lt[i][(j):], s.left, lc[i][(j):])
|
||||||
endif
|
endif
|
||||||
|
@ -418,7 +421,7 @@ function! s:line(tabline, inactive) abort
|
||||||
let _ .= '%#LightlineRight_' . mode . '_' . rl[i] . '#'
|
let _ .= '%#LightlineRight_' . mode . '_' . rl[i] . '#'
|
||||||
for j in range(len(rt[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 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 !=# ''
|
if j < len(rt[i]) - 1 && s.right !=# ''
|
||||||
let _ .= s:subseparator(rt[i][(j):], s.right, rc[i][(j):])
|
let _ .= s:subseparator(rt[i][(j):], s.right, rc[i][(j):])
|
||||||
endif
|
endif
|
||||||
|
@ -447,7 +450,7 @@ function! lightline#tabs() abort
|
||||||
let nr = tabpagenr()
|
let nr = tabpagenr()
|
||||||
let cnt = tabpagenr('$')
|
let cnt = tabpagenr('$')
|
||||||
for i in range(1, cnt)
|
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
|
endfor
|
||||||
let abbr = '...'
|
let abbr = '...'
|
||||||
let n = min([max([s:lightline.winwidth / 40, 2]), 8])
|
let n = min([max([s:lightline.winwidth / 40, 2]), 8])
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
" Filename: autoload/lightline/colorscheme.vim
|
" Filename: autoload/lightline/colorscheme.vim
|
||||||
" Author: itchyny
|
" Author: itchyny
|
||||||
" License: MIT License
|
" License: MIT License
|
||||||
" Last Change: 2015/03/18 08:37:17.
|
" Last Change: 2017/11/29 12:54:05.
|
||||||
" =============================================================================
|
" =============================================================================
|
||||||
|
|
||||||
let s:save_cpo = &cpo
|
let s:save_cpo = &cpo
|
||||||
|
@ -224,5 +224,34 @@ function! lightline#colorscheme#flatten(p) abort
|
||||||
return a:p
|
return a:p
|
||||||
endfunction
|
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
|
let &cpo = s:save_cpo
|
||||||
unlet s:save_cpo
|
unlet s:save_cpo
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
" Filename: autoload/lightline/colorscheme/16color.vim
|
" Filename: autoload/lightline/colorscheme/16color.vim
|
||||||
" Author: itchyny
|
" Author: itchyny
|
||||||
" License: MIT License
|
" 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:base03 = [ '#808080', 8 ]
|
||||||
let s:base02 = [ '#000000', 0 ]
|
let s:base02 = [ '#000000', 0 ]
|
||||||
let s:base01 = [ '#00ff00', 10 ]
|
let s:base01 = [ '#00ff00', 10 ]
|
||||||
|
@ -20,12 +21,14 @@ let s:violet = [ '#ff00ff', 13 ]
|
||||||
let s:blue = [ '#000080', 4 ]
|
let s:blue = [ '#000080', 4 ]
|
||||||
let s:cyan = [ '#008080', 6 ]
|
let s:cyan = [ '#008080', 6 ]
|
||||||
let s:green = [ '#008000', 2 ]
|
let s:green = [ '#008000', 2 ]
|
||||||
if &background ==# 'light'
|
|
||||||
|
if lightline#colorscheme#background() ==# 'light'
|
||||||
let [s:base03, s:base3] = [s:base3, s:base03]
|
let [s:base03, s:base3] = [s:base3, s:base03]
|
||||||
let [s:base02, s:base2] = [s:base2, s:base02]
|
let [s:base02, s:base2] = [s:base2, s:base02]
|
||||||
let [s:base01, s:base1] = [s:base1, s:base01]
|
let [s:base01, s:base1] = [s:base1, s:base01]
|
||||||
let [s:base00, s:base0] = [s:base0, s:base00]
|
let [s:base00, s:base0] = [s:base0, s:base00]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
|
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.left = [ [ s:base3, s:blue ], [ s:base3, s:base01 ] ]
|
||||||
let s:p.normal.right = [ [ s:base02, s:base0 ], [ s:base1, s:base01 ] ]
|
let s:p.normal.right = [ [ s:base02, s:base0 ], [ s:base1, s:base01 ] ]
|
||||||
|
|
|
@ -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)
|
|
@ -2,10 +2,10 @@
|
||||||
" Filename: autoload/lightline/colorscheme/PaperColor.vim
|
" Filename: autoload/lightline/colorscheme/PaperColor.vim
|
||||||
" Author: TKNGUE
|
" Author: TKNGUE
|
||||||
" License: MIT License
|
" 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
|
let g:lightline#colorscheme#PaperColor#palette = g:lightline#colorscheme#PaperColor_light#palette
|
||||||
else
|
else
|
||||||
let g:lightline#colorscheme#PaperColor#palette = g:lightline#colorscheme#PaperColor_dark#palette
|
let g:lightline#colorscheme#PaperColor#palette = g:lightline#colorscheme#PaperColor_dark#palette
|
||||||
|
|
|
@ -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)
|
|
@ -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)
|
|
@ -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)
|
|
@ -2,26 +2,27 @@
|
||||||
" Filename: autoload/lightline/colorscheme/one.vim
|
" Filename: autoload/lightline/colorscheme/one.vim
|
||||||
" Author: Zoltan Dalmadi
|
" Author: Zoltan Dalmadi
|
||||||
" License: MIT License
|
" License: MIT License
|
||||||
" Last Change: 2016/11/2 17:34:27.
|
" Last Change: 2017/11/28 21:53:01.
|
||||||
" =============================================================================
|
" =============================================================================
|
||||||
|
|
||||||
" Common colors
|
" Common colors
|
||||||
let s:fg = '#abb2bf'
|
let s:fg = [ '#abb2bf', 145 ]
|
||||||
let s:blue = '#61afef'
|
let s:blue = [ '#61afef', 75 ]
|
||||||
let s:green = '#98c379'
|
let s:green = [ '#98c379', 76 ]
|
||||||
let s:purple = '#c678dd'
|
let s:purple = [ '#c678dd', 176 ]
|
||||||
let s:red1 = '#e06c75'
|
let s:red1 = [ '#e06c75', 168 ]
|
||||||
let s:red2 = '#be5046'
|
let s:red2 = [ '#be5046', 168 ]
|
||||||
let s:yellow = '#e5c07b'
|
let s:yellow = [ '#e5c07b', 180 ]
|
||||||
|
|
||||||
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
|
let s:p = {'normal': {}, 'inactive': {}, 'insert': {}, 'replace': {}, 'visual': {}, 'tabline': {}}
|
||||||
|
|
||||||
if &background ==# 'light'
|
if lightline#colorscheme#background() ==# 'light'
|
||||||
" Light variant
|
" Light variant
|
||||||
let s:bg = '#fafafa'
|
let s:bg = [ '#fafafa', 255 ]
|
||||||
let s:gray1 = '#494b53'
|
let s:gray1 = [ '#494b53', 238 ]
|
||||||
let s:gray2 = '#f0f0f0'
|
let s:gray2 = [ '#f0f0f0', 255 ]
|
||||||
let s:gray3 = '#d0d0d0'
|
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.left = [ [ s:bg, s:green, 'bold' ], [ s:gray1, s:gray3 ] ]
|
||||||
let s:p.normal.middle = [ [ s:gray1, s:gray2 ] ]
|
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 ] ]
|
let s:p.visual.left = [ [ s:bg, s:purple, 'bold' ], [ s:gray1, s:gray3 ] ]
|
||||||
else
|
else
|
||||||
" Dark variant
|
" Dark variant
|
||||||
let s:bg = '#282c34'
|
let s:bg = [ '#282c34', 235 ]
|
||||||
let s:gray1 = '#5c6370'
|
let s:gray1 = [ '#5c6370', 241 ]
|
||||||
let s:gray2 = '#2c323d'
|
let s:gray2 = [ '#2c323d', 235 ]
|
||||||
let s:gray3 = '#3e4452'
|
let s:gray3 = [ '#3e4452', 240 ]
|
||||||
|
|
||||||
let s:p.normal.left = [ [ s:bg, s:green, 'bold' ], [ s:fg, s:gray3 ] ]
|
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.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.middle = [ [ s:gray3, s:gray2 ] ]
|
||||||
let s:p.tabline.right = copy(s:p.normal.right)
|
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)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
" Filename: autoload/lightline/colorscheme/solarized.vim
|
" Filename: autoload/lightline/colorscheme/solarized.vim
|
||||||
" Author: itchyny
|
" Author: itchyny
|
||||||
" License: MIT License
|
" License: MIT License
|
||||||
" Last Change: 2016/08/08 10:31:00.
|
" Last Change: 2017/11/25 11:13:46.
|
||||||
" =============================================================================
|
" =============================================================================
|
||||||
|
|
||||||
let s:cuicolors = {
|
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:cyan = [ '#2aa198', s:cuicolors.cyan[s:cuiindex] ]
|
||||||
let s:green = [ '#859900', s:cuicolors.green[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:base03, s:base3 ] = [ s:base3, s:base03 ]
|
||||||
let [ s:base02, s:base2 ] = [ s:base2, s:base02 ]
|
let [ s:base02, s:base2 ] = [ s:base2, s:base02 ]
|
||||||
let [ s:base01, s:base1 ] = [ s:base1, s:base01 ]
|
let [ s:base01, s:base1 ] = [ s:base1, s:base01 ]
|
||||||
|
|
|
@ -4,7 +4,7 @@ Version: 0.1
|
||||||
Author: itchyny (https://github.com/itchyny)
|
Author: itchyny (https://github.com/itchyny)
|
||||||
License: MIT License
|
License: MIT License
|
||||||
Repository: https://github.com/itchyny/lightline.vim
|
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*
|
CONTENTS *lightline-contents*
|
||||||
|
|
||||||
|
@ -109,8 +109,9 @@ OPTIONS *lightline-option*
|
||||||
\ 'spell': '%{&spell?&spelllang:""}',
|
\ 'spell': '%{&spell?&spelllang:""}',
|
||||||
\ 'lineinfo': '%3l:%-2v',
|
\ 'lineinfo': '%3l:%-2v',
|
||||||
\ 'line': '%l',
|
\ 'line': '%l',
|
||||||
\ 'column': '%c'
|
\ 'column': '%c',
|
||||||
\ 'close': '%999X X ' }
|
\ 'close': '%999X X ',
|
||||||
|
\ 'winnr': '%{winnr()}' }
|
||||||
<
|
<
|
||||||
g:lightline.component_visible_condition
|
g:lightline.component_visible_condition
|
||||||
*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
|
|g:lightline.component_expand|. The types are used to specify
|
||||||
the color. Specifically, the type raw is used to specify a
|
the color. Specifically, the type raw is used to specify a
|
||||||
component which should not be wrapped by item group: %(...%).
|
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: >
|
The default value is: >
|
||||||
|
|
||||||
let g:lightline.component_type = {
|
let g:lightline.component_type = {
|
||||||
\ 'tabs': 'tabsel',
|
\ 'tabs': 'tabsel',
|
||||||
\ 'close': 'raw' }
|
\ '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*
|
g:lightline.tab_component *g:lightline.tab_component*
|
||||||
A dictionary for components in one tab.
|
A dictionary for components in one tab.
|
||||||
|
@ -217,7 +229,7 @@ OPTIONS *lightline-option*
|
||||||
Currently, wombat, solarized, powerline, jellybeans, Tomorrow,
|
Currently, wombat, solarized, powerline, jellybeans, Tomorrow,
|
||||||
Tomorrow_Night, Tomorrow_Night_Blue, Tomorrow_Night_Eighties,
|
Tomorrow_Night, Tomorrow_Night_Blue, Tomorrow_Night_Eighties,
|
||||||
PaperColor, seoul256, landscape, one, Dracula, darcula,
|
PaperColor, seoul256, landscape, one, Dracula, darcula,
|
||||||
Molokai and 16color are available.
|
molokai, materia, material, OldHope, nord and 16color are available.
|
||||||
The default value is:
|
The default value is:
|
||||||
>
|
>
|
||||||
let g:lightline.colorscheme = 'default'
|
let g:lightline.colorscheme = 'default'
|
||||||
|
@ -1212,7 +1224,9 @@ Problem 12: *lightline-problem-12*
|
||||||
Problem 13: *lightline-problem-13*
|
Problem 13: *lightline-problem-13*
|
||||||
How to change the lightline colorscheme on the fly.
|
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
|
augroup LightlineColorscheme
|
||||||
autocmd!
|
autocmd!
|
||||||
|
@ -1233,6 +1247,27 @@ Problem 13: *lightline-problem-13*
|
||||||
catch
|
catch
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
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(<q-args>)
|
||||||
<
|
<
|
||||||
Problem 14: *lightline-problem-14*
|
Problem 14: *lightline-problem-14*
|
||||||
The 'E541' warning appears on the right hand side.
|
The 'E541' warning appears on the right hand side.
|
||||||
|
|
|
@ -45,6 +45,32 @@ function! s:suite.custom_type()
|
||||||
delfunction Custom
|
delfunction Custom
|
||||||
endfunction
|
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! s:suite.multiple()
|
||||||
function! Custom()
|
function! Custom()
|
||||||
return [ ['x0', 'x1', 'x2'], ['y0', 'y1', 'y2'], ['z0', 'z1', 'z2'] ]
|
return [ ['x0', 'x1', 'x2'], ['y0', 'y1', 'y2'], ['z0', 'z1', 'z2'] ]
|
||||||
|
|
|
@ -61,7 +61,7 @@ function! s:suite.tabnew_20_tabfirst()
|
||||||
tabnew
|
tabnew
|
||||||
endfor
|
endfor
|
||||||
tabfirst
|
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
|
endfunction
|
||||||
|
|
||||||
function! s:suite.tabnew_20_tabfirst_tabnext()
|
function! s:suite.tabnew_20_tabfirst_tabnext()
|
||||||
|
@ -70,7 +70,7 @@ function! s:suite.tabnew_20_tabfirst_tabnext()
|
||||||
endfor
|
endfor
|
||||||
tabfirst
|
tabfirst
|
||||||
tabnext
|
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
|
endfunction
|
||||||
|
|
||||||
function! s:suite.tabnew_20_tabnext_10()
|
function! s:suite.tabnew_20_tabnext_10()
|
||||||
|
@ -78,7 +78,7 @@ function! s:suite.tabnew_20_tabnext_10()
|
||||||
tabnew
|
tabnew
|
||||||
endfor
|
endfor
|
||||||
tabnext 10
|
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
|
endfunction
|
||||||
|
|
||||||
function! s:suite.tabnew_20_tabprevious()
|
function! s:suite.tabnew_20_tabprevious()
|
||||||
|
|
|
@ -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
|
The recently used filenames are stored in a file specified by the Vim
|
||||||
MRU_File variable.
|
MRU_File variable.
|
||||||
|
|
||||||
|
The Github repository for the MRU plugin is available at:
|
||||||
|
|
||||||
|
http://github.com/yegappan/mru
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
|
|
||||||
To list and edit files from the MRU list, you can use the ":MRU" command.
|
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.
|
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
|
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 <Shift-Enter> 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'
|
To open a file from the MRU window in read-only mode (view), press the 'v'
|
||||||
key.
|
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.
|
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
|
You can open multiple files from the MRU window by specifying a count before
|
||||||
pressing '<Enter>' or 'v' or 'o' or 't'. You can also visually select
|
pressing '<Enter>' or 'v' or 'o' or 't'. You can also visually (using
|
||||||
multiple filenames and invoke the commands to open the files. Each selected
|
linewise visual mode) select multiple filenames and invoke the commands to
|
||||||
file will be opened in a separate window or tab.
|
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
|
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.
|
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
|
You can close the MRU window by pressing the 'q' key or the <Esc> key or
|
||||||
window commands.
|
using one of the Vim window commands.
|
||||||
|
|
||||||
To display only files matching a pattern from the MRU list in the MRU
|
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
|
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
|
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.
|
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
|
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.
|
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
|
Configuration
|
||||||
|
|
||||||
By changing the following variables you can configure the behavior of this
|
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
|
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':'.*'}
|
||||||
|
|
|
@ -1,14 +1,14 @@
|
||||||
" File: mru.vim
|
" File: mru.vim
|
||||||
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
|
" Author: Yegappan Lakshmanan (yegappan AT yahoo DOT com)
|
||||||
" Version: 3.4
|
" Version: 3.9
|
||||||
" Last Modified: April 13, 2012
|
" Last Modified: Feb 3, 2015
|
||||||
" Copyright: Copyright (C) 2003-2012 Yegappan Lakshmanan
|
" Copyright: Copyright (C) 2003-2015 Yegappan Lakshmanan
|
||||||
" Permission is hereby granted to use and distribute this code,
|
" License: Permission is hereby granted to use and distribute this code,
|
||||||
" with or without modifications, provided that this copyright
|
" with or without modifications, provided that this copyright
|
||||||
" notice is copied with it. Like anything else that's free,
|
" notice is copied with it. Like anything else that's free,
|
||||||
" mru.vim is provided *as is* and comes with no warranty of any
|
" mru.vim is provided *as is* and comes with no warranty of any
|
||||||
" kind, either expressed or implied. In no event will the copyright
|
" 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.
|
" software.
|
||||||
"
|
"
|
||||||
" Overview
|
" Overview
|
||||||
|
@ -25,27 +25,19 @@
|
||||||
" The recently used filenames are stored in a file specified by the Vim
|
" The recently used filenames are stored in a file specified by the Vim
|
||||||
" MRU_File variable.
|
" MRU_File variable.
|
||||||
"
|
"
|
||||||
|
" The Github repository for the MRU plugin is available at:
|
||||||
|
"
|
||||||
|
" http://github.com/yegappan/mru
|
||||||
|
"
|
||||||
" Installation
|
" Installation
|
||||||
" ------------
|
" ------------
|
||||||
" 1. Copy the mru.vim file to one of the following directories:
|
" 1. Copy the mru.vim file to one of the following directories:
|
||||||
"
|
|
||||||
" $HOME/.vim/plugin - Unix like systems
|
" $HOME/.vim/plugin - Unix like systems
|
||||||
" $HOME/vimfiles/plugin - MS-Windows
|
" $HOME/vimfiles/plugin - MS-Windows
|
||||||
" $VIM:vimfiles:plugin - Macintosh
|
" $VIM:vimfiles:plugin - Macintosh
|
||||||
" $VIM/vimfiles/plugin - All
|
" $VIM/vimfiles/plugin - All
|
||||||
"
|
" 2. Restart Vim.
|
||||||
" Refer to the following Vim help topics for more information about Vim
|
" 3. You can use the ":MRU" command to list and edit the recently used files.
|
||||||
" 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.
|
|
||||||
" In GUI Vim, you can use the 'File->Recent Files' menu to access the
|
" In GUI Vim, you can use the 'File->Recent Files' menu to access the
|
||||||
" recently used files.
|
" recently used files.
|
||||||
"
|
"
|
||||||
|
@ -75,7 +67,8 @@
|
||||||
" some other plugin, then the file is opened in a new window.
|
" 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
|
" 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 <Shift-Enter> 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'
|
" To open a file from the MRU window in read-only mode (view), press the 'v'
|
||||||
" key.
|
" key.
|
||||||
|
@ -85,15 +78,16 @@
|
||||||
" the cursor is moved to that tab. Otherwise, a new tab is opened.
|
" 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
|
" You can open multiple files from the MRU window by specifying a count before
|
||||||
" pressing '<Enter>' or 'v' or 'o' or 't'. You can also visually select
|
" pressing '<Enter>' or 'v' or 'o' or 't'. You can also visually (using
|
||||||
" multiple filenames and invoke the commands to open the files. Each selected
|
" linewise visual mode) select multiple filenames and invoke the commands to
|
||||||
" file will be opened in a separate window or tab.
|
" 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
|
" 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.
|
" 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
|
" You can close the MRU window by pressing the 'q' key or the <Esc> key or
|
||||||
" window commands.
|
" using one of the Vim window commands.
|
||||||
"
|
"
|
||||||
" To display only files matching a pattern from the MRU list in the MRU
|
" 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
|
" 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
|
" 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.
|
" 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
|
" Configuration
|
||||||
" -------------
|
" -------------
|
||||||
" By changing the following variables you can configure the behavior of this
|
" By changing the following variables you can configure the behavior of this
|
||||||
|
@ -203,6 +207,17 @@
|
||||||
"
|
"
|
||||||
" let MRU_Max_Submenu_Entries = 15
|
" 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 ************************
|
" ****************** Do not modify after this line ************************
|
||||||
if exists('loaded_mru')
|
if exists('loaded_mru')
|
||||||
finish
|
finish
|
||||||
|
@ -296,6 +311,21 @@ if !exists('MRU_Open_File_Use_Tabs')
|
||||||
let MRU_Open_File_Use_Tabs = 0
|
let MRU_Open_File_Use_Tabs = 0
|
||||||
endif
|
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
|
" Control to temporarily lock the MRU list. Used to prevent files from
|
||||||
" getting added to the MRU list when the ':vimgrep' command is executed.
|
" getting added to the MRU list when the ':vimgrep' command is executed.
|
||||||
let s:mru_list_locked = 0
|
let s:mru_list_locked = 0
|
||||||
|
@ -419,7 +449,11 @@ endfunction
|
||||||
" that should be escaped (for security reasons)
|
" that should be escaped (for security reasons)
|
||||||
let s:esc_filename_chars = ' *?[{`$%#"|!<>();&' . "'\t\n"
|
let s:esc_filename_chars = ' *?[{`$%#"|!<>();&' . "'\t\n"
|
||||||
function! s:MRU_escape_filename(fname)
|
function! s:MRU_escape_filename(fname)
|
||||||
|
if exists("*fnameescape")
|
||||||
|
return fnameescape(a:fname)
|
||||||
|
else
|
||||||
return escape(a:fname, s:esc_filename_chars)
|
return escape(a:fname, s:esc_filename_chars)
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" MRU_Edit_File {{{1
|
" MRU_Edit_File {{{1
|
||||||
|
@ -449,11 +483,13 @@ function! s:MRU_Edit_File(filename, sanitized)
|
||||||
exe winnum . 'wincmd w'
|
exe winnum . 'wincmd w'
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if &modified || &buftype != '' || &previewwindow
|
if !&hidden && (&modified || &buftype != '' || &previewwindow)
|
||||||
" Current buffer has unsaved changes or is a special buffer or is
|
" 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
|
exe 'split ' . esc_fname
|
||||||
else
|
else
|
||||||
|
" The current file can be replaced with the selected file.
|
||||||
exe 'edit ' . esc_fname
|
exe 'edit ' . esc_fname
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -484,7 +520,7 @@ function! s:MRU_Open_File_In_Tab(fname, esc_fname)
|
||||||
exe 'tabnext ' . i
|
exe 'tabnext ' . i
|
||||||
else
|
else
|
||||||
" Open a new tab as the last tab page
|
" Open a new tab as the last tab page
|
||||||
exe '999tabnew ' . a:esc_fname
|
exe '$tabnew ' . a:esc_fname
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -503,8 +539,7 @@ endfunction
|
||||||
" 'edit' - Edit the file as a regular file
|
" 'edit' - Edit the file as a regular file
|
||||||
" multi : Specifies whether a single file or multiple files need to be
|
" multi : Specifies whether a single file or multiple files need to be
|
||||||
" opened.
|
" opened.
|
||||||
" open_type : Specifies where to open the file. Can be one of 'useopen' or
|
" open_type : Specifies where to open the file.
|
||||||
" 'newwin' or 'newtab'.
|
|
||||||
" useopen - If the file is already present in a window, then
|
" useopen - If the file is already present in a window, then
|
||||||
" jump to that window. Otherwise, open the file in
|
" jump to that window. Otherwise, open the file in
|
||||||
" the previous window.
|
" the previous window.
|
||||||
|
@ -512,21 +547,25 @@ endfunction
|
||||||
" newwin_vert - Open the file in a new vertical window.
|
" newwin_vert - Open the file in a new vertical window.
|
||||||
" newtab - Open the file in a new tab. If the file is already
|
" newtab - Open the file in a new tab. If the file is already
|
||||||
" opened in a tab, then jump to that tab.
|
" 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)
|
function! s:MRU_Window_Edit_File(fname, multi, edit_type, open_type)
|
||||||
let esc_fname = s:MRU_escape_filename(a:fname)
|
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
|
" Edit the file in a new horizontally split window above the previous
|
||||||
" window
|
" window
|
||||||
wincmd p
|
wincmd p
|
||||||
exe 'belowright new ' . esc_fname
|
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
|
" Edit the file in a new vertically split window above the previous
|
||||||
" window
|
" window
|
||||||
wincmd p
|
wincmd p
|
||||||
exe 'belowright vnew ' . esc_fname
|
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)
|
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
|
else
|
||||||
" If the selected file is already open in one of the windows,
|
" If the selected file is already open in one of the windows,
|
||||||
" jump to it
|
" jump to it
|
||||||
|
@ -553,7 +592,7 @@ function! s:MRU_Window_Edit_File(fname, multi, edit_type, open_type)
|
||||||
|
|
||||||
let split_window = 0
|
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
|
" Current buffer has unsaved changes or is the preview window
|
||||||
" or the user is opening multiple files
|
" or the user is opening multiple files
|
||||||
" So open the file in a new window
|
" 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
|
if split_window
|
||||||
" Current buffer has unsaved changes or is a special buffer or
|
" Current buffer has unsaved changes or is a special buffer or
|
||||||
" is the preview window. So open the file in a new window
|
" 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
|
exe 'split ' . esc_fname
|
||||||
else
|
else
|
||||||
exe 'sview ' . esc_fname
|
exe 'sview ' . esc_fname
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if a:edit_type == 'edit'
|
if a:edit_type ==# 'edit'
|
||||||
exe 'edit ' . esc_fname
|
exe 'edit ' . esc_fname
|
||||||
else
|
else
|
||||||
exe 'view ' . esc_fname
|
exe 'view ' . esc_fname
|
||||||
|
@ -619,7 +658,7 @@ function! s:MRU_Select_File_Cmd(opt) range
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" The text in the MRU window contains the filename in parenthesis
|
" 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)
|
call s:MRU_Window_Edit_File(file, multi, edit_type, open_type)
|
||||||
|
|
||||||
|
@ -707,17 +746,20 @@ function! s:MRU_Open_Window(...)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
setlocal modifiable
|
||||||
|
|
||||||
" Mark the buffer as scratch
|
" Mark the buffer as scratch
|
||||||
setlocal buftype=nofile
|
setlocal buftype=nofile
|
||||||
setlocal bufhidden=delete
|
setlocal bufhidden=delete
|
||||||
setlocal noswapfile
|
setlocal noswapfile
|
||||||
setlocal nowrap
|
setlocal nowrap
|
||||||
setlocal nobuflisted
|
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
|
" Use fixed height for the MRU window
|
||||||
setlocal winfixheight
|
setlocal winfixheight
|
||||||
|
|
||||||
call MRU_SetupSyntax()
|
|
||||||
|
|
||||||
" Setup the cpoptions properly for the maps to work
|
" Setup the cpoptions properly for the maps to work
|
||||||
let old_cpoptions = &cpoptions
|
let old_cpoptions = &cpoptions
|
||||||
set cpoptions&vim
|
set cpoptions&vim
|
||||||
|
@ -731,6 +773,10 @@ function! s:MRU_Open_Window(...)
|
||||||
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
||||||
vnoremap <buffer> <silent> o
|
vnoremap <buffer> <silent> o
|
||||||
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
||||||
|
nnoremap <buffer> <silent> <S-CR>
|
||||||
|
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
||||||
|
vnoremap <buffer> <silent> <S-CR>
|
||||||
|
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_horiz')<CR>
|
||||||
nnoremap <buffer> <silent> O
|
nnoremap <buffer> <silent> O
|
||||||
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_vert')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('edit,newwin_vert')<CR>
|
||||||
vnoremap <buffer> <silent> O
|
vnoremap <buffer> <silent> O
|
||||||
|
@ -741,6 +787,14 @@ function! s:MRU_Open_Window(...)
|
||||||
\ :call <SID>MRU_Select_File_Cmd('edit,newtab')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('edit,newtab')<CR>
|
||||||
nnoremap <buffer> <silent> v
|
nnoremap <buffer> <silent> v
|
||||||
\ :call <SID>MRU_Select_File_Cmd('view,useopen')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('view,useopen')<CR>
|
||||||
|
nnoremap <buffer> <silent> p
|
||||||
|
\ :call <SID>MRU_Select_File_Cmd('view,preview')<CR>
|
||||||
|
vnoremap <buffer> <silent> p
|
||||||
|
\ :<C-u>if line("'<") == line("'>")<Bar>
|
||||||
|
\ call <SID>MRU_Select_File_Cmd('open,preview')<Bar>
|
||||||
|
\ else<Bar>
|
||||||
|
\ echoerr "Only a single file can be previewed"<Bar>
|
||||||
|
\ endif<CR>
|
||||||
nnoremap <buffer> <silent> u :MRU<CR>
|
nnoremap <buffer> <silent> u :MRU<CR>
|
||||||
nnoremap <buffer> <silent> <2-LeftMouse>
|
nnoremap <buffer> <silent> <2-LeftMouse>
|
||||||
\ :call <SID>MRU_Select_File_Cmd('edit,useopen')<CR>
|
\ :call <SID>MRU_Select_File_Cmd('edit,useopen')<CR>
|
||||||
|
@ -764,16 +818,22 @@ function! s:MRU_Open_Window(...)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Get the tail part of the file name (without the directory) and display
|
" Get the tail part of the file name (without the directory) and display
|
||||||
" it along with the full path
|
" it along with the full path in parenthesis.
|
||||||
let output = map(m, 'fnamemodify(v:val, ":t") . " (" . v:val . ")"')
|
let output = map(m, g:MRU_Filename_Format.formatter)
|
||||||
silent! 0put =output
|
silent! 0put =output
|
||||||
|
|
||||||
" Delete the empty line at the end of the buffer
|
" Delete the empty line at the end of the buffer
|
||||||
$delete
|
silent! $delete _
|
||||||
|
|
||||||
" Move the cursor to the beginning of the file
|
" Move the cursor to the beginning of the file
|
||||||
normal! gg
|
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
|
setlocal nomodifiable
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -921,7 +981,7 @@ function! s:MRU_Refresh_Menu()
|
||||||
let entry_cnt = len(s:MRU_files)
|
let entry_cnt = len(s:MRU_files)
|
||||||
if entry_cnt > g:MRU_Max_Menu_Entries
|
if entry_cnt > g:MRU_Max_Menu_Entries
|
||||||
" Show only MRU_Max_Menu_Entries file names in the menu
|
" 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
|
let entry_cnt = g:MRU_Max_Menu_Entries
|
||||||
else
|
else
|
||||||
let mru_list = s:MRU_files
|
let mru_list = s:MRU_files
|
||||||
|
@ -949,16 +1009,6 @@ function! s:MRU_Refresh_Menu()
|
||||||
let &cpoptions = old_cpoptions
|
let &cpoptions = old_cpoptions
|
||||||
endfunction
|
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
|
" Load the MRU list on plugin startup
|
||||||
call s:MRU_LoadList()
|
call s:MRU_LoadList()
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
Next
|
Next
|
||||||
|
- Fix broken "t" and "T" mappings, tabs now open at end (lifecrisis) #759
|
||||||
- Update doc with already existing mapping variables (asnr) #699
|
- Update doc with already existing mapping variables (asnr) #699
|
||||||
- Fix the broken g:NERDTreeBookmarksSort setting (lifecrisis) #696
|
- Fix the broken g:NERDTreeBookmarksSort setting (lifecrisis) #696
|
||||||
- Correct NERDTreeIgnore pattern in doc (cntoplolicon) #648
|
- Correct NERDTreeIgnore pattern in doc (cntoplolicon) #648
|
||||||
|
|
|
@ -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
|
The NERDTree is a file system explorer for the Vim editor. Using this plugin,
|
||||||
directories. It presents the filesystem to you in the form of a tree which you
|
users can visually browse complex directory hierarchies, quickly open files for
|
||||||
manipulate with the keyboard and/or mouse. It also allows you to perform
|
reading or editing, and perform basic file system operations.
|
||||||
simple filesystem 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
|
![NERDTree Screenshot](https://github.com/scrooloose/nerdtree/raw/master/screenshot.png)
|
||||||
* 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
|
|
||||||
|
|
||||||
Installation
|
Installation
|
||||||
------------
|
------------
|
||||||
|
@ -59,17 +21,15 @@ Installation
|
||||||
|
|
||||||
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree
|
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](https://github.com/egalpin/apt-vim)
|
||||||
|
|
||||||
apt-vim install -y https://github.com/scrooloose/nerdtree.git
|
apt-vim install -y https://github.com/scrooloose/nerdtree.git
|
||||||
|
|
||||||
|
F.A.Q.
|
||||||
|
------
|
||||||
Faq
|
|
||||||
---
|
|
||||||
|
|
||||||
> Is there any support for `git` flags?
|
> Is there any support for `git` flags?
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,11 @@ function! nerdtree#runningWindows()
|
||||||
return has("win16") || has("win32") || has("win64")
|
return has("win16") || has("win32") || has("win64")
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
"FUNCTION: nerdtree#runningCygwin(dir) {{{2
|
||||||
|
function! nerdtree#runningCygwin()
|
||||||
|
return has("win32unix")
|
||||||
|
endfunction
|
||||||
|
|
||||||
" SECTION: View Functions {{{1
|
" SECTION: View Functions {{{1
|
||||||
"============================================================
|
"============================================================
|
||||||
|
|
||||||
|
|
|
@ -68,10 +68,10 @@ function! nerdtree#ui_glue#createDefaultBindings()
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpNextSibling, 'scope': "Node", 'callback': s."jumpToNextSibling" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpNextSibling, 'scope': "Node", 'callback': s."jumpToNextSibling" })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpPrevSibling, 'scope': "Node", 'callback': s."jumpToPrevSibling" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapJumpPrevSibling, 'scope': "Node", 'callback': s."jumpToPrevSibling" })
|
||||||
|
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Node", 'callback': s."openInNewTab" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': 'Node', 'callback': s . 'openInNewTab' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Node", 'callback': s."openInNewTabSilent" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': 'Node', 'callback': s . 'openInNewTabSilent' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': "Bookmark", 'callback': s."openInNewTab" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTab, 'scope': 'Bookmark', 'callback': s . 'openInNewTab' })
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': "Bookmark", 'callback': s."openInNewTabSilent" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenInTabSilent, 'scope': 'Bookmark', 'callback': s . 'openInNewTabSilent' })
|
||||||
|
|
||||||
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "DirNode", 'callback': s."openExplorer" })
|
call NERDTreeAddKeyMap({ 'key': g:NERDTreeMapOpenExpl, 'scope': "DirNode", 'callback': s."openExplorer" })
|
||||||
|
|
||||||
|
@ -90,10 +90,15 @@ function! s:activateAll()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:activateDirNode() {{{1
|
" FUNCTION: s:activateDirNode(directoryNode) {{{1
|
||||||
"handle the user activating a tree node
|
function! s:activateDirNode(directoryNode)
|
||||||
function! s:activateDirNode(node)
|
|
||||||
call a:node.activate()
|
if a:directoryNode.isRoot() && a:directoryNode.isOpen
|
||||||
|
call nerdtree#echo('cannot close tree root')
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
|
||||||
|
call a:directoryNode.activate()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:activateFileNode() {{{1
|
"FUNCTION: s:activateFileNode() {{{1
|
||||||
|
@ -184,24 +189,28 @@ function! s:closeChildren(node)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:closeCurrentDir(node) {{{1
|
" 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)
|
function! s:closeCurrentDir(node)
|
||||||
let parent = a:node.parent
|
|
||||||
while g:NERDTreeCascadeOpenSingleChildDir && !parent.isRoot()
|
if a:node.isRoot()
|
||||||
let childNodes = parent.getVisibleChildren()
|
call nerdtree#echo('cannot close parent of tree root')
|
||||||
if len(childNodes) == 1 && childNodes[0].path.isDirectory
|
return
|
||||||
let parent = parent.parent
|
|
||||||
else
|
|
||||||
break
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let l:parent = a:node.parent
|
||||||
|
|
||||||
|
while l:parent.isCascadable()
|
||||||
|
let l:parent = l:parent.parent
|
||||||
endwhile
|
endwhile
|
||||||
if parent ==# {} || parent.isRoot()
|
|
||||||
call nerdtree#echo("cannot close tree root")
|
if l:parent.isRoot()
|
||||||
else
|
call nerdtree#echo('cannot close tree root')
|
||||||
call parent.close()
|
return
|
||||||
call b:NERDTree.render()
|
|
||||||
call parent.putCursorHere(0, 0)
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call l:parent.close()
|
||||||
|
call b:NERDTree.render()
|
||||||
|
call l:parent.putCursorHere(0, 0)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:closeTreeWindow() {{{1
|
" FUNCTION: s:closeTreeWindow() {{{1
|
||||||
|
@ -218,24 +227,30 @@ function! s:closeTreeWindow()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:deleteBookmark(bm) {{{1
|
" FUNCTION: s:deleteBookmark(bookmark) {{{1
|
||||||
" if the cursor is on a bookmark, prompt to delete
|
" Prompt the user to confirm the deletion of the selected bookmark.
|
||||||
function! s:deleteBookmark(bm)
|
function! s:deleteBookmark(bookmark)
|
||||||
echo "Are you sure you wish to delete the bookmark:\n\"" . a:bm.name . "\" (yN):"
|
let l:message = "Delete the bookmark \"" . a:bookmark.name
|
||||||
|
\ . "\" from the bookmark list?"
|
||||||
|
|
||||||
if nr2char(getchar()) ==# 'y'
|
let l:choices = "&Yes\n&No"
|
||||||
try
|
|
||||||
call a:bm.delete()
|
echo | redraw
|
||||||
call b:NERDTree.root.refresh()
|
let l:selection = confirm(l:message, l:choices, 1, 'Warning')
|
||||||
call b:NERDTree.render()
|
|
||||||
redraw
|
if l:selection != 1
|
||||||
catch /^NERDTree/
|
call nerdtree#echo('bookmark not deleted')
|
||||||
call nerdtree#echoWarning("Could not remove bookmark")
|
return
|
||||||
endtry
|
|
||||||
else
|
|
||||||
call nerdtree#echo("delete aborted" )
|
|
||||||
endif
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:displayHelp() {{{1
|
" FUNCTION: s:displayHelp() {{{1
|
||||||
|
@ -246,10 +261,16 @@ function! s:displayHelp()
|
||||||
call b:NERDTree.ui.centerView()
|
call b:NERDTree.ui.centerView()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:findAndRevealPath() {{{1
|
" FUNCTION: s:findAndRevealPath(path) {{{1
|
||||||
function! s:findAndRevealPath()
|
function! s:findAndRevealPath(path)
|
||||||
|
let l:path = a:path
|
||||||
|
|
||||||
|
if empty(l:path)
|
||||||
|
let l:path = expand('%:p')
|
||||||
|
endif
|
||||||
|
|
||||||
try
|
try
|
||||||
let p = g:NERDTreePath.New(expand("%:p"))
|
let p = g:NERDTreePath.New(l:path)
|
||||||
catch /^NERDTree.InvalidArgumentsError/
|
catch /^NERDTree.InvalidArgumentsError/
|
||||||
call nerdtree#echo("no file for the current buffer")
|
call nerdtree#echo("no file for the current buffer")
|
||||||
return
|
return
|
||||||
|
@ -404,13 +425,27 @@ function! s:jumpToLastChild(node)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:jumpToParent(node) {{{1
|
" 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)
|
function! s:jumpToParent(node)
|
||||||
if !empty(a:node.parent)
|
let l:parent = a:node.parent
|
||||||
call a:node.parent.putCursorHere(1, 0)
|
|
||||||
|
" 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()
|
call b:NERDTree.ui.centerView()
|
||||||
else
|
else
|
||||||
call nerdtree#echo("cannot jump to parent")
|
call nerdtree#echo('could not jump to parent node')
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -480,12 +515,14 @@ endfunction
|
||||||
|
|
||||||
" FUNCTION: s:openInNewTab(target) {{{1
|
" FUNCTION: s:openInNewTab(target) {{{1
|
||||||
function! s:openInNewTab(target)
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:openInNewTabSilent(target) {{{1
|
" FUNCTION: s:openInNewTabSilent(target) {{{1
|
||||||
function! s:openInNewTabSilent(target)
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: s:openNodeRecursively(node) {{{1
|
" 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=0 -bar NERDTreeClose :call g:NERDTree.Close()
|
||||||
command! -n=1 -complete=customlist,nerdtree#completeBookmarks -bar NERDTreeFromBookmark call g:NERDTreeCreator.CreateTabTree('<args>')
|
command! -n=1 -complete=customlist,nerdtree#completeBookmarks -bar NERDTreeFromBookmark call g:NERDTreeCreator.CreateTabTree('<args>')
|
||||||
command! -n=0 -bar NERDTreeMirror call g:NERDTreeCreator.CreateMirror()
|
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('<args>')
|
||||||
command! -n=0 -bar NERDTreeFocus call NERDTreeFocus()
|
command! -n=0 -bar NERDTreeFocus call NERDTreeFocus()
|
||||||
command! -n=0 -bar NERDTreeCWD call NERDTreeCWD()
|
command! -n=0 -bar NERDTreeCWD call NERDTreeCWD()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -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!
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -293,23 +293,26 @@ function! s:Bookmark.str()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Bookmark.toRoot(nerdtree) {{{1
|
" 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)
|
function! s:Bookmark.toRoot(nerdtree)
|
||||||
if self.validate()
|
if self.validate()
|
||||||
try
|
try
|
||||||
let targetNode = self.getNode(a:nerdtree, 1)
|
let l:targetNode = self.getNode(a:nerdtree, 1)
|
||||||
|
call l:targetNode.closeChildren()
|
||||||
catch /^NERDTree.BookmarkedNodeNotFoundError/
|
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
|
endtry
|
||||||
call a:nerdtree.changeRoot(targetNode)
|
call a:nerdtree.changeRoot(l:targetNode)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Bookmark.ToRoot(name, nerdtree) {{{1
|
" 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)
|
function! s:Bookmark.ToRoot(name, nerdtree)
|
||||||
let bookmark = s:Bookmark.BookmarkFor(a:name)
|
let l:bookmark = s:Bookmark.BookmarkFor(a:name)
|
||||||
call bookmark.toRoot(a:nerdtree)
|
call l:bookmark.toRoot(a:nerdtree)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: Bookmark.validate() {{{1
|
" FUNCTION: Bookmark.validate() {{{1
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
"CLASS: Creator
|
" ============================================================================
|
||||||
"Creates tab/window/mirror nerdtree windows. Sets up all the window and
|
" CLASS: Creator
|
||||||
"buffer options and key mappings etc.
|
"
|
||||||
"============================================================
|
" 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 s:Creator = {}
|
||||||
let g:NERDTreeCreator = s:Creator
|
let g:NERDTreeCreator = s:Creator
|
||||||
|
|
||||||
"FUNCTION: s:Creator._bindMappings() {{{1
|
" FUNCTION: s:Creator._bindMappings() {{{1
|
||||||
function! s:Creator._bindMappings()
|
function! s:Creator._bindMappings()
|
||||||
"make <cr> do the same as the activate node mapping
|
"make <cr> do the same as the activate node mapping
|
||||||
nnoremap <silent> <buffer> <cr> :call nerdtree#ui_glue#invokeKeyMap(g:NERDTreeMapActivateNode)<cr>
|
nnoremap <silent> <buffer> <cr> :call nerdtree#ui_glue#invokeKeyMap(g:NERDTreeMapActivateNode)<cr>
|
||||||
|
@ -22,7 +28,7 @@ function! s:Creator._bindMappings()
|
||||||
command! -buffer -nargs=0 WriteBookmarks call g:NERDTreeBookmark.Write()
|
command! -buffer -nargs=0 WriteBookmarks call g:NERDTreeBookmark.Write()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._broadcastInitEvent() {{{1
|
" FUNCTION: s:Creator._broadcastInitEvent() {{{1
|
||||||
function! s:Creator._broadcastInitEvent()
|
function! s:Creator._broadcastInitEvent()
|
||||||
silent doautocmd User NERDTreeInit
|
silent doautocmd User NERDTreeInit
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -32,55 +38,48 @@ function! s:Creator.BufNamePrefix()
|
||||||
return 'NERD_tree_'
|
return 'NERD_tree_'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.CreateTabTree(a:name) {{{1
|
" FUNCTION: s:Creator.CreateTabTree(a:name) {{{1
|
||||||
function! s:Creator.CreateTabTree(name)
|
function! s:Creator.CreateTabTree(name)
|
||||||
let creator = s:Creator.New()
|
let creator = s:Creator.New()
|
||||||
call creator.createTabTree(a:name)
|
call creator.createTabTree(a:name)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.createTabTree(a:name) {{{1
|
" FUNCTION: s:Creator.createTabTree(a:name) {{{1
|
||||||
"name: the name of a bookmark or a directory
|
" name: the name of a bookmark or a directory
|
||||||
function! s:Creator.createTabTree(name)
|
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)
|
" Abort if an exception was thrown (i.e., if the bookmark or directory
|
||||||
if empty(path)
|
" does not exist).
|
||||||
|
if empty(l:path)
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if path == {}
|
" Obey the user's preferences for changing the working directory.
|
||||||
return
|
|
||||||
endif
|
|
||||||
|
|
||||||
"if instructed to, then change the vim CWD to the dir the NERDTree is
|
|
||||||
"inited in
|
|
||||||
if g:NERDTreeChDirMode != 0
|
if g:NERDTreeChDirMode != 0
|
||||||
call path.changeToDir()
|
call l:path.changeToDir()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if g:NERDTree.ExistsForTab()
|
if g:NERDTree.ExistsForTab()
|
||||||
if g:NERDTree.IsOpen()
|
|
||||||
call g:NERDTree.Close()
|
call g:NERDTree.Close()
|
||||||
endif
|
|
||||||
|
|
||||||
call self._removeTreeBufForTab()
|
call self._removeTreeBufForTab()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call self._createTreeWin()
|
call self._createTreeWin()
|
||||||
call self._createNERDTree(path, "tab")
|
call self._createNERDTree(l:path, 'tab')
|
||||||
call b:NERDTree.render()
|
call b:NERDTree.render()
|
||||||
call b:NERDTree.root.putCursorHere(0, 0)
|
call b:NERDTree.root.putCursorHere(0, 0)
|
||||||
|
|
||||||
call self._broadcastInitEvent()
|
call self._broadcastInitEvent()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.CreateWindowTree(dir) {{{1
|
" FUNCTION: s:Creator.CreateWindowTree(dir) {{{1
|
||||||
function! s:Creator.CreateWindowTree(dir)
|
function! s:Creator.CreateWindowTree(dir)
|
||||||
let creator = s:Creator.New()
|
let creator = s:Creator.New()
|
||||||
call creator.createWindowTree(a:dir)
|
call creator.createWindowTree(a:dir)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.createWindowTree(dir) {{{1
|
" FUNCTION: s:Creator.createWindowTree(dir) {{{1
|
||||||
function! s:Creator.createWindowTree(dir)
|
function! s:Creator.createWindowTree(dir)
|
||||||
try
|
try
|
||||||
let path = g:NERDTreePath.New(a:dir)
|
let path = g:NERDTreePath.New(a:dir)
|
||||||
|
@ -110,9 +109,10 @@ endfunction
|
||||||
" FUNCTION: s:Creator._createNERDTree(path) {{{1
|
" FUNCTION: s:Creator._createNERDTree(path) {{{1
|
||||||
function! s:Creator._createNERDTree(path, type)
|
function! s:Creator._createNERDTree(path, type)
|
||||||
let b:NERDTree = g:NERDTree.New(a:path, a: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
|
" TODO: This assignment is kept for compatibility reasons. Many other
|
||||||
"Remove this one day
|
" plugins use "b:NERDTreeRoot" instead of "b:NERDTree.root". Remove this
|
||||||
|
" assignment in the future.
|
||||||
let b:NERDTreeRoot = b:NERDTree.root
|
let b:NERDTreeRoot = b:NERDTree.root
|
||||||
|
|
||||||
call b:NERDTree.root.open()
|
call b:NERDTree.root.open()
|
||||||
|
@ -177,9 +177,9 @@ function! s:Creator.createMirror()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._createTreeWin() {{{1
|
" FUNCTION: s:Creator._createTreeWin() {{{1
|
||||||
"Inits the NERD tree window. ie. opens it, sizes it, sets all the local
|
" Inits the NERD tree window. ie. opens it, sizes it, sets all the local
|
||||||
"options etc
|
" options etc
|
||||||
function! s:Creator._createTreeWin()
|
function! s:Creator._createTreeWin()
|
||||||
"create the nerd tree window
|
"create the nerd tree window
|
||||||
let splitLocation = g:NERDTreeWinPos ==# "left" ? "topleft " : "botright "
|
let splitLocation = g:NERDTreeWinPos ==# "left" ? "topleft " : "botright "
|
||||||
|
@ -198,7 +198,7 @@ function! s:Creator._createTreeWin()
|
||||||
call self._setCommonBufOptions()
|
call self._setCommonBufOptions()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._isBufHidden(nr) {{{1
|
" FUNCTION: s:Creator._isBufHidden(nr) {{{1
|
||||||
function! s:Creator._isBufHidden(nr)
|
function! s:Creator._isBufHidden(nr)
|
||||||
redir => bufs
|
redir => bufs
|
||||||
silent ls!
|
silent ls!
|
||||||
|
@ -207,7 +207,7 @@ function! s:Creator._isBufHidden(nr)
|
||||||
return bufs =~ a:nr . '..h'
|
return bufs =~ a:nr . '..h'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.New() {{{1
|
" FUNCTION: s:Creator.New() {{{1
|
||||||
function! s:Creator.New()
|
function! s:Creator.New()
|
||||||
let newCreator = copy(self)
|
let newCreator = copy(self)
|
||||||
return newCreator
|
return newCreator
|
||||||
|
@ -232,8 +232,8 @@ function! s:Creator._nextBufferNumber()
|
||||||
return s:Creator._NextBufNum
|
return s:Creator._NextBufNum
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._pathForString(str) {{{1
|
" FUNCTION: s:Creator._pathForString(str) {{{1
|
||||||
"find a bookmark or adirectory for the given string
|
" find a bookmark or adirectory for the given string
|
||||||
function! s:Creator._pathForString(str)
|
function! s:Creator._pathForString(str)
|
||||||
let path = {}
|
let path = {}
|
||||||
if g:NERDTreeBookmark.BookmarkExistsFor(a:str)
|
if g:NERDTreeBookmark.BookmarkExistsFor(a:str)
|
||||||
|
@ -278,7 +278,7 @@ function! s:Creator._removeTreeBufForTab()
|
||||||
unlet t:NERDTreeBufName
|
unlet t:NERDTreeBufName
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._setCommonBufOptions() {{{1
|
" FUNCTION: s:Creator._setCommonBufOptions() {{{1
|
||||||
function! s:Creator._setCommonBufOptions()
|
function! s:Creator._setCommonBufOptions()
|
||||||
"throwaway buffer options
|
"throwaway buffer options
|
||||||
setlocal noswapfile
|
setlocal noswapfile
|
||||||
|
@ -310,7 +310,7 @@ function! s:Creator._setCommonBufOptions()
|
||||||
setlocal filetype=nerdtree
|
setlocal filetype=nerdtree
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator._setupStatusline() {{{1
|
" FUNCTION: s:Creator._setupStatusline() {{{1
|
||||||
function! s:Creator._setupStatusline()
|
function! s:Creator._setupStatusline()
|
||||||
if g:NERDTreeStatusline != -1
|
if g:NERDTreeStatusline != -1
|
||||||
let &l:statusline = g:NERDTreeStatusline
|
let &l:statusline = g:NERDTreeStatusline
|
||||||
|
@ -335,19 +335,19 @@ function! s:Creator._tabpagevar(tabnr, var)
|
||||||
return v
|
return v
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.ToggleTabTree(dir) {{{1
|
" FUNCTION: s:Creator.ToggleTabTree(dir) {{{1
|
||||||
function! s:Creator.ToggleTabTree(dir)
|
function! s:Creator.ToggleTabTree(dir)
|
||||||
let creator = s:Creator.New()
|
let creator = s:Creator.New()
|
||||||
call creator.toggleTabTree(a:dir)
|
call creator.toggleTabTree(a:dir)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Creator.toggleTabTree(dir) {{{1
|
" FUNCTION: s:Creator.toggleTabTree(dir) {{{1
|
||||||
"Toggles the NERD tree. I.e the NERD tree is open, it is closed, if it is
|
" 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)
|
" closed it is restored or initialized (if it doesnt exist)
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"dir: the full path for the root node (is only used if the NERD tree is being
|
" dir: the full path for the root node (is only used if the NERD tree is being
|
||||||
"initialized.
|
" initialized.
|
||||||
function! s:Creator.toggleTabTree(dir)
|
function! s:Creator.toggleTabTree(dir)
|
||||||
if g:NERDTree.ExistsForTab()
|
if g:NERDTree.ExistsForTab()
|
||||||
if !g:NERDTree.IsOpen()
|
if !g:NERDTree.IsOpen()
|
||||||
|
|
|
@ -21,7 +21,7 @@ function! s:NERDTree.changeRoot(node)
|
||||||
|
|
||||||
"change dir to the dir of the new root if instructed to
|
"change dir to the dir of the new root if instructed to
|
||||||
if g:NERDTreeChDirMode ==# 2
|
if g:NERDTreeChDirMode ==# 2
|
||||||
exec "cd " . self.root.path.str({'format': 'Edit'})
|
call self.root.path.changeToDir()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call self.render()
|
call self.render()
|
||||||
|
|
|
@ -1,15 +1,20 @@
|
||||||
"CLASS: Opener
|
" ============================================================================
|
||||||
"============================================================
|
" CLASS: Opener
|
||||||
|
"
|
||||||
|
" The Opener class defines an API for "opening" operations.
|
||||||
|
" ============================================================================
|
||||||
|
|
||||||
|
|
||||||
let s:Opener = {}
|
let s:Opener = {}
|
||||||
let g:NERDTreeOpener = s:Opener
|
let g:NERDTreeOpener = s:Opener
|
||||||
|
|
||||||
"FUNCTION: s:Opener._bufInWindows(bnum){{{1
|
" FUNCTION: s:Opener._bufInWindows(bnum) {{{1
|
||||||
"[[STOLEN FROM VTREEEXPLORER.VIM]]
|
" [[STOLEN FROM VTREEEXPLORER.VIM]]
|
||||||
"Determine the number of windows open to this buffer number.
|
" Determine the number of windows open to this buffer number.
|
||||||
"Care of Yegappan Lakshman. Thanks!
|
" Care of Yegappan Lakshman. Thanks!
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"bnum: the subject buffers buffer number
|
" bnum: the subject buffers buffer number
|
||||||
function! s:Opener._bufInWindows(bnum)
|
function! s:Opener._bufInWindows(bnum)
|
||||||
let cnt = 0
|
let cnt = 0
|
||||||
let winnum = 1
|
let winnum = 1
|
||||||
|
@ -26,14 +31,15 @@ function! s:Opener._bufInWindows(bnum)
|
||||||
|
|
||||||
return cnt
|
return cnt
|
||||||
endfunction
|
endfunction
|
||||||
"FUNCTION: Opener._checkToCloseTree(newtab) {{{1
|
|
||||||
"Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see
|
" FUNCTION: Opener._checkToCloseTree(newtab) {{{1
|
||||||
"if the tree should be closed now.
|
" Check the class options and global options (i.e. NERDTreeQuitOnOpen) to see
|
||||||
|
" if the tree should be closed now.
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"a:newtab - boolean. If set, only close the tree now if we are opening the
|
" 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
|
" target in a new tab. This is needed because we have to close tree before we
|
||||||
"leave the tab
|
" leave the tab
|
||||||
function! s:Opener._checkToCloseTree(newtab)
|
function! s:Opener._checkToCloseTree(newtab)
|
||||||
if self._keepopen
|
if self._keepopen
|
||||||
return
|
return
|
||||||
|
@ -44,9 +50,8 @@ function! s:Opener._checkToCloseTree(newtab)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" FUNCTION: s:Opener._firstUsableWindow() {{{1
|
||||||
"FUNCTION: s:Opener._firstUsableWindow(){{{1
|
" find the window number of the first normal window
|
||||||
"find the window number of the first normal window
|
|
||||||
function! s:Opener._firstUsableWindow()
|
function! s:Opener._firstUsableWindow()
|
||||||
let i = 1
|
let i = 1
|
||||||
while i <= winnr("$")
|
while i <= winnr("$")
|
||||||
|
@ -62,7 +67,7 @@ function! s:Opener._firstUsableWindow()
|
||||||
return -1
|
return -1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._gotoTargetWin() {{{1
|
" FUNCTION: Opener._gotoTargetWin() {{{1
|
||||||
function! s:Opener._gotoTargetWin()
|
function! s:Opener._gotoTargetWin()
|
||||||
if b:NERDTree.isWinTree()
|
if b:NERDTree.isWinTree()
|
||||||
if self._where == 'v'
|
if self._where == 'v'
|
||||||
|
@ -89,12 +94,12 @@ function! s:Opener._gotoTargetWin()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: s:Opener._isWindowUsable(winnumber) {{{1
|
" FUNCTION: s:Opener._isWindowUsable(winnumber) {{{1
|
||||||
"Returns 0 if opening a file from the tree in the given window requires it to
|
" Returns 0 if opening a file from the tree in the given window requires it to
|
||||||
"be split, 1 otherwise
|
" be split, 1 otherwise
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"winnumber: the number of the window in question
|
" winnumber: the number of the window in question
|
||||||
function! s:Opener._isWindowUsable(winnumber)
|
function! s:Opener._isWindowUsable(winnumber)
|
||||||
"gotta split if theres only one window (i.e. the NERD tree)
|
"gotta split if theres only one window (i.e. the NERD tree)
|
||||||
if winnr("$") ==# 1
|
if winnr("$") ==# 1
|
||||||
|
@ -120,42 +125,33 @@ function! s:Opener._isWindowUsable(winnumber)
|
||||||
return !modified || self._bufInWindows(winbufnr(a:winnumber)) >= 2
|
return !modified || self._bufInWindows(winbufnr(a:winnumber)) >= 2
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener.New(path, opts) {{{1
|
" FUNCTION: Opener.New(path, opts) {{{1
|
||||||
"Args:
|
" Instantiate a new NERDTreeOpener object.
|
||||||
"
|
" Args:
|
||||||
"a:path: The path object that is to be opened.
|
" a:path: the path object that is to be opened
|
||||||
"
|
" a:opts: a dictionary containing the following optional keys...
|
||||||
"a:opts:
|
" '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"
|
||||||
"A dictionary containing the following keys (all optional):
|
" 'reuse': if file is already shown in a window, jump there; takes values
|
||||||
" 'where': Specifies whether the node should be opened in new split/tab or in
|
" "all", "currenttab", or empty
|
||||||
" the previous window. Can be either 'v' or 'h' or 't' (for open in
|
" 'keepopen': boolean (0 or 1); if true, the tree window will not be closed
|
||||||
" new tab)
|
" 'stay': boolean (0 or 1); if true, remain in tree window after opening
|
||||||
" '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! s:Opener.New(path, opts)
|
function! s:Opener.New(path, opts)
|
||||||
let newObj = copy(self)
|
let l:newOpener = copy(self)
|
||||||
|
|
||||||
let newObj._path = a:path
|
let l:newOpener._keepopen = nerdtree#has_opt(a:opts, 'keepopen')
|
||||||
let newObj._stay = nerdtree#has_opt(a:opts, 'stay')
|
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')
|
call l:newOpener._saveCursorPos()
|
||||||
let newObj._reuse = a:opts['reuse']
|
|
||||||
else
|
|
||||||
let newObj._reuse = ''
|
|
||||||
endif
|
|
||||||
|
|
||||||
let newObj._keepopen = nerdtree#has_opt(a:opts, 'keepopen')
|
return l:newOpener
|
||||||
let newObj._where = has_key(a:opts, 'where') ? a:opts['where'] : ''
|
|
||||||
let newObj._nerdtree = b:NERDTree
|
|
||||||
call newObj._saveCursorPos()
|
|
||||||
|
|
||||||
return newObj
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._newSplit() {{{1
|
" FUNCTION: Opener._newSplit() {{{1
|
||||||
function! s:Opener._newSplit()
|
function! s:Opener._newSplit()
|
||||||
" Save the user's settings for splitbelow and splitright
|
" Save the user's settings for splitbelow and splitright
|
||||||
let savesplitbelow=&splitbelow
|
let savesplitbelow=&splitbelow
|
||||||
|
@ -215,51 +211,62 @@ function! s:Opener._newSplit()
|
||||||
let &splitright=savesplitright
|
let &splitright=savesplitright
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._newVSplit() {{{1
|
" FUNCTION: Opener._newVSplit() {{{1
|
||||||
function! s:Opener._newVSplit()
|
function! s:Opener._newVSplit()
|
||||||
let winwidth = winwidth(".")
|
let l:winwidth = winwidth('.')
|
||||||
if winnr("$")==#1
|
|
||||||
let winwidth = g:NERDTreeWinSize
|
if winnr('$') == 1
|
||||||
|
let l:winwidth = g:NERDTreeWinSize
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call nerdtree#exec("wincmd p")
|
call nerdtree#exec('wincmd p')
|
||||||
vnew
|
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()
|
call g:NERDTree.CursorToTreeWin()
|
||||||
exec("silent vertical resize ". winwidth)
|
execute 'silent vertical resize ' . l:winwidth
|
||||||
call nerdtree#exec('wincmd p')
|
|
||||||
|
call nerdtree#exec(l:currentWindowNumber . 'wincmd w')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener.open(target) {{{1
|
" FUNCTION: Opener.open(target) {{{1
|
||||||
function! s:Opener.open(target)
|
function! s:Opener.open(target)
|
||||||
|
|
||||||
if self._path.isDirectory
|
if self._path.isDirectory
|
||||||
call self._openDirectory(a:target)
|
call self._openDirectory(a:target)
|
||||||
else
|
return
|
||||||
call self._openFile()
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call self._openFile()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._openFile() {{{1
|
" FUNCTION: Opener._openFile() {{{1
|
||||||
function! s:Opener._openFile()
|
function! s:Opener._openFile()
|
||||||
|
|
||||||
if self._reuseWindow()
|
if self._reuseWindow()
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call self._gotoTargetWin()
|
call self._gotoTargetWin()
|
||||||
call self._path.edit()
|
|
||||||
if self._stay
|
if self._stay
|
||||||
|
silent call self._path.edit()
|
||||||
call self._restoreCursorPos()
|
call self._restoreCursorPos()
|
||||||
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
call self._path.edit()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._openDirectory(node) {{{1
|
" FUNCTION: Opener._openDirectory(node) {{{1
|
||||||
function! s:Opener._openDirectory(node)
|
function! s:Opener._openDirectory(node)
|
||||||
if self._nerdtree.isWinTree()
|
|
||||||
call self._gotoTargetWin()
|
call self._gotoTargetWin()
|
||||||
|
|
||||||
|
if self._nerdtree.isWinTree()
|
||||||
call g:NERDTreeCreator.CreateWindowTree(a:node.path.str())
|
call g:NERDTreeCreator.CreateWindowTree(a:node.path.str())
|
||||||
else
|
else
|
||||||
call self._gotoTargetWin()
|
|
||||||
if empty(self._where)
|
if empty(self._where)
|
||||||
call b:NERDTree.changeRoot(a:node)
|
call b:NERDTree.changeRoot(a:node)
|
||||||
elseif self._where == 't'
|
elseif self._where == 't'
|
||||||
|
@ -274,7 +281,7 @@ function! s:Opener._openDirectory(node)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._previousWindow() {{{1
|
" FUNCTION: Opener._previousWindow() {{{1
|
||||||
function! s:Opener._previousWindow()
|
function! s:Opener._previousWindow()
|
||||||
if !self._isWindowUsable(winnr("#")) && self._firstUsableWindow() ==# -1
|
if !self._isWindowUsable(winnr("#")) && self._firstUsableWindow() ==# -1
|
||||||
call self._newSplit()
|
call self._newSplit()
|
||||||
|
@ -294,16 +301,16 @@ function! s:Opener._previousWindow()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._restoreCursorPos(){{{1
|
" FUNCTION: Opener._restoreCursorPos() {{{1
|
||||||
function! s:Opener._restoreCursorPos()
|
function! s:Opener._restoreCursorPos()
|
||||||
call nerdtree#exec('normal ' . self._tabnr . 'gt')
|
call nerdtree#exec('normal ' . self._tabnr . 'gt')
|
||||||
call nerdtree#exec(bufwinnr(self._bufnr) . 'wincmd w')
|
call nerdtree#exec(bufwinnr(self._bufnr) . 'wincmd w')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._reuseWindow(){{{1
|
" FUNCTION: Opener._reuseWindow() {{{1
|
||||||
"put the cursor in the first window we find for this file
|
" 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()
|
function! s:Opener._reuseWindow()
|
||||||
if empty(self._reuse)
|
if empty(self._reuse)
|
||||||
return 0
|
return 0
|
||||||
|
@ -334,7 +341,7 @@ function! s:Opener._reuseWindow()
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Opener._saveCursorPos(){{{1
|
" FUNCTION: Opener._saveCursorPos() {{{1
|
||||||
function! s:Opener._saveCursorPos()
|
function! s:Opener._saveCursorPos()
|
||||||
let self._bufnr = bufnr("")
|
let self._bufnr = bufnr("")
|
||||||
let self._tabnr = tabpagenr()
|
let self._tabnr = tabpagenr()
|
||||||
|
|
|
@ -1,13 +1,20 @@
|
||||||
"we need to use this number many times for sorting... so we calculate it only
|
" ============================================================================
|
||||||
"once here
|
" CLASS: Path
|
||||||
let s:NERDTreeSortStarIndex = index(g:NERDTreeSortOrder, '*')
|
"
|
||||||
|
" 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 s:Path = {}
|
||||||
let g:NERDTreePath = s:Path
|
let g:NERDTreePath = s:Path
|
||||||
|
|
||||||
"FUNCTION: Path.AbsolutePathFor(str) {{{1
|
" FUNCTION: Path.AbsolutePathFor(str) {{{1
|
||||||
function! s:Path.AbsolutePathFor(str)
|
function! s:Path.AbsolutePathFor(str)
|
||||||
let prependCWD = 0
|
let prependCWD = 0
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
|
@ -24,7 +31,7 @@ function! s:Path.AbsolutePathFor(str)
|
||||||
return toReturn
|
return toReturn
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.bookmarkNames() {{{1
|
" FUNCTION: Path.bookmarkNames() {{{1
|
||||||
function! s:Path.bookmarkNames()
|
function! s:Path.bookmarkNames()
|
||||||
if !exists("self._bookmarkNames")
|
if !exists("self._bookmarkNames")
|
||||||
call self.cacheDisplayString()
|
call self.cacheDisplayString()
|
||||||
|
@ -32,7 +39,7 @@ function! s:Path.bookmarkNames()
|
||||||
return self._bookmarkNames
|
return self._bookmarkNames
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.cacheDisplayString() {{{1
|
" FUNCTION: Path.cacheDisplayString() {{{1
|
||||||
function! s:Path.cacheDisplayString() abort
|
function! s:Path.cacheDisplayString() abort
|
||||||
let self.cachedDisplayString = self.getLastPathComponent(1)
|
let self.cachedDisplayString = self.getLastPathComponent(1)
|
||||||
|
|
||||||
|
@ -59,7 +66,7 @@ function! s:Path.cacheDisplayString() abort
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.changeToDir() {{{1
|
" FUNCTION: Path.changeToDir() {{{1
|
||||||
function! s:Path.changeToDir()
|
function! s:Path.changeToDir()
|
||||||
let dir = self.str({'format': 'Cd'})
|
let dir = self.str({'format': 'Cd'})
|
||||||
if self.isDirectory ==# 0
|
if self.isDirectory ==# 0
|
||||||
|
@ -74,16 +81,16 @@ function! s:Path.changeToDir()
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
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
|
" 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".
|
" this Path is "less than" the given path, or 1 if it is "greater".
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"path: the path object to compare this to
|
" path: the path object to compare this to
|
||||||
"
|
"
|
||||||
"Return:
|
" Return:
|
||||||
"1, -1 or 0
|
" 1, -1 or 0
|
||||||
function! s:Path.compareTo(path)
|
function! s:Path.compareTo(path)
|
||||||
let thisPath = self.getLastPathComponent(1)
|
let thisPath = self.getLastPathComponent(1)
|
||||||
let thatPath = a:path.getLastPathComponent(1)
|
let thatPath = a:path.getLastPathComponent(1)
|
||||||
|
@ -118,16 +125,16 @@ function! s:Path.compareTo(path)
|
||||||
endif
|
endif
|
||||||
endfunction
|
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
|
" 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
|
" filesystem. If the path already exists, a NERDTree.Path.Exists exception is
|
||||||
"thrown. If any other errors occur, a NERDTree.Path exception is thrown.
|
" thrown. If any other errors occur, a NERDTree.Path exception is thrown.
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"fullpath: the full filesystem path to the file/dir to create
|
" fullpath: the full filesystem path to the file/dir to create
|
||||||
function! s:Path.Create(fullpath)
|
function! s:Path.Create(fullpath)
|
||||||
"bail if the a:fullpath already exists
|
"bail if the a:fullpath already exists
|
||||||
if isdirectory(a:fullpath) || filereadable(a:fullpath)
|
if isdirectory(a:fullpath) || filereadable(a:fullpath)
|
||||||
|
@ -155,12 +162,12 @@ function! s:Path.Create(fullpath)
|
||||||
return s:Path.New(a:fullpath)
|
return s:Path.New(a:fullpath)
|
||||||
endfunction
|
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:
|
" Args:
|
||||||
"dest: the location to copy this dir/file to
|
" dest: the location to copy this dir/file to
|
||||||
function! s:Path.copy(dest)
|
function! s:Path.copy(dest)
|
||||||
if !s:Path.CopyingSupported()
|
if !s:Path.CopyingSupported()
|
||||||
throw "NERDTree.CopyingNotSupportedError: Copying is not supported on this OS"
|
throw "NERDTree.CopyingNotSupportedError: Copying is not supported on this OS"
|
||||||
|
@ -181,20 +188,20 @@ function! s:Path.copy(dest)
|
||||||
endif
|
endif
|
||||||
endfunction
|
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()
|
function! s:Path.CopyingSupported()
|
||||||
return exists('g:NERDTreeCopyCmd') || (exists('g:NERDTreeCopyDirCmd') && exists('g:NERDTreeCopyFileCmd'))
|
return exists('g:NERDTreeCopyCmd') || (exists('g:NERDTreeCopyDirCmd') && exists('g:NERDTreeCopyFileCmd'))
|
||||||
endfunction
|
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
|
" returns 1 if copy this path to the given location will cause files to
|
||||||
"overwritten
|
" overwritten
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"dest: the location this path will be copied to
|
" dest: the location this path will be copied to
|
||||||
function! s:Path.copyingWillOverwrite(dest)
|
function! s:Path.copyingWillOverwrite(dest)
|
||||||
if filereadable(a:dest)
|
if filereadable(a:dest)
|
||||||
return 1
|
return 1
|
||||||
|
@ -208,13 +215,13 @@ function! s:Path.copyingWillOverwrite(dest)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.createParentDirectories(path) {{{1
|
" FUNCTION: Path.createParentDirectories(path) {{{1
|
||||||
"
|
"
|
||||||
"create parent directories for this path if needed
|
" create parent directories for this path if needed
|
||||||
"without throwing any errors if those directories already exist
|
" without throwing any errors if those directories already exist
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"path: full path of the node whose parent directories may need to be created
|
" path: full path of the node whose parent directories may need to be created
|
||||||
function! s:Path.createParentDirectories(path)
|
function! s:Path.createParentDirectories(path)
|
||||||
let dir_path = fnamemodify(a:path, ':h')
|
let dir_path = fnamemodify(a:path, ':h')
|
||||||
if !isdirectory(dir_path)
|
if !isdirectory(dir_path)
|
||||||
|
@ -222,11 +229,11 @@ function! s:Path.createParentDirectories(path)
|
||||||
endif
|
endif
|
||||||
endfunction
|
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()
|
function! s:Path.delete()
|
||||||
if self.isDirectory
|
if self.isDirectory
|
||||||
|
|
||||||
|
@ -250,10 +257,10 @@ function! s:Path.delete()
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.displayString() {{{1
|
" FUNCTION: Path.displayString() {{{1
|
||||||
"
|
"
|
||||||
"Returns a string that specifies how the path should be represented as a
|
" Returns a string that specifies how the path should be represented as a
|
||||||
"string
|
" string
|
||||||
function! s:Path.displayString()
|
function! s:Path.displayString()
|
||||||
if self.cachedDisplayString ==# ""
|
if self.cachedDisplayString ==# ""
|
||||||
call self.cacheDisplayString()
|
call self.cacheDisplayString()
|
||||||
|
@ -262,14 +269,14 @@ function! s:Path.displayString()
|
||||||
return self.cachedDisplayString
|
return self.cachedDisplayString
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.edit() {{{1
|
" FUNCTION: Path.edit() {{{1
|
||||||
function! s:Path.edit()
|
function! s:Path.edit()
|
||||||
exec "edit " . self.str({'format': 'Edit'})
|
exec "edit " . self.str({'format': 'Edit'})
|
||||||
endfunction
|
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)
|
function! s:Path.extractDriveLetter(fullpath)
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
if a:fullpath =~ '^\(\\\\\|\/\/\)'
|
if a:fullpath =~ '^\(\\\\\|\/\/\)'
|
||||||
|
@ -285,14 +292,14 @@ function! s:Path.extractDriveLetter(fullpath)
|
||||||
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.exists() {{{1
|
" FUNCTION: Path.exists() {{{1
|
||||||
"return 1 if this path points to a location that is readable or is a directory
|
" return 1 if this path points to a location that is readable or is a directory
|
||||||
function! s:Path.exists()
|
function! s:Path.exists()
|
||||||
let p = self.str()
|
let p = self.str()
|
||||||
return filereadable(p) || isdirectory(p)
|
return filereadable(p) || isdirectory(p)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._escChars() {{{1
|
" FUNCTION: Path._escChars() {{{1
|
||||||
function! s:Path._escChars()
|
function! s:Path._escChars()
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
return " `\|\"#%&,?()\*^<>$"
|
return " `\|\"#%&,?()\*^<>$"
|
||||||
|
@ -301,12 +308,12 @@ function! s:Path._escChars()
|
||||||
return " \\`\|\"#%&,?()\*^<>[]$"
|
return " \\`\|\"#%&,?()\*^<>[]$"
|
||||||
endfunction
|
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:
|
" Return:
|
||||||
"a Path object
|
" a Path object
|
||||||
function! s:Path.getDir()
|
function! s:Path.getDir()
|
||||||
if self.isDirectory
|
if self.isDirectory
|
||||||
return self
|
return self
|
||||||
|
@ -315,12 +322,12 @@ function! s:Path.getDir()
|
||||||
endif
|
endif
|
||||||
endfunction
|
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:
|
" Return:
|
||||||
"a new Path object
|
" a new Path object
|
||||||
function! s:Path.getParent()
|
function! s:Path.getParent()
|
||||||
if nerdtree#runningWindows()
|
if nerdtree#runningWindows()
|
||||||
let path = self.drive . '\' . join(self.pathSegments[0:-2], '\')
|
let path = self.drive . '\' . join(self.pathSegments[0:-2], '\')
|
||||||
|
@ -331,13 +338,13 @@ function! s:Path.getParent()
|
||||||
return s:Path.New(path)
|
return s:Path.New(path)
|
||||||
endfunction
|
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:
|
" Args:
|
||||||
"dirSlash: if 1 then a trailing slash will be added to the returned value for
|
" dirSlash: if 1 then a trailing slash will be added to the returned value for
|
||||||
"directory nodes.
|
" directory nodes.
|
||||||
function! s:Path.getLastPathComponent(dirSlash)
|
function! s:Path.getLastPathComponent(dirSlash)
|
||||||
if empty(self.pathSegments)
|
if empty(self.pathSegments)
|
||||||
return ''
|
return ''
|
||||||
|
@ -349,8 +356,8 @@ function! s:Path.getLastPathComponent(dirSlash)
|
||||||
return toReturn
|
return toReturn
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.getSortOrderIndex() {{{1
|
" FUNCTION: Path.getSortOrderIndex() {{{1
|
||||||
"returns the index of the pattern in g:NERDTreeSortOrder that this path matches
|
" returns the index of the pattern in g:NERDTreeSortOrder that this path matches
|
||||||
function! s:Path.getSortOrderIndex()
|
function! s:Path.getSortOrderIndex()
|
||||||
let i = 0
|
let i = 0
|
||||||
while i < len(g:NERDTreeSortOrder)
|
while i < len(g:NERDTreeSortOrder)
|
||||||
|
@ -362,8 +369,8 @@ function! s:Path.getSortOrderIndex()
|
||||||
return s:NERDTreeSortStarIndex
|
return s:NERDTreeSortStarIndex
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._splitChunks(path) {{{1
|
" FUNCTION: Path._splitChunks(path) {{{1
|
||||||
"returns a list of path chunks
|
" returns a list of path chunks
|
||||||
function! s:Path._splitChunks(path)
|
function! s:Path._splitChunks(path)
|
||||||
let chunks = split(a:path, '\(\D\+\|\d\+\)\zs')
|
let chunks = split(a:path, '\(\D\+\|\d\+\)\zs')
|
||||||
let i = 0
|
let i = 0
|
||||||
|
@ -377,8 +384,8 @@ function! s:Path._splitChunks(path)
|
||||||
return chunks
|
return chunks
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.getSortKey() {{{1
|
" FUNCTION: Path.getSortKey() {{{1
|
||||||
"returns a key used in compare function for sorting
|
" returns a key used in compare function for sorting
|
||||||
function! s:Path.getSortKey()
|
function! s:Path.getSortKey()
|
||||||
if !exists("self._sortKey")
|
if !exists("self._sortKey")
|
||||||
let path = self.getLastPathComponent(1)
|
let path = self.getLastPathComponent(1)
|
||||||
|
@ -399,14 +406,14 @@ function! s:Path.getSortKey()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
||||||
"FUNCTION: Path.isUnixHiddenFile() {{{1
|
" FUNCTION: Path.isUnixHiddenFile() {{{1
|
||||||
"check for unix hidden files
|
" check for unix hidden files
|
||||||
function! s:Path.isUnixHiddenFile()
|
function! s:Path.isUnixHiddenFile()
|
||||||
return self.getLastPathComponent(0) =~# '^\.'
|
return self.getLastPathComponent(0) =~# '^\.'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.isUnixHiddenPath() {{{1
|
" FUNCTION: Path.isUnixHiddenPath() {{{1
|
||||||
"check for unix path with hidden components
|
" check for unix path with hidden components
|
||||||
function! s:Path.isUnixHiddenPath()
|
function! s:Path.isUnixHiddenPath()
|
||||||
if self.getLastPathComponent(0) =~# '^\.'
|
if self.getLastPathComponent(0) =~# '^\.'
|
||||||
return 1
|
return 1
|
||||||
|
@ -420,8 +427,8 @@ function! s:Path.isUnixHiddenPath()
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.ignore(nerdtree) {{{1
|
" FUNCTION: Path.ignore(nerdtree) {{{1
|
||||||
"returns true if this path should be ignored
|
" returns true if this path should be ignored
|
||||||
function! s:Path.ignore(nerdtree)
|
function! s:Path.ignore(nerdtree)
|
||||||
"filter out the user specified paths to ignore
|
"filter out the user specified paths to ignore
|
||||||
if a:nerdtree.ui.isIgnoreFilterEnabled()
|
if a:nerdtree.ui.isIgnoreFilterEnabled()
|
||||||
|
@ -450,8 +457,8 @@ function! s:Path.ignore(nerdtree)
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._ignorePatternMatches(pattern) {{{1
|
" FUNCTION: Path._ignorePatternMatches(pattern) {{{1
|
||||||
"returns true if this path matches the given ignore pattern
|
" returns true if this path matches the given ignore pattern
|
||||||
function! s:Path._ignorePatternMatches(pattern)
|
function! s:Path._ignorePatternMatches(pattern)
|
||||||
let pat = a:pattern
|
let pat = a:pattern
|
||||||
if strpart(pat,len(pat)-7) == '[[dir]]'
|
if strpart(pat,len(pat)-7) == '[[dir]]'
|
||||||
|
@ -469,10 +476,10 @@ function! s:Path._ignorePatternMatches(pattern)
|
||||||
return self.getLastPathComponent(0) =~# pat
|
return self.getLastPathComponent(0) =~# pat
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.isAncestor(path) {{{1
|
" FUNCTION: Path.isAncestor(path) {{{1
|
||||||
"return 1 if this path is somewhere above the given path in the filesystem.
|
" 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)
|
function! s:Path.isAncestor(path)
|
||||||
if !self.isDirectory
|
if !self.isDirectory
|
||||||
return 0
|
return 0
|
||||||
|
@ -483,8 +490,8 @@ function! s:Path.isAncestor(path)
|
||||||
return stridx(that, this) == 0
|
return stridx(that, this) == 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.isUnder(path) {{{1
|
" FUNCTION: Path.isUnder(path) {{{1
|
||||||
"return 1 if this path is somewhere under the given path in the filesystem.
|
" return 1 if this path is somewhere under the given path in the filesystem.
|
||||||
function! s:Path.isUnder(path)
|
function! s:Path.isUnder(path)
|
||||||
if a:path.isDirectory == 0
|
if a:path.isDirectory == 0
|
||||||
return 0
|
return 0
|
||||||
|
@ -495,7 +502,7 @@ function! s:Path.isUnder(path)
|
||||||
return stridx(this, that . s:Path.Slash()) == 0
|
return stridx(this, that . s:Path.Slash()) == 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.JoinPathStrings(...) {{{1
|
" FUNCTION: Path.JoinPathStrings(...) {{{1
|
||||||
function! s:Path.JoinPathStrings(...)
|
function! s:Path.JoinPathStrings(...)
|
||||||
let components = []
|
let components = []
|
||||||
for i in a:000
|
for i in a:000
|
||||||
|
@ -504,19 +511,19 @@ function! s:Path.JoinPathStrings(...)
|
||||||
return '/' . join(components, '/')
|
return '/' . join(components, '/')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.equals() {{{1
|
" FUNCTION: Path.equals() {{{1
|
||||||
"
|
"
|
||||||
"Determines whether 2 path objects are "equal".
|
" Determines whether 2 path objects are "equal".
|
||||||
"They are equal if the paths they represent are the same
|
" They are equal if the paths they represent are the same
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"path: the other path obj to compare this with
|
" path: the other path obj to compare this with
|
||||||
function! s:Path.equals(path)
|
function! s:Path.equals(path)
|
||||||
return self.str() ==# a:path.str()
|
return self.str() ==# a:path.str()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.New() {{{1
|
" FUNCTION: Path.New() {{{1
|
||||||
"The Constructor for the Path object
|
" The Constructor for the Path object
|
||||||
function! s:Path.New(path)
|
function! s:Path.New(path)
|
||||||
let newPath = copy(self)
|
let newPath = copy(self)
|
||||||
|
|
||||||
|
@ -528,26 +535,37 @@ function! s:Path.New(path)
|
||||||
return newPath
|
return newPath
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.Slash() {{{1
|
" FUNCTION: Path.Slash() {{{1
|
||||||
"return the slash to use for the current OS
|
" 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()
|
function! s:Path.Slash()
|
||||||
return nerdtree#runningWindows() ? '\' : '/'
|
|
||||||
|
if nerdtree#runningWindows()
|
||||||
|
if exists('+shellslash') && &shellslash
|
||||||
|
return '/'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return '\'
|
||||||
|
endif
|
||||||
|
|
||||||
|
return '/'
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.Resolve() {{{1
|
" FUNCTION: Path.Resolve() {{{1
|
||||||
"Invoke the vim resolve() function and return the result
|
" Invoke the vim resolve() function and return the result
|
||||||
"This is necessary because in some versions of vim resolve() removes trailing
|
" 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
|
" slashes while in other versions it doesn't. This always removes the trailing
|
||||||
"slash
|
" slash
|
||||||
function! s:Path.Resolve(path)
|
function! s:Path.Resolve(path)
|
||||||
let tmp = resolve(a:path)
|
let tmp = resolve(a:path)
|
||||||
return tmp =~# '.\+/$' ? substitute(tmp, '/$', '', '') : tmp
|
return tmp =~# '.\+/$' ? substitute(tmp, '/$', '', '') : tmp
|
||||||
endfunction
|
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)
|
function! s:Path.readInfoFromDisk(fullpath)
|
||||||
call self.extractDriveLetter(a:fullpath)
|
call self.extractDriveLetter(a:fullpath)
|
||||||
|
|
||||||
|
@ -598,22 +616,22 @@ function! s:Path.readInfoFromDisk(fullpath)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.refresh(nerdtree) {{{1
|
" FUNCTION: Path.refresh(nerdtree) {{{1
|
||||||
function! s:Path.refresh(nerdtree)
|
function! s:Path.refresh(nerdtree)
|
||||||
call self.readInfoFromDisk(self.str())
|
call self.readInfoFromDisk(self.str())
|
||||||
call g:NERDTreePathNotifier.NotifyListeners('refresh', self, a:nerdtree, {})
|
call g:NERDTreePathNotifier.NotifyListeners('refresh', self, a:nerdtree, {})
|
||||||
call self.cacheDisplayString()
|
call self.cacheDisplayString()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.refreshFlags(nerdtree) {{{1
|
" FUNCTION: Path.refreshFlags(nerdtree) {{{1
|
||||||
function! s:Path.refreshFlags(nerdtree)
|
function! s:Path.refreshFlags(nerdtree)
|
||||||
call g:NERDTreePathNotifier.NotifyListeners('refreshFlags', self, a:nerdtree, {})
|
call g:NERDTreePathNotifier.NotifyListeners('refreshFlags', self, a:nerdtree, {})
|
||||||
call self.cacheDisplayString()
|
call self.cacheDisplayString()
|
||||||
endfunction
|
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)
|
function! s:Path.rename(newPath)
|
||||||
if a:newPath ==# ''
|
if a:newPath ==# ''
|
||||||
throw "NERDTree.InvalidArgumentsError: Invalid newPath for renaming = ". a:newPath
|
throw "NERDTree.InvalidArgumentsError: Invalid newPath for renaming = ". a:newPath
|
||||||
|
@ -632,28 +650,28 @@ function! s:Path.rename(newPath)
|
||||||
call g:NERDTreeBookmark.Write()
|
call g:NERDTreeBookmark.Write()
|
||||||
endfunction
|
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
|
" The dictionary may have the following keys:
|
||||||
"formatted.
|
|
||||||
"
|
|
||||||
"The dict may have the following keys:
|
|
||||||
" 'format'
|
" 'format'
|
||||||
" 'escape'
|
" 'escape'
|
||||||
" 'truncateTo'
|
" 'truncateTo'
|
||||||
"
|
"
|
||||||
"The 'format' key may have a value of:
|
" The 'format' key may have a value of:
|
||||||
" 'Cd' - a string to be used with the :cd command
|
" 'Cd' - a string to be used with ":cd" and similar commands
|
||||||
" 'Edit' - a string to be used with :e :sp :new :tabedit etc
|
" 'Edit' - a string to be used with ":edit" and similar commands
|
||||||
" 'UI' - a string used in the NERD tree UI
|
" 'UI' - a string to be displayed in the NERDTree user interface
|
||||||
"
|
"
|
||||||
"The 'escape' key, if specified will cause the output to be escaped with
|
" The 'escape' key, if specified, will cause the output to be escaped with
|
||||||
"shellescape()
|
" Vim's internal "shellescape()" function.
|
||||||
"
|
"
|
||||||
"The 'truncateTo' key causes the resulting string to be truncated to the value
|
" The 'truncateTo' key shortens the length of the path to that given by the
|
||||||
"'truncateTo' maps to. A '<' char will be prepended.
|
" value associated with 'truncateTo'. A '<' is prepended.
|
||||||
function! s:Path.str(...)
|
function! s:Path.str(...)
|
||||||
let options = a:0 ? a:1 : {}
|
let options = a:0 ? a:1 : {}
|
||||||
let toReturn = ""
|
let toReturn = ""
|
||||||
|
@ -688,7 +706,7 @@ function! s:Path.str(...)
|
||||||
return toReturn
|
return toReturn
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._strForUI() {{{1
|
" FUNCTION: Path._strForUI() {{{1
|
||||||
function! s:Path._strForUI()
|
function! s:Path._strForUI()
|
||||||
let toReturn = '/' . join(self.pathSegments, '/')
|
let toReturn = '/' . join(self.pathSegments, '/')
|
||||||
if self.isDirectory && toReturn != '/'
|
if self.isDirectory && toReturn != '/'
|
||||||
|
@ -697,37 +715,37 @@ function! s:Path._strForUI()
|
||||||
return toReturn
|
return toReturn
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._strForCd() {{{1
|
" FUNCTION: Path._strForCd() {{{1
|
||||||
"
|
" Return a string representation of this Path that is suitable for use as an
|
||||||
" returns a string that can be used with :cd
|
" argument to Vim's internal ":cd" command.
|
||||||
function! s:Path._strForCd()
|
function! s:Path._strForCd()
|
||||||
return escape(self.str(), self._escChars())
|
return fnameescape(self.str())
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._strForEdit() {{{1
|
" FUNCTION: Path._strForEdit() {{{1
|
||||||
"
|
" Return a string representation of this Path that is suitable for use as an
|
||||||
"Return: the string for this path that is suitable to be used with the :edit
|
" argument to Vim's internal ":edit" command.
|
||||||
"command
|
|
||||||
function! s:Path._strForEdit()
|
function! s:Path._strForEdit()
|
||||||
let p = escape(self.str(), self._escChars())
|
|
||||||
|
|
||||||
"make it relative
|
" Make the path relative to the current working directory, if possible.
|
||||||
let p = fnamemodify(p, ':.')
|
let l:result = fnamemodify(self.str(), ':.')
|
||||||
|
|
||||||
"handle the edge case where the file begins with a + (vim interprets
|
" On Windows, the drive letter may be removed by "fnamemodify()". Add it
|
||||||
"the +foo in `:e +foo` as an option to :edit)
|
" back, if necessary.
|
||||||
if p[0] == "+"
|
if nerdtree#runningWindows() && l:result[0] == s:Path.Slash()
|
||||||
let p = '\' . p
|
let l:result = self.drive . l:result
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if p ==# ''
|
let l:result = fnameescape(l:result)
|
||||||
let p = '.'
|
|
||||||
|
if empty(l:result)
|
||||||
|
let l:result = '.'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return p
|
return l:result
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._strForGlob() {{{1
|
" FUNCTION: Path._strForGlob() {{{1
|
||||||
function! s:Path._strForGlob()
|
function! s:Path._strForGlob()
|
||||||
let lead = s:Path.Slash()
|
let lead = s:Path.Slash()
|
||||||
|
|
||||||
|
@ -744,24 +762,22 @@ function! s:Path._strForGlob()
|
||||||
return toReturn
|
return toReturn
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path._str() {{{1
|
" FUNCTION: Path._str() {{{1
|
||||||
"
|
" Return the absolute pathname associated with this Path object. The pathname
|
||||||
"Gets the string path for this path object that is appropriate for the OS.
|
" returned is appropriate for the underlying file system.
|
||||||
"EG, in windows c:\foo\bar
|
|
||||||
" in *nix /foo/bar
|
|
||||||
function! s:Path._str()
|
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()
|
if nerdtree#runningWindows()
|
||||||
let lead = self.drive . '\'
|
let l:leader = self.drive . l:separator
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return lead . join(self.pathSegments, s:Path.Slash())
|
return l:leader . join(self.pathSegments, l:separator)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.strTrunk() {{{1
|
" FUNCTION: Path.strTrunk() {{{1
|
||||||
"Gets the path without the last segment on the end.
|
" Gets the path without the last segment on the end.
|
||||||
function! s:Path.strTrunk()
|
function! s:Path.strTrunk()
|
||||||
return self.drive . '/' . join(self.pathSegments[0:-2], '/')
|
return self.drive . '/' . join(self.pathSegments[0:-2], '/')
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -782,13 +798,13 @@ function! s:Path.tabnr()
|
||||||
return 0
|
return 0
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
"FUNCTION: Path.WinToUnixPath(pathstr){{{1
|
" FUNCTION: Path.WinToUnixPath(pathstr){{{1
|
||||||
"Takes in a windows path and returns the unix equiv
|
" Takes in a windows path and returns the unix equiv
|
||||||
"
|
"
|
||||||
"A class level method
|
" A class level method
|
||||||
"
|
"
|
||||||
"Args:
|
" Args:
|
||||||
"pathstr: the windows path to convert
|
" pathstr: the windows path to convert
|
||||||
function! s:Path.WinToUnixPath(pathstr)
|
function! s:Path.WinToUnixPath(pathstr)
|
||||||
if !nerdtree#runningWindows()
|
if !nerdtree#runningWindows()
|
||||||
return a:pathstr
|
return a:pathstr
|
||||||
|
|
|
@ -21,12 +21,19 @@ function! s:TreeDirNode.AbsoluteTreeRoot()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.activate([options]) {{{1
|
" FUNCTION: TreeDirNode.activate([options]) {{{1
|
||||||
unlet s:TreeDirNode.activate
|
|
||||||
function! s:TreeDirNode.activate(...)
|
function! s:TreeDirNode.activate(...)
|
||||||
let opts = a:0 ? a:1 : {}
|
let l:options = (a:0 > 0) ? a:1 : {}
|
||||||
call self.toggleOpen(opts)
|
|
||||||
|
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.getNerdtree().render()
|
||||||
call self.putCursorHere(0, 0)
|
call self.putCursorHere(0, 0)
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.addChild(treenode, inOrder) {{{1
|
" FUNCTION: TreeDirNode.addChild(treenode, inOrder) {{{1
|
||||||
|
@ -45,18 +52,23 @@ function! s:TreeDirNode.addChild(treenode, inOrder)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.close() {{{1
|
" FUNCTION: TreeDirNode.close() {{{1
|
||||||
" Closes this directory
|
" Mark this TreeDirNode as closed.
|
||||||
function! s:TreeDirNode.close()
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.closeChildren() {{{1
|
" 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()
|
function! s:TreeDirNode.closeChildren()
|
||||||
for i in self.children
|
for l:child in self.children
|
||||||
if i.path.isDirectory
|
if l:child.path.isDirectory
|
||||||
call i.close()
|
call l:child.close()
|
||||||
call i.closeChildren()
|
call l:child.closeChildren()
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endfunction
|
endfunction
|
||||||
|
@ -78,19 +90,29 @@ function! s:TreeDirNode.createChild(path, inOrder)
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.displayString() {{{1
|
" 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()
|
function! s:TreeDirNode.displayString()
|
||||||
let cascade = self.getCascade()
|
let l:result = ''
|
||||||
let rv = ""
|
|
||||||
for node in cascade
|
" Build a label that identifies this TreeDirNode.
|
||||||
let rv = rv . node.path.displayString()
|
let l:label = ''
|
||||||
|
let l:cascade = self.getCascade()
|
||||||
|
for l:dirNode in l:cascade
|
||||||
|
let l:label .= l:dirNode.path.displayString()
|
||||||
endfor
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.findNode(path) {{{1
|
" FUNCTION: TreeDirNode.findNode(path) {{{1
|
||||||
|
@ -205,13 +227,6 @@ function! s:TreeDirNode.getChildIndex(path)
|
||||||
return -1
|
return -1
|
||||||
endfunction
|
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
|
" FUNCTION: TreeDirNode._glob(pattern, all) {{{1
|
||||||
" Return a list of strings naming the descendants of the directory in this
|
" Return a list of strings naming the descendants of the directory in this
|
||||||
" TreeDirNode object that match the specified glob pattern.
|
" 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'}), ':.')
|
let l:pathSpec = fnamemodify(self.path.str({'format': 'Glob'}), ':.')
|
||||||
|
|
||||||
" On Windows, the drive letter may be removed by "fnamemodify()".
|
" 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
|
let l:pathSpec = self.path.drive . l:pathSpec
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
@ -400,25 +415,39 @@ function! s:TreeDirNode.New(path, nerdtree)
|
||||||
return newTreeNode
|
return newTreeNode
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.open([opts]) {{{1
|
" FUNCTION: TreeDirNode.open([options]) {{{1
|
||||||
" Open the dir in the current tree or in a new tree elsewhere.
|
" Open this directory node in the current tree or elsewhere if special options
|
||||||
"
|
" are provided. Return 0 if options were processed. Otherwise, return the
|
||||||
" If opening in the current tree, return the number of cached nodes.
|
" number of new cached nodes.
|
||||||
unlet s:TreeDirNode.open
|
|
||||||
function! s:TreeDirNode.open(...)
|
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'])
|
" If special options were specified, process them and return.
|
||||||
let opener = g:NERDTreeOpener.New(self.path, opts)
|
if has_key(l:options, 'where') && !empty(l:options['where'])
|
||||||
call opener.open(self)
|
let l:opener = g:NERDTreeOpener.New(self.path, l:options)
|
||||||
else
|
call l:opener.open(self)
|
||||||
let self.isOpen = 1
|
|
||||||
if self.children ==# []
|
|
||||||
return self._initChildren(0)
|
|
||||||
else
|
|
||||||
return 0
|
return 0
|
||||||
endif
|
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
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.openAlong([opts]) {{{1
|
" FUNCTION: TreeDirNode.openAlong([opts]) {{{1
|
||||||
|
@ -463,35 +492,16 @@ function! s:TreeDirNode._openInNewTab()
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.openRecursively() {{{1
|
" FUNCTION: TreeDirNode.openRecursively() {{{1
|
||||||
" Opens this treenode and all of its children whose paths arent 'ignored'
|
" Open this directory node and any descendant directory nodes whose pathnames
|
||||||
" because of the file filters.
|
" are not ignored.
|
||||||
"
|
|
||||||
" This method is actually a wrapper for the OpenRecursively2 method which does
|
|
||||||
" the work.
|
|
||||||
function! s:TreeDirNode.openRecursively()
|
function! s:TreeDirNode.openRecursively()
|
||||||
call self._openRecursively2(1)
|
silent call self.open()
|
||||||
endfunction
|
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode._openRecursively2() {{{1
|
for l:child in self.children
|
||||||
" Opens this all children of this treenode recursively if either:
|
if l:child.path.isDirectory && !l:child.path.ignore(l:child.getNerdtree())
|
||||||
" *they arent filtered by file filters
|
call l:child.openRecursively()
|
||||||
" *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)
|
|
||||||
endif
|
|
||||||
|
|
||||||
for i in self.children
|
|
||||||
if i.path.isDirectory ==# 1
|
|
||||||
call i._openRecursively2(0)
|
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: TreeDirNode.refresh() {{{1
|
" FUNCTION: TreeDirNode.refresh() {{{1
|
||||||
|
|
|
@ -21,7 +21,7 @@ endfunction
|
||||||
"prints out the quick help
|
"prints out the quick help
|
||||||
function! s:UI._dumpHelp()
|
function! s:UI._dumpHelp()
|
||||||
if self.getShowHelp()
|
if self.getShowHelp()
|
||||||
let help = "\" NERD tree (" . nerdtree#version() . ") quickhelp~\n"
|
let help = "\" NERDTree (" . nerdtree#version() . ") quickhelp~\n"
|
||||||
let help .= "\" ============================\n"
|
let help .= "\" ============================\n"
|
||||||
let help .= "\" File node mappings~\n"
|
let help .= "\" File node mappings~\n"
|
||||||
let help .= "\" ". (g:NERDTreeMouseMode ==# 3 ? "single" : "double") ."-click,\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:NERDTreeMouseMode ==# 1 ? "double" : "single") ."-click,\n"
|
||||||
let help .= "\" ". g:NERDTreeMapActivateNode .": open & close node\n"
|
let help .= "\" ". g:NERDTreeMapActivateNode .": open & close node\n"
|
||||||
let help .= "\" ". g:NERDTreeMapOpenRecursively .": recursively open 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:NERDTreeMapCloseDir .": close parent of node\n"
|
||||||
let help .= "\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n"
|
let help .= "\" ". g:NERDTreeMapCloseChildren .": close all child nodes of\n"
|
||||||
let help .= "\" current node recursively\n"
|
let help .= "\" current node recursively\n"
|
||||||
|
@ -162,20 +164,14 @@ function! s:UI.getPath(ln)
|
||||||
let indent = self._indentLevelFor(line)
|
let indent = self._indentLevelFor(line)
|
||||||
|
|
||||||
"remove the tree parts and the leading space
|
"remove the tree parts and the leading space
|
||||||
let curFile = self._stripMarkup(line, 0)
|
let curFile = self._stripMarkup(line)
|
||||||
|
|
||||||
let wasdir = 0
|
|
||||||
if curFile =~# '/$'
|
|
||||||
let wasdir = 1
|
|
||||||
let curFile = substitute(curFile, '/\?$', '/', "")
|
|
||||||
endif
|
|
||||||
|
|
||||||
let dir = ""
|
let dir = ""
|
||||||
let lnum = a:ln
|
let lnum = a:ln
|
||||||
while lnum > 0
|
while lnum > 0
|
||||||
let lnum = lnum - 1
|
let lnum = lnum - 1
|
||||||
let curLine = getline(lnum)
|
let curLine = getline(lnum)
|
||||||
let curLineStripped = self._stripMarkup(curLine, 1)
|
let curLineStripped = self._stripMarkup(curLine)
|
||||||
|
|
||||||
"have we reached the top of the tree?
|
"have we reached the top of the tree?
|
||||||
if lnum == rootLine
|
if lnum == rootLine
|
||||||
|
@ -226,7 +222,7 @@ function! s:UI.getLineNum(file_node)
|
||||||
|
|
||||||
let indent = self._indentLevelFor(curLine)
|
let indent = self._indentLevelFor(curLine)
|
||||||
if indent ==# curPathComponent
|
if indent ==# curPathComponent
|
||||||
let curLine = self._stripMarkup(curLine, 1)
|
let curLine = self._stripMarkup(curLine)
|
||||||
|
|
||||||
let curPath = join(pathcomponents, '/') . '/' . curLine
|
let curPath = join(pathcomponents, '/') . '/' . curLine
|
||||||
if stridx(fullpath, curPath, 0) ==# 0
|
if stridx(fullpath, curPath, 0) ==# 0
|
||||||
|
@ -364,14 +360,12 @@ function! s:UI.setShowHidden(val)
|
||||||
let self._showHidden = a:val
|
let self._showHidden = a:val
|
||||||
endfunction
|
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
|
"returns the given line with all the tree parts stripped off
|
||||||
"
|
"
|
||||||
"Args:
|
"Args:
|
||||||
"line: the subject line
|
"line: the subject line
|
||||||
"removeLeadingSpaces: 1 if leading spaces are to be removed (leading spaces =
|
function! s:UI._stripMarkup(line)
|
||||||
"any spaces before the actual text of the node)
|
|
||||||
function! s:UI._stripMarkup(line, removeLeadingSpaces)
|
|
||||||
let line = a:line
|
let line = a:line
|
||||||
"remove the tree parts and the leading space
|
"remove the tree parts and the leading space
|
||||||
let line = substitute (line, g:NERDTreeUI.MarkupReg(),"","")
|
let line = substitute (line, g:NERDTreeUI.MarkupReg(),"","")
|
||||||
|
@ -388,18 +382,7 @@ function! s:UI._stripMarkup(line, removeLeadingSpaces)
|
||||||
"strip off any generic flags
|
"strip off any generic flags
|
||||||
let line = substitute (line, '\[[^]]*\]', "","")
|
let line = substitute (line, '\[[^]]*\]', "","")
|
||||||
|
|
||||||
let wasdir = 0
|
|
||||||
if line =~# '/$'
|
|
||||||
let wasdir = 1
|
|
||||||
endif
|
|
||||||
let line = substitute (line,' -> .*',"","") " remove link to
|
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
|
return line
|
||||||
endfunction
|
endfunction
|
||||||
|
|
|
@ -55,7 +55,22 @@ function! s:promptToDelBuffer(bufnum, msg)
|
||||||
" Is not it better to close single tabs with this file only ?
|
" Is not it better to close single tabs with this file only ?
|
||||||
let s:originalTabNumber = tabpagenr()
|
let s:originalTabNumber = tabpagenr()
|
||||||
let s:originalWindowNumber = winnr()
|
let s:originalWindowNumber = winnr()
|
||||||
|
" 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"
|
exec "tabdo windo if winbufnr(0) == " . a:bufnum . " | exec ':enew! ' | endif"
|
||||||
|
endif
|
||||||
exec "tabnext " . s:originalTabNumber
|
exec "tabnext " . s:originalTabNumber
|
||||||
exec s:originalWindowNumber . "wincmd w"
|
exec s:originalWindowNumber . "wincmd w"
|
||||||
" 3. We don't need a previous buffer anymore
|
" 3. We don't need a previous buffer anymore
|
||||||
|
@ -202,24 +217,60 @@ endfunction
|
||||||
" FUNCTION: NERDTreeListNode() {{{1
|
" FUNCTION: NERDTreeListNode() {{{1
|
||||||
function! NERDTreeListNode()
|
function! NERDTreeListNode()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let treenode = g:NERDTreeFileNode.GetSelected()
|
||||||
if treenode != {}
|
if !empty(treenode)
|
||||||
let metadata = split(system('ls -ld ' . shellescape(treenode.path.str())), '\n')
|
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])
|
call nerdtree#echo(metadata[0])
|
||||||
else
|
else
|
||||||
call nerdtree#echo("No information avaialable")
|
call nerdtree#echo("No information available")
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeListNodeWin32() {{{1
|
" FUNCTION: NERDTreeListNodeWin32() {{{1
|
||||||
function! NERDTreeListNodeWin32()
|
function! NERDTreeListNodeWin32()
|
||||||
let treenode = g:NERDTreeFileNode.GetSelected()
|
let l:node = 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')
|
if !empty(l:node)
|
||||||
call nerdtree#echo(metadata[0])
|
|
||||||
else
|
let l:save_shell = &shell
|
||||||
call nerdtree#echo("No information avaialable")
|
set shell&
|
||||||
|
|
||||||
|
if exists('+shellslash')
|
||||||
|
let l:save_shellslash = &shellslash
|
||||||
|
set noshellslash
|
||||||
endif
|
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
|
endfunction
|
||||||
|
|
||||||
" FUNCTION: NERDTreeCopyNode() {{{1
|
" FUNCTION: NERDTreeCopyNode() {{{1
|
||||||
|
|
|
@ -69,7 +69,7 @@ call s:initVariable("g:NERDTreeShowHidden", 0)
|
||||||
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
|
call s:initVariable("g:NERDTreeShowLineNumbers", 0)
|
||||||
call s:initVariable("g:NERDTreeSortDirs", 1)
|
call s:initVariable("g:NERDTreeSortDirs", 1)
|
||||||
|
|
||||||
if !nerdtree#runningWindows()
|
if !nerdtree#runningWindows() && !nerdtree#runningCygwin()
|
||||||
call s:initVariable("g:NERDTreeDirArrowExpandable", "▸")
|
call s:initVariable("g:NERDTreeDirArrowExpandable", "▸")
|
||||||
call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾")
|
call s:initVariable("g:NERDTreeDirArrowCollapsible", "▾")
|
||||||
else
|
else
|
||||||
|
|
BIN
sources_non_forked/nerdtree/screenshot.png
Normal file
BIN
sources_non_forked/nerdtree/screenshot.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 86 KiB |
|
@ -8,7 +8,7 @@ execute "syn match NERDTreeUp #\\V". s:tree_up_dir_line ."#"
|
||||||
"quickhelp syntax elements
|
"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 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 NERDTreeToggleOn #(on)#ms=s+1,he=e-1
|
||||||
syn match NERDTreeToggleOff #(off)#ms=e-3,me=e-1
|
syn match NERDTreeToggleOff #(off)#ms=e-3,me=e-1
|
||||||
syn match NERDTreeHelpCommand #" :.\{-}\>#hs=s+3
|
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
|
"highlighing for directory nodes and file nodes
|
||||||
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
|
syn match NERDTreeDirSlash #/# containedin=NERDTreeDir
|
||||||
|
|
||||||
exec 'syn match NERDTreeClosable #'.escape(g:NERDTreeDirArrowCollapsible, '~').'# containedin=NERDTreeDir,NERDTreeFile'
|
exec 'syn match NERDTreeClosable #' . escape(g:NERDTreeDirArrowCollapsible, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
||||||
exec 'syn match NERDTreeOpenable #'.escape(g:NERDTreeDirArrowExpandable, '~').'# containedin=NERDTreeDir,NERDTreeFile'
|
exec 'syn match NERDTreeOpenable #' . escape(g:NERDTreeDirArrowExpandable, '~') . '\ze .*/# containedin=NERDTreeDir,NERDTreeFile'
|
||||||
|
|
||||||
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
|
let s:dirArrows = escape(g:NERDTreeDirArrowCollapsible, '~]\-').escape(g:NERDTreeDirArrowExpandable, '~]\-')
|
||||||
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
|
exec 'syn match NERDTreeDir #[^'.s:dirArrows.' ].*/#'
|
||||||
|
|
|
@ -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
|
|
||||||
|
|
|
@ -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 <http://wiki.nginx.org/NginxAcceptLanguageModule>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpAccessKeyModule>
|
|
||||||
" 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://web.iti.upv.es/~sto/nginx/>
|
|
||||||
" HTTP Basic Authentication using PAM.
|
|
||||||
syn keyword ngxDirectiveThirdParty auth_pam
|
|
||||||
syn keyword ngxDirectiveThirdParty auth_pam_service_name
|
|
||||||
|
|
||||||
" Cache Purge Module <http://labs.frickle.com/nginx_ngx_cache_purge/>
|
|
||||||
" 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://wiki.nginx.org/NginxHttpChunkinModule>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpCircleGifModule>
|
|
||||||
" 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 <http://github.com/chaoslawful/drizzle-nginx-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 <http://wiki.nginx.org/NginxHttpEchoModule>
|
|
||||||
" 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 <http://docs.dutov.org/nginx_modules_events_en.html>
|
|
||||||
" Privides options for start/stop events.
|
|
||||||
syn keyword ngxDirectiveThirdParty on_start
|
|
||||||
syn keyword ngxDirectiveThirdParty on_stop
|
|
||||||
|
|
||||||
" EY Balancer Module <http://github.com/ry/nginx-ey-balancer>
|
|
||||||
" 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 <https://connectical.com/projects/ngx-fancyindex/wiki>
|
|
||||||
" 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) <http://wiki.nginx.org/NginxHttp3rdPartyGeoIPModule>
|
|
||||||
" Country code lookups via the MaxMind GeoIP API.
|
|
||||||
syn keyword ngxDirectiveThirdParty geoip_country_file
|
|
||||||
|
|
||||||
" Headers More Module <http://wiki.nginx.org/NginxHttpHeadersMoreModule>
|
|
||||||
" 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 <http://pushmodule.slact.net/>
|
|
||||||
" 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 <http://people.FreeBSD.ORG/~osa/ngx_http_redis-0.3.1.tar.gz>>
|
|
||||||
" Redis <http://code.google.com/p/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 <http://wiki.github.com/kung-fu-tzu/ngx_http_js_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 <http://wiki.nginx.org/NginxHttpLogRequestSpeed>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpMemcModule>
|
|
||||||
" 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 <http://www.grid.net.ru/nginx/mogilefs.en.html>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxMP4StreamingLite>
|
|
||||||
" 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 <http://xph.us/software/nginx-notice/>
|
|
||||||
" Serve static file to POST requests.
|
|
||||||
syn keyword ngxDirectiveThirdParty notice
|
|
||||||
syn keyword ngxDirectiveThirdParty notice_type
|
|
||||||
|
|
||||||
" Phusion Passenger <http://www.modrails.com/documentation.html>
|
|
||||||
" 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 <http://github.com/agentzh/rds-json-nginx-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 <http://wiki.nginx.org/NginxNgx_rrd_graph>
|
|
||||||
" This module provides an HTTP interface to RRDtool's graphing facilities.
|
|
||||||
syn keyword ngxDirectiveThirdParty rrd_graph
|
|
||||||
syn keyword ngxDirectiveThirdParty rrd_graph_root
|
|
||||||
|
|
||||||
" Secure Download <http://wiki.nginx.org/NginxHttpSecureDownload>
|
|
||||||
" 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 <http://labs.frickle.com/nginx_ngx_slowfs_cache/>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpStripModule>
|
|
||||||
" Whitespace remover.
|
|
||||||
syn keyword ngxDirectiveThirdParty strip
|
|
||||||
|
|
||||||
" Substitutions Module <http://wiki.nginx.org/NginxHttpSubsModule>
|
|
||||||
" 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 <http://labs.frickle.com/nginx_ngx_supervisord/>
|
|
||||||
" 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 <http://www.grid.net.ru/nginx/upload.en.html>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpUploadProgressModule>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpUpstreamFairModule>
|
|
||||||
" 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 <http://wiki.nginx.org/NginxHttpUpstreamConsistentHash>
|
|
||||||
" Select backend based on Consistent hash ring.
|
|
||||||
syn keyword ngxDirectiveThirdParty consistent_hash
|
|
||||||
|
|
||||||
" Upstream Hash Module <http://wiki.nginx.org/NginxHttpUpstreamRequestHashModule>
|
|
||||||
" Provides simple upstream load distribution by hashing a configurable variable.
|
|
||||||
syn keyword ngxDirectiveThirdParty hash
|
|
||||||
syn keyword ngxDirectiveThirdParty hash_again
|
|
||||||
|
|
||||||
" XSS Module <http://github.com/agentzh/xss-nginx-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 <http://wiki.nginx.org/HttpUwsgiModule>
|
|
||||||
" 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"
|
|
19
sources_non_forked/nginx.vim/CHANGELOG.md
Normal file
19
sources_non_forked/nginx.vim/CHANGELOG.md
Normal file
|
@ -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
|
675
sources_non_forked/nginx.vim/LICENSE
Normal file
675
sources_non_forked/nginx.vim/LICENSE
Normal file
|
@ -0,0 +1,675 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
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 <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
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
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
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
|
||||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
||||||
|
|
92
sources_non_forked/nginx.vim/README.md
Normal file
92
sources_non_forked/nginx.vim/README.md
Normal file
|
@ -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<tab>`: Even-more-secure ciphers (elliptic curves, no GCM), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android != 4.4
|
||||||
|
- **`ciphers-modern<tab>`: High-security ciphers (elliptic curves), not compatible with IE < 11, OpenSSL-0.9.8, Safari < 7, Android < 4.4 (recommended)**
|
||||||
|
- `ciphers-compat<tab>`: Medium-security ciphers with good compatibility (No IE on WinXP) but TLSv1 and SHA required
|
||||||
|
- `ciphers-old<tab>`: Low-security ciphers (using weak DES and SHA ciphers, TLSv1), but compatible with everything but IE6 and Java6
|
||||||
|
- `ssl-options<tab>`: 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<tab>`:
|
||||||
|
```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<tab>` resp. `server<tab>`, 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.
|
|
@ -1,4 +1,5 @@
|
||||||
au BufRead,BufNewFile *.nginx set ft=nginx
|
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 */etc/nginx/* set ft=nginx
|
||||||
au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx
|
au BufRead,BufNewFile */usr/local/nginx/conf/* set ft=nginx
|
||||||
au BufRead,BufNewFile nginx.conf set ft=nginx
|
|
1
sources_non_forked/nginx.vim/ftplugin/nginx.vim
Normal file
1
sources_non_forked/nginx.vim/ftplugin/nginx.vim
Normal file
|
@ -0,0 +1 @@
|
||||||
|
setlocal commentstring=#\ %s
|
166
sources_non_forked/nginx.vim/snippets/nginx.snippets
Normal file
166
sources_non_forked/nginx.vim/snippets/nginx.snippets
Normal file
|
@ -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}}
|
||||||
|
}
|
2304
sources_non_forked/nginx.vim/syntax/nginx.vim
Normal file
2304
sources_non_forked/nginx.vim/syntax/nginx.vim
Normal file
File diff suppressed because it is too large
Load diff
|
@ -61,16 +61,16 @@ Source Language, ActionScript, Ada, Ansible configurations, API Blueprint,
|
||||||
AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C, C++,
|
AppleScript, AsciiDoc, Assembly languages, BEMHTML, Bro, Bourne shell, C, C++,
|
||||||
C#, Cabal, Chef, CMake, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
|
C#, Cabal, Chef, CMake, CoffeeScript, Coco, Coq, CSS, Cucumber, CUDA, D, Dart,
|
||||||
DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata,
|
DocBook, Dockerfile, Dust, Elixir, Erlang, eRuby, Fortran, Gentoo metadata,
|
||||||
GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript,
|
GLSL, Go, Haml, Haskell, Haxe, Handlebars, HSS, HTML, Java, JavaScript, JSON,
|
||||||
JSON, JSX, Julia, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua,
|
JSX, Julia, LESS, Lex, Limbo, LISP, LLVM intermediate language, Lua, Markdown,
|
||||||
Markdown, MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl,
|
MATLAB, Mercury, NASM, Nix, Objective-C, Objective-C++, OCaml, Perl, Perl
|
||||||
Perl POD, PHP, gettext Portable Object, OS X and iOS property lists, Pug
|
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
|
(formerly Jade), Puppet, Python, QML, R, Racket, RDF TriG, RDF Turtle, Relax
|
||||||
NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity,
|
NG, reStructuredText, RPM spec, Ruby, SASS/SCSS, Scala, Slim, SML, Solidity,
|
||||||
Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL,
|
Sphinx, SQL, Stylus, Tcl, TeX, Texinfo, Twig, TypeScript, Vala, Verilog, VHDL,
|
||||||
Vim help, VimL, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models, z80,
|
Vim help, VimL, Vue.js, xHtml, XML, XSLT, XQuery, YACC, YAML, YANG data models,
|
||||||
Zope page templates, and Zsh. See the [manual][checkers] for details about the
|
z80, Zope page templates, and Zsh. See the [manual][checkers] for details about
|
||||||
corresponding supported checkers (`:help syntastic-checkers` in Vim).
|
the corresponding supported checkers (`:help syntastic-checkers` in Vim).
|
||||||
|
|
||||||
A number of third-party Vim plugins also provide checkers for syntastic, for
|
A number of third-party Vim plugins also provide checkers for syntastic, for
|
||||||
example: [merlin][merlin], [omnisharp-vim][omnisharp], [rust.vim][rust],
|
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?__
|
__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],
|
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
|
activate the relevant version of Ruby, and install in it the checkers you want
|
||||||
the checkers you want to use. Set `g:syntastic_ruby_checkers` accordingly in
|
to use. Set `g:syntastic_ruby_checkers` accordingly in your `vimrc`, and run
|
||||||
your `vimrc`, and run [Vim][vim] from the virtual environment.
|
[Vim][vim] under the relevant Ruby version.
|
||||||
|
|
||||||
If you're starting Vim from a desktop manager rather than from a terminal you
|
If you're starting Vim from a desktop manager rather than from a terminal
|
||||||
might need to write wrapper scripts around your checkers, to activate the
|
and depending on the version manager you use you might need to write wrapper
|
||||||
virtual environment before running the actual checks. Then you'll need to
|
scripts around your checkers, to activate the relevant version of Ruby
|
||||||
point the relevant `g:syntastic_ruby_<checker>_exec` variables to the wrapper
|
before running the actual checks. Then you'll need to point the relevant
|
||||||
scripts.
|
`g:syntastic_ruby_<checker>_exec` variables to the wrapper scripts.
|
||||||
|
|
||||||
<a name="faqperl"></a>
|
<a name="faqperl"></a>
|
||||||
|
|
||||||
|
|
|
@ -65,6 +65,17 @@ function! syntastic#postprocess#guards(errors) abort " {{{2
|
||||||
return a:errors
|
return a:errors
|
||||||
endfunction " }}}2
|
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
|
" }}}1
|
||||||
|
|
||||||
let &cpo = s:save_cpo
|
let &cpo = s:save_cpo
|
||||||
|
|
|
@ -264,6 +264,43 @@ function! syntastic#preprocess#perl(errors) abort " {{{2
|
||||||
return syntastic#util#unique(out)
|
return syntastic#util#unique(out)
|
||||||
endfunction " }}}2
|
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
|
function! syntastic#preprocess#prospector(errors) abort " {{{2
|
||||||
let errs = join(a:errors, '')
|
let errs = join(a:errors, '')
|
||||||
if errs ==# ''
|
if errs ==# ''
|
||||||
|
|
|
@ -253,7 +253,7 @@ endfunction " }}}2
|
||||||
function! syntastic#util#findFileInParent(what, where) abort " {{{2
|
function! syntastic#util#findFileInParent(what, where) abort " {{{2
|
||||||
let old_suffixesadd = &suffixesadd
|
let old_suffixesadd = &suffixesadd
|
||||||
let &suffixesadd = ''
|
let &suffixesadd = ''
|
||||||
let file = findfile(a:what, escape(a:where, ' ') . ';')
|
let file = findfile(a:what, escape(a:where, ' ,') . ';')
|
||||||
let &suffixesadd = old_suffixesadd
|
let &suffixesadd = old_suffixesadd
|
||||||
return file
|
return file
|
||||||
endfunction " }}}2
|
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)
|
" this is a best-effort attempt to escape file patterns (cf. :h file-pattern)
|
||||||
" XXX it fails for filenames containing something like \{2,3}
|
" XXX it fails for filenames containing something like \{2,3}
|
||||||
|
let buf = -1
|
||||||
for md in [':~:.', ':~', ':p']
|
for md in [':~:.', ':~', ':p']
|
||||||
|
try
|
||||||
|
" Older versions of Vim can throw E94 here
|
||||||
let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$')
|
let buf = bufnr('^' . escape(fnamemodify(a:fname, md), '\*?,{}[') . '$')
|
||||||
|
catch
|
||||||
|
" catch everything
|
||||||
|
endtry
|
||||||
if buf != -1
|
if buf != -1
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -70,7 +70,7 @@ CONTENTS *syntastic-contents*
|
||||||
1. Intro *syntastic-intro*
|
1. Intro *syntastic-intro*
|
||||||
|
|
||||||
Syntastic is a syntax checking plugin that runs files through external syntax
|
Syntastic is a syntax checking plugin that runs files through external syntax
|
||||||
checkers. This can be done on demand, or automatically as files are saved
|
linters. This can be done on demand, or automatically as files are saved
|
||||||
and opened. If syntax errors are detected, the user is notified and is happy
|
and opened. If syntax errors are detected, the user is notified and is happy
|
||||||
because they didn't have to compile their code or execute their script to find
|
because they didn't have to compile their code or execute their script to find
|
||||||
them.
|
them.
|
||||||
|
@ -83,7 +83,7 @@ plugins and uses their output to provide the syntastic functionality.
|
||||||
Take a look at the list of supported filetypes and checkers: |syntastic-checkers|.
|
Take a look at the list of supported filetypes and checkers: |syntastic-checkers|.
|
||||||
|
|
||||||
Note: This doc only deals with using syntastic. To learn how to write syntax
|
Note: This doc only deals with using syntastic. To learn how to write syntax
|
||||||
checker integrations, see the guide on the GitHub wiki:
|
checker integrations see the guide on the GitHub wiki:
|
||||||
|
|
||||||
https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide
|
https://github.com/vim-syntastic/syntastic/wiki/Syntax-Checker-Guide
|
||||||
|
|
||||||
|
@ -98,7 +98,7 @@ You can see the list of checkers available for the current filetype with the
|
||||||
`:SyntasticInfo` command.
|
`:SyntasticInfo` command.
|
||||||
|
|
||||||
You probably want to override the configured list of checkers for the
|
You probably want to override the configured list of checkers for the
|
||||||
filetypes you use, and also change the arguments passed to specific checkers
|
filetypes you use, and also change the arguments passed to specific linters
|
||||||
to suit your needs. See |syntastic-checker-options| below for details.
|
to suit your needs. See |syntastic-checker-options| below for details.
|
||||||
|
|
||||||
Use `:SyntasticCheck` to manually check right now. Use `:Errors` to open the
|
Use `:SyntasticCheck` to manually check right now. Use `:Errors` to open the
|
||||||
|
@ -143,7 +143,7 @@ activate/deactivate these features.
|
||||||
* The |location-list| can be populated with the errors for the associated
|
* The |location-list| can be populated with the errors for the associated
|
||||||
buffer
|
buffer
|
||||||
* Erroneous parts of lines can be highlighted (this functionality is only
|
* Erroneous parts of lines can be highlighted (this functionality is only
|
||||||
provided by some syntax checkers)
|
provided by some checkers)
|
||||||
* Balloons (if the |+balloon_eval| feature is compiled in) can be used to
|
* Balloons (if the |+balloon_eval| feature is compiled in) can be used to
|
||||||
display error messages for erroneous lines when hovering the mouse over
|
display error messages for erroneous lines when hovering the mouse over
|
||||||
them
|
them
|
||||||
|
@ -224,7 +224,7 @@ update the |location-list| automatically.
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
2.4. Error highlighting *syntastic-highlighting*
|
2.4. Error highlighting *syntastic-highlighting*
|
||||||
|
|
||||||
Some checkers provide enough information for syntastic to be able to highlight
|
Some linters provide enough information for syntastic to be able to highlight
|
||||||
errors. By default the SpellBad syntax highlight group is used to color errors,
|
errors. By default the SpellBad syntax highlight group is used to color errors,
|
||||||
and the SpellCap group is used for warnings. If you wish to customize the
|
and the SpellCap group is used for warnings. If you wish to customize the
|
||||||
colors for highlighting you can use the following groups:
|
colors for highlighting you can use the following groups:
|
||||||
|
@ -611,8 +611,8 @@ There are also checker-specific variants of this option, providing finer
|
||||||
control. They are named |'syntastic_<filetype>_<checker>_quiet_messages'|.
|
control. They are named |'syntastic_<filetype>_<checker>_quiet_messages'|.
|
||||||
|
|
||||||
For a particular checker, if both a |'syntastic_quiet_messages'| filter and
|
For a particular checker, if both a |'syntastic_quiet_messages'| filter and
|
||||||
a checker-specific filter are present, they are both applied (to the list of
|
a checker-specific filter are present, they are both applied to the list of
|
||||||
errors produced by the said checker). In case of conflicting values for the
|
errors produced by the said checker. In case of conflicting values for the
|
||||||
same keys, the values of the checker-specific filters take precedence.
|
same keys, the values of the checker-specific filters take precedence.
|
||||||
|
|
||||||
*filter-overrides*
|
*filter-overrides*
|
||||||
|
@ -685,15 +685,15 @@ should be safe.
|
||||||
*'syntastic_exit_checks'*
|
*'syntastic_exit_checks'*
|
||||||
Type: boolean
|
Type: boolean
|
||||||
Default: 0 when running under "cmd.exe" on Windows, 1 otherwise
|
Default: 0 when running under "cmd.exe" on Windows, 1 otherwise
|
||||||
Syntastic attempts to catch abnormal termination conditions from checkers by
|
Syntastic attempts to catch abnormal termination conditions from linters by
|
||||||
looking at their exit codes. The "cmd.exe" shell on Windows make these checks
|
looking at their exit codes. The "cmd.exe" shell on Windows make these checks
|
||||||
meaningless, by returning 1 to Vim when the checkers exit with non-zero codes.
|
meaningless, by returning 1 to Vim when the linters exit with non-zero codes.
|
||||||
The above variable can be used to disable exit code checks in syntastic.
|
The above variable can be used to disable exit code checks in syntastic.
|
||||||
|
|
||||||
*'syntastic_shell'*
|
*'syntastic_shell'*
|
||||||
Type: string
|
Type: string
|
||||||
Default: Vim's 'shell'
|
Default: Vim's 'shell'
|
||||||
This is the (full path to) the shell syntastic will use to run the checkers.
|
This is the (full path to) the shell syntastic will use to run the linters.
|
||||||
On UNIX and Mac OS-X this shell must accept Bourne-compatible syntax for
|
On UNIX and Mac OS-X this shell must accept Bourne-compatible syntax for
|
||||||
file "stdout" and "stderr" redirections ">file" and "2>file". Examples of
|
file "stdout" and "stderr" redirections ">file" and "2>file". Examples of
|
||||||
compatible shells are "zsh", "bash", "ksh", and of course the original Bourne
|
compatible shells are "zsh", "bash", "ksh", and of course the original Bourne
|
||||||
|
@ -701,7 +701,7 @@ compatible shells are "zsh", "bash", "ksh", and of course the original Bourne
|
||||||
|
|
||||||
This shell is independent of Vim's 'shell', and it isn't used for interactive
|
This shell is independent of Vim's 'shell', and it isn't used for interactive
|
||||||
operations. It must take care to initialize all environment variables needed
|
operations. It must take care to initialize all environment variables needed
|
||||||
by the checkers you're using. Example: >
|
by the linters you're using. Example: >
|
||||||
let g:syntastic_shell = "/bin/sh"
|
let g:syntastic_shell = "/bin/sh"
|
||||||
<
|
<
|
||||||
*'syntastic_nested_autocommands'*
|
*'syntastic_nested_autocommands'*
|
||||||
|
@ -769,7 +769,7 @@ use this in an autocmd to configure specific checkers for particular paths: >
|
||||||
\ let b:syntastic_checkers = ["pylint"] | endif
|
\ let b:syntastic_checkers = ["pylint"] | endif
|
||||||
<
|
<
|
||||||
If neither |'g:syntastic_<filetype>_checkers'| nor |'b:syntastic_checkers'|
|
If neither |'g:syntastic_<filetype>_checkers'| nor |'b:syntastic_checkers'|
|
||||||
is set, a default list of checker is used. Beware however that this list
|
is set a default list of checkers is used. Beware however that this list is
|
||||||
deliberately kept minimal, for performance reasons.
|
deliberately kept minimal, for performance reasons.
|
||||||
|
|
||||||
You can specify checkers for other filetypes anywhere in these lists, by
|
You can specify checkers for other filetypes anywhere in these lists, by
|
||||||
|
@ -801,7 +801,7 @@ takes precedence over both 'b:syntastic_<filetype>_<checker>_exec' and
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
5.3. Configuring specific checkers *syntastic-config-makeprg*
|
5.3. Configuring specific checkers *syntastic-config-makeprg*
|
||||||
|
|
||||||
Checkers are run by constructing a command line and by passing it to a shell
|
Linters are run by constructing a command line and by passing it to a shell
|
||||||
(see |'shell'| and |'syntastic_shell'|). In most cases this command line is
|
(see |'shell'| and |'syntastic_shell'|). In most cases this command line is
|
||||||
built using an internal function named "makeprgBuild()", which provides a
|
built using an internal function named "makeprgBuild()", which provides a
|
||||||
number of options that allow you to customise every part of the command that
|
number of options that allow you to customise every part of the command that
|
||||||
|
@ -855,7 +855,7 @@ empty, you can set it to an empty string, e.g.: >
|
||||||
*'syntastic_<filetype>_<checker>_exe'*
|
*'syntastic_<filetype>_<checker>_exe'*
|
||||||
The 'exe' option is special. Normally it is the same as the 'exec' attribute
|
The 'exe' option is special. Normally it is the same as the 'exec' attribute
|
||||||
described above, but you can use it to add environment variables to the
|
described above, but you can use it to add environment variables to the
|
||||||
command line, or to change the way the checker is run. For example this setup
|
command line, or to change the way the linter is run. For example this setup
|
||||||
allows you to run PC-Lint on Linux, under Wine emulation: >
|
allows you to run PC-Lint on Linux, under Wine emulation: >
|
||||||
let g:syntastic_c_pc_lint_exec = "wine"
|
let g:syntastic_c_pc_lint_exec = "wine"
|
||||||
let g:syntastic_c_pc_lint_exe = "wine c:/path/to/lint-nt.exe"
|
let g:syntastic_c_pc_lint_exe = "wine c:/path/to/lint-nt.exe"
|
||||||
|
@ -911,7 +911,7 @@ The syntax is of course identical to that of |syntastic_quiet_messages|.
|
||||||
*syntastic-debug*
|
*syntastic-debug*
|
||||||
|
|
||||||
Syntastic can log a trace of its working to Vim's |message-history|. To verify
|
Syntastic can log a trace of its working to Vim's |message-history|. To verify
|
||||||
the command line constructed by syntastic to run a checker, set the variable
|
the command line constructed by syntastic to run a linter, set the variable
|
||||||
|'syntastic_debug'| to a non-zero value, run the checker, then run `:mes` to
|
|'syntastic_debug'| to a non-zero value, run the checker, then run `:mes` to
|
||||||
display the messages, and look for "makeprg" in the output.
|
display the messages, and look for "makeprg" in the output.
|
||||||
|
|
||||||
|
@ -919,7 +919,7 @@ From a user's perspective, the useful values for |'syntastic_debug'| are 1, 3,
|
||||||
and 33:
|
and 33:
|
||||||
|
|
||||||
1 - logs syntastic's workflow
|
1 - logs syntastic's workflow
|
||||||
3 - logs workflow, checker's output, and |location-list| manipulations
|
3 - logs workflow, linter's output, and |location-list| manipulations
|
||||||
33 - logs workflow and checker-specific details (such as version checks).
|
33 - logs workflow and checker-specific details (such as version checks).
|
||||||
|
|
||||||
Debug logs can be saved to a file; see |'syntastic_debug_file'| for details.
|
Debug logs can be saved to a file; see |'syntastic_debug_file'| for details.
|
||||||
|
@ -962,7 +962,7 @@ composite filetypes to simple ones using |'syntastic_filetype_map'|, e.g.: >
|
||||||
The standard plugin |netrw| allows Vim to transparently edit files over
|
The standard plugin |netrw| allows Vim to transparently edit files over
|
||||||
network and inside archives. Currently syntastic doesn't support this mode
|
network and inside archives. Currently syntastic doesn't support this mode
|
||||||
of operation. It can only check files that can be accessed directly by local
|
of operation. It can only check files that can be accessed directly by local
|
||||||
checkers, without any translation or conversion.
|
linters, without any translation or conversion.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
6.3. The 'shellslash' option *syntastic-shellslash*
|
6.3. The 'shellslash' option *syntastic-shellslash*
|
||||||
|
@ -1015,11 +1015,18 @@ also affect window sizes.)
|
||||||
7.1. airline *syntastic-airline*
|
7.1. airline *syntastic-airline*
|
||||||
|
|
||||||
The "airline" Vim plugin (https://github.com/vim-airline/vim-airline) comes
|
The "airline" Vim plugin (https://github.com/vim-airline/vim-airline) comes
|
||||||
packaged with a mechanism of showing flags on the |'statusline'| according
|
with an extension for showing syntastic-related flags on the |'statusline'|.
|
||||||
to your |'syntastic_stl_format'|. When using this plugin you do NOT need to
|
|
||||||
follow the recommendation outlined in the |syntastic-statusline-flag| section
|
"airline" versions v0.8 and earlier use |'syntastic_stl_format'| to format the
|
||||||
above to modify your |'statusline'|; "airline" will make all necessary changes
|
|'statusline'| flags. Newer versions ignore |'syntastic_stl_format'|, and require
|
||||||
automatically.
|
you to set variables 'airline#extensions#syntastic#stl_format_err' and
|
||||||
|
'airline#extensions#syntastic#stl_format_warn' separately for errors and
|
||||||
|
warnings (with the same syntax as |'syntastic_stl_format'|) if you want to
|
||||||
|
change the flags from the defaults.
|
||||||
|
|
||||||
|
When using "airline" you should NOT follow the recommendation outlined in
|
||||||
|
the |syntastic-statusline-flag| section above to modify your |'statusline'|.
|
||||||
|
"airline" shall make all necessary changes automatically.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
7.2. The csh and tcsh shells *syntastic-csh*
|
7.2. The csh and tcsh shells *syntastic-csh*
|
||||||
|
@ -1159,7 +1166,7 @@ stick with |quickfix| lists: >
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
7.14. vim-virtualenv *syntastic-vim-virtualenv*
|
7.14. vim-virtualenv *syntastic-vim-virtualenv*
|
||||||
|
|
||||||
At the time of this writing, syntastic can't run checkers installed
|
At the time of this writing, syntastic can't run linters installed
|
||||||
in Python virtual environments activated by "vim-virtualenv" (see
|
in Python virtual environments activated by "vim-virtualenv" (see
|
||||||
https://github.com/jmcantrell/vim-virtualenv). This is a limitation of
|
https://github.com/jmcantrell/vim-virtualenv). This is a limitation of
|
||||||
"vim-virtualenv".
|
"vim-virtualenv".
|
||||||
|
@ -1181,7 +1188,7 @@ have to set |g:ycm_show_diagnostics_ui| to 0. E.g.: >
|
||||||
If you're running MacVim together with the "zsh" shell (http://www.zsh.org/)
|
If you're running MacVim together with the "zsh" shell (http://www.zsh.org/)
|
||||||
you need to be aware that MacVim does not source your .zshrc file, but will
|
you need to be aware that MacVim does not source your .zshrc file, but will
|
||||||
source a .zshenv file. Consequently you have to move any setup steps relevant
|
source a .zshenv file. Consequently you have to move any setup steps relevant
|
||||||
to the checkers you're using from .zshrc to .zshenv, otherwise your checkers
|
to the linters you're using from .zshrc to .zshenv, otherwise your linters
|
||||||
will misbehave when run by syntastic. This is particularly important for
|
will misbehave when run by syntastic. This is particularly important for
|
||||||
programs such as "rvm" (https://rvm.io/) or "rbenv" (http://rbenv.org/), that
|
programs such as "rvm" (https://rvm.io/) or "rbenv" (http://rbenv.org/), that
|
||||||
rely on setting environment variables.
|
rely on setting environment variables.
|
||||||
|
|
|
@ -19,7 +19,7 @@ if has('reltime')
|
||||||
lockvar! g:_SYNTASTIC_START
|
lockvar! g:_SYNTASTIC_START
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let g:_SYNTASTIC_VERSION = '3.8.0-60'
|
let g:_SYNTASTIC_VERSION = '3.8.0-97'
|
||||||
lockvar g:_SYNTASTIC_VERSION
|
lockvar g:_SYNTASTIC_VERSION
|
||||||
|
|
||||||
" Sanity checks {{{1
|
" Sanity checks {{{1
|
||||||
|
|
|
@ -68,6 +68,7 @@ let s:_DEFAULT_CHECKERS = {
|
||||||
\ 'objcpp': ['gcc'],
|
\ 'objcpp': ['gcc'],
|
||||||
\ 'ocaml': ['camlp4o'],
|
\ 'ocaml': ['camlp4o'],
|
||||||
\ 'perl': ['perlcritic'],
|
\ 'perl': ['perlcritic'],
|
||||||
|
\ 'perl6': [],
|
||||||
\ 'php': ['php', 'phpcs', 'phpmd'],
|
\ 'php': ['php', 'phpcs', 'phpmd'],
|
||||||
\ 'po': ['msgfmt'],
|
\ 'po': ['msgfmt'],
|
||||||
\ 'pod': ['podchecker'],
|
\ 'pod': ['podchecker'],
|
||||||
|
@ -103,6 +104,7 @@ let s:_DEFAULT_CHECKERS = {
|
||||||
\ 'verilog': ['verilator'],
|
\ 'verilog': ['verilator'],
|
||||||
\ 'vhdl': ['ghdl'],
|
\ 'vhdl': ['ghdl'],
|
||||||
\ 'vim': ['vimlint'],
|
\ 'vim': ['vimlint'],
|
||||||
|
\ 'vue': ['pug_lint_vue', 'eslint'],
|
||||||
\ 'xhtml': ['tidy'],
|
\ 'xhtml': ['tidy'],
|
||||||
\ 'xml': ['xmllint'],
|
\ 'xml': ['xmllint'],
|
||||||
\ 'xslt': ['xmllint'],
|
\ 'xslt': ['xmllint'],
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: ada.vim
|
"File: ada.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Alfredo Di Napoli <alfredo.dinapoli@gmail.com>
|
"Maintainer: Alfredo Di Napoli <alfredo.dinapoli@gmail.com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law.
|
" to the extent permitted by applicable law.
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: ansible_lint.vim
|
"File: ansible_lint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Erik Zaadi <erik.zaadi at gmail dot com>
|
"Maintainer: Erik Zaadi <erik.zaadi at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: drafter.vim
|
"File: drafter.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"==============================================================================
|
"==============================================================================
|
||||||
" FileName: applescript.vim
|
" FileName: applescript.vim
|
||||||
" Desc: Syntax checking plugin for syntastic.vim
|
" Desc: Syntax checking plugin for syntastic
|
||||||
" Author: Zhao Cai
|
" Author: Zhao Cai
|
||||||
" Email: caizhaoff@gmail.com
|
" Email: caizhaoff@gmail.com
|
||||||
" Version: 0.2.1
|
" Version: 0.2.1
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: asciidoc.vim
|
"File: asciidoc.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: bemhtmllint.vim
|
"File: bemhtmllint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Sergej Tatarincev <s.tatarincev at yandex.ua>
|
"Maintainer: Sergej Tatarincev <s.tatarincev at yandex.ua>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: bro.vim
|
"File: bro.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Justin Azoff <justin.azoff@gmail.com>
|
"Maintainer: Justin Azoff <justin.azoff@gmail.com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: checkpatch.vim
|
"File: checkpatch.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using checkpatch.pl
|
"Description: Syntax checking plugin for syntastic using checkpatch.pl
|
||||||
"Maintainer: Daniel Walker <dwalker at fifo99 dot com>
|
"Maintainer: Daniel Walker <dwalker at fifo99 dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: clang_check.vim
|
"File: clang_check.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: clang_tidy.vim
|
"File: clang_tidy.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cppcheck.vim
|
"File: cppcheck.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using cppcheck.pl
|
"Description: Syntax checking plugin for syntastic using cppcheck.pl
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: c.vim
|
"File: c.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: make.vim
|
"File: make.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: oclint.vim
|
"File: oclint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: "UnCO" Lin <undercooled aT lavabit com>
|
"Maintainer: "UnCO" Lin <undercooled aT lavabit com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: pc_lint.vim
|
"File: pc_lint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Steve Bragg <steve at empresseffects dot com>
|
"Maintainer: Steve Bragg <steve at empresseffects dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: sparse.vim
|
"File: sparse.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using sparse.pl
|
"Description: Syntax checking plugin for syntastic using sparse.pl
|
||||||
"Maintainer: Daniel Walker <dwalker at fifo99 dot com>
|
"Maintainer: Daniel Walker <dwalker at fifo99 dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: splint.vim
|
"File: splint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: foodcritic.vim
|
"File: foodcritic.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Doug Ireton <dougireton@gmail.com>
|
"Maintainer: Doug Ireton <dougireton@gmail.com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: co.vim
|
"File: co.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Andrew Kelley <superjoe30@gmail.com>
|
"Maintainer: Andrew Kelley <superjoe30@gmail.com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cobc.vim
|
"File: cobc.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
@ -33,7 +33,7 @@ endfunction
|
||||||
|
|
||||||
function! SyntaxCheckers_cobol_cobc_GetLocList() dict
|
function! SyntaxCheckers_cobol_cobc_GetLocList() dict
|
||||||
return syntastic#c#GetLocList('cobol', 'cobc', {
|
return syntastic#c#GetLocList('cobol', 'cobc', {
|
||||||
\ 'errorformat': '%f:%l: %trror: %m',
|
\ 'errorformat': '%f:%\s%#%l: %trror: %m',
|
||||||
\ 'main_flags': '-fsyntax-only' })
|
\ 'main_flags': '-fsyntax-only' })
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: coffee.vim
|
"File: coffee.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Lincoln Stoll <l@lds.li>
|
"Maintainer: Lincoln Stoll <l@lds.li>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: coffeelint.vim
|
"File: coffeelint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Lincoln Stoll <l@lds.li>
|
"Maintainer: Lincoln Stoll <l@lds.li>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: coqtop.vim
|
"File: coqtop.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Matvey Aksenov <matvey.aksenov at gmail dot com>
|
"Maintainer: Matvey Aksenov <matvey.aksenov at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: clang_check.vim
|
"File: clang_check.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: clang_tidy.vim
|
"File: clang_tidy.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
"Maintainer: Benjamin Bannier <bbannier at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cppcheck.vim
|
"File: cppcheck.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using cppcheck.pl
|
"Description: Syntax checking plugin for syntastic using cppcheck.pl
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cpplint.vim
|
"File: cpplint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cpp.vim
|
"File: cpp.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
"Maintainer: Gregor Uhlenheuer <kongo2002 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: oclint.vim
|
"File: oclint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: "UnCO" Lin <undercooled aT lavabit com>
|
"Maintainer: "UnCO" Lin <undercooled aT lavabit com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: pc_lint.vim
|
"File: pc_lint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Steve Bragg <steve at empresseffects dot com>
|
"Maintainer: Steve Bragg <steve at empresseffects dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: verapp.vim
|
"File: verapp.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Lucas Verney <phyks@phyks.me>
|
"Maintainer: Lucas Verney <phyks@phyks.me>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cs.vim
|
"File: cs.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Daniel Walker <dwalker@fifo99.com>
|
"Maintainer: Daniel Walker <dwalker@fifo99.com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: css.vim
|
"File: css.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using `csslint` CLI tool (http://csslint.net).
|
"Description: Syntax checking plugin for syntastic using `csslint` CLI tool (http://csslint.net).
|
||||||
"Maintainer: Ory Band <oryband at gmail dot com>
|
"Maintainer: Ory Band <oryband at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: phpcs.vim
|
"File: phpcs.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: prettycss.vim
|
"File: prettycss.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
"Maintainer: LCD 47 <lcd047 at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: recess.vim
|
"File: recess.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using `recess`
|
"Description: Syntax checking plugin for syntastic using `recess`
|
||||||
" (http://twitter.github.io/recess/).
|
" (http://twitter.github.io/recess/).
|
||||||
"Maintainer: Tim Carry <tim at pixelastic dot com>
|
"Maintainer: Tim Carry <tim at pixelastic dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: stylelint.vim
|
"File: stylelint.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim using `stylelint`
|
"Description: Syntax checking plugin for syntastic using `stylelint`
|
||||||
" (https://github.com/stylelint/stylelint).
|
" (https://github.com/stylelint/stylelint).
|
||||||
"Maintainer: Tim Carry <tim at pixelastic dot com>
|
"Maintainer: Tim Carry <tim at pixelastic dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
|
@ -21,6 +21,8 @@ set cpo&vim
|
||||||
|
|
||||||
let s:args_after = {
|
let s:args_after = {
|
||||||
\ 'css': '-f json',
|
\ 'css': '-f json',
|
||||||
|
\ 'html': '-f json',
|
||||||
|
\ 'less': '-f json -s less',
|
||||||
\ 'scss': '-f json -s scss' }
|
\ 'scss': '-f json -s scss' }
|
||||||
|
|
||||||
function! SyntaxCheckers_css_stylelint_GetLocList() dict
|
function! SyntaxCheckers_css_stylelint_GetLocList() dict
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
"============================================================================
|
"============================================================================
|
||||||
"File: cucumber.vim
|
"File: cucumber.vim
|
||||||
"Description: Syntax checking plugin for syntastic.vim
|
"Description: Syntax checking plugin for syntastic
|
||||||
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
"Maintainer: Martin Grenfell <martin.grenfell at gmail dot com>
|
||||||
"License: This program is free software. It comes without any warranty,
|
"License: This program is free software. It comes without any warranty,
|
||||||
" to the extent permitted by applicable law. You can redistribute
|
" to the extent permitted by applicable law. You can redistribute
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue