" Location: plugin/vinegar.vim
" Maintainer: Tim Pope
" Version: 1.0
" GetLatestVimScripts: 5671 1 :AutoInstall: vinegar.vim
if exists("g:loaded_vinegar") || v:version < 700 || &cp
finish
endif
let g:loaded_vinegar = 1
function! s:fnameescape(file) abort
if exists('*fnameescape')
return fnameescape(a:file)
else
return escape(a:file," \t\n*?[{`$\\%#'\"|!<")
endif
endfunction
let s:dotfiles = '\(^\|\s\s\)\zs\.\S\+'
let s:escape = 'substitute(escape(v:val, ".$~"), "*", ".*", "g")'
let g:netrw_list_hide =
\ join(map(split(&wildignore, ','), '"^".' . s:escape . '. "/\\=$"'), ',') . ',^\.\.\=/\=$' .
\ (get(g:, 'netrw_list_hide', '')[-strlen(s:dotfiles)-1:-1] ==# s:dotfiles ? ','.s:dotfiles : '')
if !exists("g:netrw_banner")
let g:netrw_banner = 0
endif
unlet! s:netrw_up
nnoremap VinegarUp :call opendir('edit')
if empty(maparg('-', 'n')) && !hasmapto('VinegarUp')
nmap - VinegarUp
endif
nnoremap VinegarTabUp :call opendir('tabedit')
nnoremap VinegarSplitUp :call opendir('split')
nnoremap VinegarVerticalSplitUp :call opendir('vsplit')
function! s:sort_sequence(suffixes) abort
return '[\/]$,*' . (empty(a:suffixes) ? '' : ',\%(' .
\ join(map(split(a:suffixes, ','), 'escape(v:val, ".*$~")'), '\|') . '\)[*@]\=$')
endfunction
let g:netrw_sort_sequence = s:sort_sequence(&suffixes)
function! s:opendir(cmd) abort
let df = ','.s:dotfiles
if expand('%:t')[0] ==# '.' && g:netrw_list_hide[-strlen(df):-1] ==# df
let g:netrw_list_hide = g:netrw_list_hide[0 : -strlen(df)-1]
endif
if &filetype ==# 'netrw' && len(s:netrw_up)
let basename = fnamemodify(b:netrw_curdir, ':t')
execute s:netrw_up
call s:seek(basename)
elseif expand('%') =~# '^$\|^term:[\/][\/]'
execute a:cmd '.'
else
execute a:cmd '%:h' . (expand('%:p') =~# '^\a\a\+:' ? s:slash() : '')
call s:seek(expand('#:t'))
endif
endfunction
function! s:seek(file) abort
if get(b:, 'netrw_liststyle') == 2
let pattern = '\%(^\|\s\+\)\zs'.escape(a:file, '.*[]~\').'[/*|@=]\=\%($\|\s\+\)'
else
let pattern = '^\%(| \)*'.escape(a:file, '.*[]~\').'[/*|@=]\=\%($\|\t\)'
endif
call search(pattern, 'wc')
return pattern
endfunction
augroup vinegar
autocmd!
autocmd FileType netrw call s:setup_vinegar()
if exists('##OptionSet')
autocmd OptionSet suffixes
\ if s:sort_sequence(v:option_old) ==# get(g:, 'netrw_sort_sequence') |
\ let g:netrw_sort_sequence = s:sort_sequence(v:option_new) |
\ endif
endif
augroup END
function! s:slash() abort
return !exists("+shellslash") || &shellslash ? '/' : '\'
endfunction
function! s:absolutes(first, ...) abort
let files = getline(a:first, a:0 ? a:1 : a:first)
call filter(files, 'v:val !~# "^\" "')
call map(files, "substitute(v:val, '^\\(| \\)*', '', '')")
call map(files, 'b:netrw_curdir . s:slash() . substitute(v:val, "[/*|@=]\\=\\%(\\t.*\\)\\=$", "", "")')
return files
endfunction
function! s:relatives(first, ...) abort
let files = s:absolutes(a:first, a:0 ? a:1 : a:first)
call filter(files, 'v:val !~# "^\" "')
for i in range(len(files))
let relative = fnamemodify(files[i], ':.')
if relative !=# files[i]
let files[i] = '.' . s:slash() . relative
endif
endfor
return files
endfunction
function! s:escaped(first, last) abort
let files = s:relatives(a:first, a:last)
return join(map(files, 's:fnameescape(v:val)'), ' ')
endfunction
" 97f3fbc9596f3997ebf8e30bfdd00ebb34597722
function! s:setup_vinegar() abort
if !exists('s:netrw_up')
let orig = maparg('-', 'n')
if orig =~? '^' && orig !=# 'VinegarUp'
let s:netrw_up = 'execute "normal \'.substitute(orig, ' *$', '', '').'"'
elseif orig =~# '^:'
" :exe "norm! 0"|call netrw#LocalBrowseCheck(123_NetrwBrowseChgDir(1,'../'))
let s:netrw_up = substitute(orig, '\c^:\%(\)\=\|$', '', 'g')
else
let s:netrw_up = ''
endif
endif
nmap - VinegarUp
cnoremap get(relatives('.'),0,"\022\006")
if empty(maparg('', 'c'))
cmap
endif
nnoremap ~ :edit ~/
nnoremap . : =escaped(line('.'), line('.') - 1 + v:count1)
xnoremap . : =escaped(line("'<"), line("'>"))
if empty(mapcheck('y.', 'n'))
nnoremap y. :call setreg(v:register, join(absolutes(line('.'), line('.') - 1 + v:count1), "\n")."\n")
endif
nmap ! .!
xmap ! .!
exe 'syn match netrwSuffixes =\%(\S\+ \)*\S\+\%('.join(map(split(&suffixes, ','), s:escape), '\|') . '\)[*@]\=\S\@!='
hi def link netrwSuffixes SpecialKey
endfunction