aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/vim-addon-mw-utils/autoload/glob.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/bundle/vim-addon-mw-utils/autoload/glob.vim')
-rw-r--r--vim/bundle/vim-addon-mw-utils/autoload/glob.vim27
1 files changed, 27 insertions, 0 deletions
diff --git a/vim/bundle/vim-addon-mw-utils/autoload/glob.vim b/vim/bundle/vim-addon-mw-utils/autoload/glob.vim
new file mode 100644
index 0000000..9a0f79a
--- /dev/null
+++ b/vim/bundle/vim-addon-mw-utils/autoload/glob.vim
@@ -0,0 +1,27 @@
+exec vam#DefineAndBind('s:c','g:glob_like', '{}')
+
+" ignore vcs stuff, Don't think you want those..
+let s:c['regex_ignore_directory'] = '\<\%([_.]darcs\|\.git\|.svn\|.hg\|.cvs\|.bzr\)\>'
+let s:c['glob_cache'] = get(s:c, 'glob_cache', {})
+let s:glob_cache = s:c['glob_cache']
+
+fun! glob#Glob(pattern, ...)
+ let pattern = a:pattern
+ if pattern[0] == '~'
+ let pattern = $HOME.pattern[1:]
+ endif
+ let opts = a:0 > 0 ? a:1 : {}
+ " never cache current directory. You're very likely to edit files in it.
+
+ let c = getcwd()
+ let cachable = get(opts, 'cachable', 0) && pattern[:len(c)-1] != c
+ if cachable && has_key(s:glob_cache, pattern)
+ return s:glob_cache[pattern]
+ endif
+
+ " FIXME: don't recurse into \.git directory (thus reimplement glob in vimL!)
+ let r = filter(split(glob(pattern),"\n"),'v:val !~ '.string(s:c['regex_ignore_directory']))
+ if cachable | let s:glob_cache[pattern] = r | endif
+ return r
+endf
+