" 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