diff options
author | bnewbold <bnewbold@robocracy.org> | 2010-04-23 01:17:01 -0400 |
---|---|---|
committer | bnewbold <bnewbold@robocracy.org> | 2010-04-23 01:17:01 -0400 |
commit | 5c4dfeb2e15fea395abda5027e92e2a013b1aaf0 (patch) | |
tree | d13d215392aad5b47a2e8616f6bf47e773956286 | |
parent | 0bf28391b00b1e28c44324bcd7647df416314667 (diff) | |
download | openwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.tar.gz openwrt-repro-5c4dfeb2e15fea395abda5027e92e2a013b1aaf0.zip |
new vim stuff
-rw-r--r-- | .vim/plugin/kwbd.vim | 65 | ||||
-rw-r--r-- | .vim/plugin/vtreeexplorer.vim | 872 |
2 files changed, 65 insertions, 872 deletions
diff --git a/.vim/plugin/kwbd.vim b/.vim/plugin/kwbd.vim new file mode 100644 index 0000000..bff8cdd --- /dev/null +++ b/.vim/plugin/kwbd.vim @@ -0,0 +1,65 @@ +"here is a more exotic version of my original Kwbd script +"delete the buffer; keep windows; create a scratch buffer if no buffers left +function s:Kwbd(kwbdStage) + if(a:kwbdStage == 1) + if(!buflisted(winbufnr(0))) + bd! + return + endif + let s:kwbdBufNum = bufnr("%") + let s:kwbdWinNum = winnr() + windo call s:Kwbd(2) + execute s:kwbdWinNum . 'wincmd w' + let s:buflistedLeft = 0 + let s:bufFinalJump = 0 + let l:nBufs = bufnr("$") + let l:i = 1 + while(l:i <= l:nBufs) + if(l:i != s:kwbdBufNum) + if(buflisted(l:i)) + let s:buflistedLeft = s:buflistedLeft + 1 + else + if(bufexists(l:i) && !strlen(bufname(l:i)) && !s:bufFinalJump) + let s:bufFinalJump = l:i + endif + endif + endif + let l:i = l:i + 1 + endwhile + if(!s:buflistedLeft) + if(s:bufFinalJump) + windo if(buflisted(winbufnr(0))) | execute "b! " . s:bufFinalJump | endif + else + enew + let l:newBuf = bufnr("%") + windo if(buflisted(winbufnr(0))) | execute "b! " . l:newBuf | endif + endif + execute s:kwbdWinNum . 'wincmd w' + endif + if(buflisted(s:kwbdBufNum) || s:kwbdBufNum == bufnr("%")) + execute "bd! " . s:kwbdBufNum + endif + if(!s:buflistedLeft) + set buflisted + set bufhidden=delete + set buftype=nofile + setlocal noswapfile + endif + else + if(bufnr("%") == s:kwbdBufNum) + let prevbufvar = bufnr("#") + if(prevbufvar > 0 && buflisted(prevbufvar) && prevbufvar != s:kwbdBufNum) + b # + else + bn + endif + endif + endif +endfunction + +command! Kwbd call <SID>Kwbd(1) +nnoremap <silent> <Plug>Kwbd :<C-u>Kwbd<CR> + +" Create a mapping (e.g. in your .vimrc) like this: +"nmap <C-W>! <Plug>Kwbd + diff --git a/.vim/plugin/vtreeexplorer.vim b/.vim/plugin/vtreeexplorer.vim deleted file mode 100644 index 2458abc..0000000 --- a/.vim/plugin/vtreeexplorer.vim +++ /dev/null @@ -1,872 +0,0 @@ -"" File: vtreeexplorer.vim -"" Description: tree-like file system explorer for vim -"" Version: $Revision: 1.24 $ $Date: 2005/11/17 16:24:33 $ -"" Author: TS Urban (thomas.scott.urban@HORMELgmail.com) -"" (remove the source of SPAM from my email first) -"" -"" Instructions: -"" 1 - source this file or put in your plugin directory -"" 2 - :VTreeExlorer or :VSTreeExplore -"" 3 - help at top of screen -"" 4 - this script comes with a help text that integrates with the vim help -"" system, put vtreeexplorer.txt in your ~/.vim/doc dir, then do -"" :helptags ~/.vim/doc -"" -"" Global Configuration Variables: -"" treeExplVertical : split vertically when starting with VSTreeExplore -"" treeExplWinSize : window size (width or height) when doing VSTreeExplore -"" treeExplHidden : set to have explorer start with hidden files shown -"" treeExplHidePattern : set have matching files not shown -"" treeExplDirSort : start explorer with desired directory sorting: -"" 0 : no directory sorting -"" 1 : directories sorting first -"" -1 : directories sorting last -"" treeExplIndent : width of tree indentation in spaces (min 3, max 8) -"" treeExplNoList : don't list the explorer in the buffer list -"" -"" Todo: -"" - global option for path separator -"" - merge in patches for winmanager -"" - +/- keymappings, etc -"" - recursively collapse binding/function - -"" prevent multiple loading unless developing with g:treeExplDebug -if exists("vloaded_tree_explorer") && !exists("g:treeExplDebug") - finish -endif -let vloaded_tree_explorer=1 - -let s:cpo_save = &cpo -set cpo&vim - -"" create commands -command! -n=? -complete=dir VTreeExplore :call s:TreeExplorer(0, '<args>') -command! -n=? -complete=dir VSTreeExplore :call s:TreeExplorer(1, '<args>') - -"" support sessions -autocmd BufNewFile TreeExplorer VTreeExplore - -"" create a string of chr cnt long - emulate vim7 repeat function -function! s:MyRepeat(chr, cnt) " <<< - let sret = "" - let lcnt = a:cnt - while lcnt > 0 - let sret = sret . a:chr - let lcnt = lcnt - 1 - endwhile - return sret -endf " >>> - -function! s:InitWindowVars() " <<< - if exists("w:tree_vars_defined") - return - endif - - let w:tree_vars_defined = 1 - - let w:escape_chars = " `|\"~'#" - - " win specific vars from globals if they exist - let w:hidden_files = (exists("g:treeExplHidden")) ? 1 : 0 - let w:dirsort = (exists("g:treeExplDirSort")) ? g:treeExplDirSort : 0 - if w:dirsort < -1 || w:dirsort > 1 - let w:dirsort = 0 - let w:escape_chars = w:escape_chars . '+' - endif - - " tree visual widget configuration, width limited to range [3,16] - let w:tree_wid_ind = (exists("g:treeExplIndent")) ? g:treeExplIndent : 3 - let w:tree_wid_ind = (w:tree_wid_ind < 3) ? 3 : w:tree_wid_ind - let w:tree_wid_ind = (w:tree_wid_ind > 8) ? 16 : w:tree_wid_ind - - let bar_char = '|' - let dsh_char = '-' - let grv_char = '`' - let spc_char = ' ' - - let w:tree_par_wid = bar_char . s:MyRepeat (spc_char, w:tree_wid_ind - 2) . spc_char - let w:tree_dir_wid = bar_char . s:MyRepeat (dsh_char, w:tree_wid_ind - 2) . spc_char - let w:tree_end_wid = grv_char . s:MyRepeat (dsh_char, w:tree_wid_ind - 2) . spc_char - let w:tree_spc_wid = s:MyRepeat (spc_char, w:tree_wid_ind) - - " init help to short version - let w:helplines = 1 - -endfunction " >>> - -"" TreeExplorer() - set up explorer window -function! s:TreeExplorer(split, start) " <<< - - " dir to start in from arg, buff dir, or pwd - let fname = (a:start != "") ? a:start : expand ("%:p:h") - let fname = (fname != "") ? fname : getcwd () - - " construct command to open window - if a:split || &modified - " if starting with split, get split parameters from globals - let splitMode = (exists("g:treeExplVertical")) ? "vertical " : "" - let splitSize = (exists("g:treeExplWinSize")) ? g:treeExplWinSize : 20 - let cmd = splitMode . splitSize . "new TreeExplorer" - else - let cmd = "e TreeExplorer" - endif - silent execute cmd - - call s:InitWindowVars() - - "" chars to escape in file/dir names - TODO '+' ? - " throwaway buffer options - setlocal noswapfile - setlocal buftype=nowrite - setlocal bufhidden=delete " d - setlocal nowrap - setlocal foldcolumn=0 - - if exists("g:treeExplNoList") - setlocal nobuflisted - endif - if has('spell') - setlocal nospell - endif - iabc <buffer> - - " setup folding for markers that will be inserted - setlocal foldmethod=marker - setlocal foldtext=substitute(getline(v:foldstart),'.{{{.*','','') - setlocal foldlevel=1 - - " syntax highlighting - if has("syntax") && exists("g:syntax_on") && !has("syntax_items") - syn match treeHlp #^" .*# - syn match treeDir "^\.\. (up a directory)$" - - syn match treeFld "{{{" - syn match treeFld "}}}" - - execute "syn match treePrt #" . w:tree_par_wid . "#" - execute "syn match treePrt #" . w:tree_dir_wid . "#" - execute "syn match treePrt #" . w:tree_end_wid . "#" - - syn match treeLnk #[^-| `].* -> # contains=treeFld - syn match treeDir #[^-| `].*/\([ {}]\{4\}\)*$# contains=treeFld,treeLnk - syn match treeCWD #^/.*$# contains=treeFld - - hi def link treePrt Normal - hi def link treeFld Ignore - hi def link treeHlp Special - hi def link treeDir Directory - hi def link treeCWD Statement - hi def link treeLnk Title - endif - - " for line continuation - let cpo_save1 = &cpo - set cpo&vim - - " set up mappings and commands for this buffer - nnoremap <buffer> <cr> :call <SID>Activate("win")<cr> - nnoremap <buffer> o :call <SID>Activate("win")<cr> - nnoremap <buffer> O :call <SID>Activate("cur")<cr> - nnoremap <buffer> t :call <SID>Activate("tab")<cr> - nnoremap <buffer> X :call <SID>RecursiveExpand()<cr> - nnoremap <buffer> E :call <SID>OpenExplorer()<cr> - nnoremap <buffer> C :call <SID>ChangeTop()<cr> - nnoremap <buffer> H :call <SID>InitWithDir($HOME)<cr> - nnoremap <buffer> u :call <SID>ChdirUp()<cr> - nnoremap <buffer> p :call <SID>MoveParent()<cr> - nnoremap <buffer> r :call <SID>RefreshDir()<cr> - nnoremap <buffer> R :call <SID>InitWithDir("")<cr> - nnoremap <buffer> S :call <SID>StartShell()<cr> - nnoremap <buffer> D :call <SID>ToggleDirSort()<cr> - nnoremap <buffer> a :call <SID>ToggleHiddenFiles()<cr> - nnoremap <buffer> ? :call <SID>ToggleHelp()<cr> - nnoremap <buffer> <2-leftmouse> :call <SID>Activate("win")<cr> - - command! -buffer -complete=dir -nargs=1 CD :call s:TreeCD('<args>') - command! -buffer -range -nargs=0 Yank :<line1>,<line2>y | - \ let @" = substitute (@", ' [{}]\{3\}', "", "g") - - let &cpo = cpo_save1 " restore - - call s:InitWithDir(fname) " load fname dir -endfunction " >>> - -"" TreeCD() - change to dir from cmdline arg -function! s:TreeCD(dir) " <<< - if isdirectory (a:dir) - call s:InitWithDir (a:dir) - else - echo "can not change to directory: " . a:dir - endif -endfunction " >>> - -"" InitWithDir() - reload tree with dir -function! s:InitWithDir(dir) " <<< - call s:InitWindowVars() - - if a:dir != "" - try - execute "lcd " . escape (a:dir, w:escape_chars) - catch - echo "ERROR: changing to directory: " . a:dir - return - endtry - endif - let cwd = getcwd () - - if has("unix") == 0 - let cwd = substitute (cwd, '\\', '/', "g") - let is_root = (cwd =~ '^[A-Z]:/$') ? 1 : 0 - else - let is_root = (cwd == "/") ? 1 : 0 - endif - - let cwd = substitute (cwd, '/*$', '/', "") - - let save_f = @f - let save_y = @" - - " clear buffer - setlocal modifiable | silent! normal ggdG - setlocal nomodifiable - - "insert header - call s:AddHeader() - normal G - - "insert parent link unless we're at / for unix or X:\ for dos - if is_root == 0 - let @f=".. (up a directory)" - endif - let @f=@f . "\n" . cwd . "\n\n" - - setlocal modifiable | silent put f | setlocal nomodifiable - - normal Gk - - call s:ReadDir (line("."), cwd) " read dir - - let @f = save_f - let @" = save_y -endfunction " >>> - -"" ReadDir() - read dir after current line with tree pieces and foldmarkers -function! s:ReadDir(lpn,dir) " <<< - let olddir = getcwd () - - let lps = getline (a:lpn) - - if a:dir == "" - let dir = GetAbsPath2 (lpn, 0) - if w:firstdirline ! = lpn - echo "ERROR" - return - endif - else - let dir = a:dir - endif - - " TODO - error when dir no longer exists - try - execute "lcd " . escape (dir, w:escape_chars) - catch - echo "ERROR: changing to directory: " . dir - return - endtry - - """ THIS BLOCK DOESN' DO ANYTHING - " change dos path to look like unix path - "if has("unix") == 0 " TODO - so many dos/win variants, this seemed easier - maybe not correct (e.g. OS2, mac, etc) - " let dir = substitute (dir, '\\', '/', "g") - "endif - "let dir = substitute (dir, '/\?$', '/', "") - """ THIS BLOCK DOESN' DO ANYTHING - - " get dir contents - if w:hidden_files == 1 - let dirlines = glob ('.*') . "\n" . glob ('*') - else - let dirlines = glob ('*') - endif - - " if empty, don't change line - if dirlines == "" - return - endif - - let treeprt = substitute (lps, '[^-| `].*', "", "") - let pdirprt = substitute (lps, '^[-| `]*', "", "") - let pdirprt = substitute (pdirprt, '[{} ]*$', "", "") - let foldprt = substitute (lps, '.*' . pdirprt, "", "") - - " save states of registers for restoring - " @l is used for first line, last line, and if dir sorting is off - " @f and @d are used for file and dirs with dir sorting - let save_l = @l | let @l = "" - let save_d = @d | let @d = "" - let save_f = @f | let @f = "" - let save_y = @" - - let @l = treeprt . pdirprt . ' {{{' - - let treeprt = substitute (treeprt, w:tree_end_wid, w:tree_spc_wid, "") - let treeprt = substitute (treeprt, w:tree_dir_wid, w:tree_par_wid, "") - - " parse dir contents by '/' - let dirlines = substitute (dirlines, "\n", '/', "g") - - if exists("g:treeExplHidePattern") - let do_hide_re = 1 - else - let do_hide_re = 0 - endif - - while strlen (dirlines) > 0 - let curdir = substitute (dirlines, '/.*', "", "") - let dirlines = substitute (dirlines, '[^/]*/\?', "", "") - - if w:hidden_files == 1 && curdir =~ '^\.\.\?$' - continue - endif - - if w:hidden_files == 0 && do_hide_re == 1 && curdir =~ g:treeExplHidePattern - continue - endif - - let linkedto = resolve (curdir) - if linkedto != curdir - let curdir = curdir . ' -> ' . linkedto - endif - if isdirectory (linkedto) - let isdir = 1 - let curdir = curdir . '/' - else - let isdir = 0 - endif - - " escape leading characters confused with tree parts - if curdir =~ '^[-| `]' - let curdir = '\' . curdir - endif - - if w:dirsort != 0 - if isdir == 1 - let @d = @d . "\n" . treeprt . w:tree_dir_wid . curdir - else - let @f = @f . "\n" . treeprt . w:tree_dir_wid . curdir - endif - else - let @l = @l . "\n" . treeprt . w:tree_dir_wid . curdir - endif - endwhile - - if w:dirsort == 1 - let @l = @l . @d . @f . "\n" - elseif w:dirsort == -1 - let @l = @l . @f . @d . "\n" - else - let @l = @l . "\n" - endif - - exec (":" . a:lpn) - - " TODO handle fold open v fold closed - setlocal modifiable - silent normal ddk - silent put l - setlocal nomodifiable - - " make sure fold is open so we don't delete the whole thing - "if foldclosed (line (".")) != -1 - if foldclosed (a:lpn) != -1 - foldopen - endif - - normal! `] - - " change last tree part to the final leaf marking, add final fold mark - let @l = getline(".") - let @l = substitute (@l, w:tree_dir_wid, w:tree_end_wid, "") - let @l = @l . foldprt . " }}}\n" - - setlocal modifiable | silent normal dd - silent put! l | setlocal nomodifiable - - " restore registers - let @l = save_l - let @d = save_d - let @f = save_f - let @" = save_y - - exec (":" . a:lpn) - - execute "lcd " . escape (olddir, w:escape_chars) -endfunction " >>> - -"" ChdirUp() - cd up (if possible) -function! s:ChdirUp() " <<< - let cwd = getcwd() - if cwd == "/" || cwd =~ '^[^/]..$' - echo "already at top dir" - else - call s:InitWithDir("..") - endif -endfunction " >>> - -"" MoveParent() - move cursor to parent dir -function! s:MoveParent() " <<< - call s:InitWindowVars() - - let ln = line(".") - call s:GetAbsPath2 (ln, 1) - if w:firstdirline != 0 - exec (":" . w:firstdirline) - else - exec (":" . w:helplines) - endif -endfunction " >>> - -"" ChangeTop() - change top dir to cursor dir -function! s:ChangeTop() " <<< - call s:InitWindowVars() - - let ln = line(".") - let l = getline(ln) - - " on current top or non-tree line? - if l !~ '^[| `]' - return - endif - - " parent dir - if l =~ '^\.\. ' - call s:ChdirUp() - return - endif - - let curfile = s:GetAbsPath2(ln, 0) - if curfile !~ '/$' - let curfile = substitute (curfile, '[^/]*$', "", "") - endif - call s:InitWithDir (curfile) -endfunction " >>> - -"" RecursiveExpand() - expand cursor dir recursively -function! s:RecursiveExpand() " <<< - call s:InitWindowVars() - - echo "recursively expanding, this might take a while (CTRL-C to stop)" - - let curfile = s:GetAbsPath2(line("."), 0) - - if w:firstdirline == 0 - let init_ln = w:helplines - let curfile = substitute (getline (init_ln), '[ {]*', "", "") - else - let init_ln = w:firstdirline - endif - - let init_ind = match (getline (init_ln), '[^-| `]') / w:tree_wid_ind - - let curfile = substitute (curfile, '[^/]*$', "", "") - - let l = getline (init_ln) - - if l =~ ' {{{$' - if foldclosed (init_ln) != -1 - foldopen - endif - endif - - if l !~ ' {{{$' " dir not open - call s:ReadDir (init_ln, curfile) - - if getline (init_ln) !~ ' {{{$' " dir still not open (empty) - echo "expansion done" - return - endif - endif - - let ln = init_ln + 1 - - let l = getline (ln) - - let match_str = '[^-| `]' - while init_ind < (match (l, '[^-| `]') / w:tree_wid_ind) - let tl = l - let tln = ln - let ln = ln + 1 - let l = getline (ln) - - if tl =~ ' {{{$' - if foldclosed (tln) != -1 - foldopen - endif - continue - endif - - " link or non dir - if tl =~ ' -> ' || tl !~ '/[ }]*$' - continue - endif - - let curfile = s:GetAbsPath2(tln, 0) - - call s:ReadDir (tln, curfile) - - let l = getline (ln) - endwhile - - exec (":" . init_ln) - echo "expansion done" -endfunction " >>> - -"" OpenExplorer() - open file explorer on cursor dir -function! s:OpenExplorer() " <<< - call s:InitWindowVars() - - let curfile = s:GetAbsPath2 (line ("."), 0) - - if w:firstdirline == 0 - let curfile = getcwd () - else - " remove file name, if any - let curfile = substitute (curfile, '[^/]*$', "", "") - endif - - let curfile = escape (curfile, w:escape_chars) - - let oldwin = winnr() - wincmd p - if oldwin == winnr() || &modified - wincmd p - exec ("new " . curfile) - else - exec ("edit " . curfile) - endif - -endfunction " >>> - -"" Activate() - (un)fold read dirs, read unread dirs, open files, cd .. on .. -function! s:Activate(how) " <<< - call s:InitWindowVars() - - let ln = line(".") - let l = getline(ln) - - " parent dir, change to it - if l =~ '^\.\. (up a directory)$' - call s:ChdirUp() - return - endif - - " directory loaded, toggle folded state - if l =~ ' {{{$' - if foldclosed(ln) == -1 - foldclose - else - foldopen - endif - return - endif - - " on top, no folds, or not on tree - if l !~ '^[-| `]' - return - endif - - " get path of line - let curfile = s:GetAbsPath2 (ln, 0) - - if curfile =~ '/$' " dir - call s:ReadDir (ln, curfile) - return - else " file - let f = escape (curfile, w:escape_chars) - let oldwin = winnr() - wincmd p - if a:how == "tab" - exec ("tabedit " . f) - elseif a:how == "cur" - exec ("tabedit " . f) - elseif oldwin == winnr() || (&modified && s:BufInWindows(winbufnr(winnr())) < 2) - wincmd p - exec ("new " . f) - else - exec ("edit " . f) - endif - endif -endfunction " >>> - -"" RefreshDir() - refresh current dir -function! s:RefreshDir() " <<< - call s:InitWindowVars() - - let curfile = s:GetAbsPath2(line("."), 0) - - let init_ln = w:firstdirline - - " not in tree, or on path line or parent is top - if curfile == "" || init_ln == 0 - call s:InitWithDir("") - return - endif - - let save_l = @l - - " remove file name, if any - let curfile = substitute (curfile, '[^/]*$', "", "") - - let @l = getline (init_ln) - - " if there is no fold, just do normal ReadDir, and return - if @l !~ ' {{{$' - call s:ReadDir (init_ln, curfile) - let @l = save_l - return - endif - - " TODO factor - - if foldclosed(init_ln) == -1 - foldclose - endif - - " remove one foldlevel from line - let @l = substitute (@l, ' {{{$', "", "") - - exec (":" . init_ln) - - setlocal modifiable - silent normal ddk - silent put l - setlocal nomodifiable - - call s:ReadDir (init_ln, curfile) - - let @l = save_l -endfunction " >>> - -"" ToggleHiddenFiles() - toggle hidden files -function! s:ToggleHiddenFiles() " <<< - call s:InitWindowVars() - - let w:hidden_files = w:hidden_files ? 0 : 1 - let msg = w:hidden_files ? "on" : "off" - let hre = exists("g:treeExplHidePattern") ? g:treeExplHidePattern : '' - let msg = "hidden (dotfiles and regex = '" . hre . "') files now = " . msg - echo msg - call s:UpdateHeader () - call s:RefreshDir() -endfunction " >>> - -"" ToggleDirSort() - toggle dir sorting -function! s:ToggleDirSort() " <<< - call s:InitWindowVars() - - if w:dirsort == 0 - let w:dirsort = 1 - let msg = "dirs first" - elseif w:dirsort > 0 - let w:dirsort = -1 - let msg = "dirs last" - else - let w:dirsort = 0 - let msg = "off" - endif - let msg = "dirs sorting now = " . msg - echo msg - call s:UpdateHeader () - call s:RefreshDir() -endfunction " >>> - -"" StartShell() - start shell in cursor dir -function! s:StartShell() " <<< - call s:InitWindowVars() - - let ln = line(".") - - let curfile = s:GetAbsPath2 (ln, 1) - let prevdir = getcwd() - - if w:firstdirline == 0 - let dir = prevdir - else - let dir = substitute (curfile, '[^/]*$', "", "") - endif - - try - execute "lcd " . escape (dir, w:escape_chars) - shell - catch - echo "ERROR: changing to directory: " . dir - return - endtry - execute "lcd " . escape (prevdir, w:escape_chars) -endfunction " >>> - -"" GetAbsPath2() - get absolute path at line ln, set w:firstdirline, -"" - if ignore_current is 1, don't set line to current line when on a dir -function! s:GetAbsPath2(ln,ignore_current) " <<< - let lnum = a:ln - let l = getline(lnum) - - let w:firstdirline = 0 - - " in case called from outside the tree - if l =~ '^[/".]' || l =~ '^$' - return "" - endif - - let wasdir = 0 - - " strip file - let curfile = substitute (l,'^[-| `]*',"","") " remove tree parts - let curfile = substitute (curfile,'[ {}]*$',"",'') " remove fold marks - "let curfile = substitute (curfile,'[*=@|]$',"","") " remove file class - - " remove leading escape - let curfile = substitute (curfile,'^\\', "", "") - - if curfile =~ '/$' && a:ignore_current == 0 - let wasdir = 1 - let w:firstdirline = lnum - endif - - let curfile = substitute (curfile,' -> .*',"","") " remove link to - if wasdir == 1 - let curfile = substitute (curfile, '/\?$', '/', "") - endif - - let indent = match(l,'[^-| `]') / w:tree_wid_ind - - let dir = "" - while lnum > 0 - let lnum = lnum - 1 - let lp = getline(lnum) - if lp =~ '^/' - let sd = substitute (lp, '[ {]*$', "", "") - let dir = sd . dir - break - endif - if lp =~ ' {{{$' - let lpindent = match(lp,'[^-| `]') / w:tree_wid_ind - if lpindent < indent - if w:firstdirline == 0 - let w:firstdirline = lnum - endif - let indent = indent - 1 - let sd = substitute (lp, '^[-| `]*',"","") " rm tree parts - let sd = substitute (sd, '[ {}]*$', "", "") " rm foldmarks - let sd = substitute (sd, ' -> .*','/',"") " replace link to with / - - " remove leading escape - let sd = substitute (sd,'^\\', "", "") - - let dir = sd . dir - continue - endif - endif - endwhile - let curfile = dir . curfile - return curfile -endfunction " >>> - -"" ToggleHelp() - toggle between long and short help -function! s:ToggleHelp() " <<< - call s:InitWindowVars() - - let w:helplines = (w:helplines <= 4) ? 6 : 0 - call s:UpdateHeader () -endfunction " >>> - -"" Determine the number of windows open to this buffer number. -"" Care of Yegappan Lakshman. Thanks! -fun! s:BufInWindows(bnum) " <<< - let cnt = 0 - let winnum = 1 - while 1 - let bufnum = winbufnr(winnum) - if bufnum < 0 - break - endif - if bufnum == a:bnum - let cnt = cnt + 1 - endif - let winnum = winnum + 1 - endwhile - - return cnt -endfunction " >>> - -"" UpdateHeader() - update the header -function! s:UpdateHeader() " <<< - let oldRep=&report - set report=10000 - normal! mt - - " Remove old header - 0 - setlocal modifiable | silent! 1,/^" ?/ d _ | setlocal nomodifiable - - call s:AddHeader() - - " return to previous mark - 0 - if line("'t") != 0 - normal! `t - endif - - let &report=oldRep -endfunction " >>> - -"" - AddHeader() - add the header with help information -function! s:AddHeader() " <<< - if w:dirsort == 0 - let dt = "off)\n" - elseif w:dirsort == 1 - let dt = "dirs first)\n" - else - let dt = "dirs last)\n" - endif - - let hre = exists("g:treeExplHidePattern") ? g:treeExplHidePattern : "" - - let save_f=@f - 1 - let ln = 3 - if w:helplines > 4 - let ln=ln+1 | let @f= "\" o = (file) open in another window\n" - let ln=ln+1 | let @f=@f."\" o = (dir) toggle dir fold or load dir\n" - let ln=ln+1 | let @f=@f."\" <ret> = same as 'o'\n" - let ln=ln+1 | let @f=@f."\" O = same as 'o' but use replace explorer\n" - let ln=ln+1 | let @f=@f."\" t = same as 'o' but use new tab\n" - let ln=ln+1 | let @f=@f."\" X = recursive expand cursor dir\n" - let ln=ln+1 | let @f=@f."\" E = open Explorer on cursor dir\n" - let ln=ln+1 | let @f=@f."\" C = chdir top of tree to cursor dir\n" - let ln=ln+1 | let @f=@f."\" H = chdir top of tree to home dir\n" - let ln=ln+1 | let @f=@f."\" u = chdir top of tree to parent dir\n" - let ln=ln+1 | let @f=@f."\" :CD d = chdir top of tree to dir <d>\n" - let ln=ln+1 | let @f=@f."\" p = move cursor to parent dir\n" - let ln=ln+1 | let @f=@f."\" r = refresh cursor dir\n" - let ln=ln+1 | let @f=@f."\" R = refresh top dir\n" - let ln=ln+1 | let @f=@f."\" S = start a shell in cursor dir\n" - let ln=ln+1 | let @f=@f."\" :Yank = yank <range> lines withoug fold marks\n" - let ln=ln+1 | let @f=@f."\" D = toggle dir sort (now = " . dt - let ln=ln+1 | let @f=@f."\" a = toggle hidden (dotfiles and regex = '" - \ . hre . "') files (now = " - \ . ((w:hidden_files) ? "on)\n" : "off)\n") - let ln=ln+1 | let @f=@f."\" ? = toggle long help\n" - else - let ln=ln+1 | let @f="\" ? : toggle long help\n" - endif - let w:helplines = ln - - setlocal modifiable | silent put! f | setlocal nomodifiable - - let @f=save_f -endfunction " >>> - -let &cpo = s:cpo_save - -" vim: set ts=2 sw=2 foldmethod=marker foldmarker=<<<,>>> foldlevel=2 : |