aboutsummaryrefslogtreecommitdiff
path: root/vim/bundle/tlib_vim/autoload/tlib/var.vim
diff options
context:
space:
mode:
Diffstat (limited to 'vim/bundle/tlib_vim/autoload/tlib/var.vim')
-rwxr-xr-xvim/bundle/tlib_vim/autoload/tlib/var.vim83
1 files changed, 83 insertions, 0 deletions
diff --git a/vim/bundle/tlib_vim/autoload/tlib/var.vim b/vim/bundle/tlib_vim/autoload/tlib/var.vim
new file mode 100755
index 0000000..dcd9264
--- /dev/null
+++ b/vim/bundle/tlib_vim/autoload/tlib/var.vim
@@ -0,0 +1,83 @@
+" @Author: Tom Link (micathom AT gmail com?subject=[vim])
+" @Website: http://www.vim.org/account/profile.php?user_id=4037
+" @License: GPL (see http://www.gnu.org/licenses/gpl.txt)
+" @Revision: 30
+
+
+" Define a variable called NAME if yet undefined.
+" You can also use the :TLLet command.
+"
+" EXAMPLES: >
+" exec tlib#var#Let('g:foo', 1)
+" TLet g:foo = 1
+function! tlib#var#Let(name, val) "{{{3
+ return printf('if !exists(%s) | let %s = %s | endif', string(a:name), a:name, string(a:val))
+ " return printf('if !exists(%s) | let %s = %s | endif', string(a:name), a:name, a:val)
+endf
+
+
+" :def: function! tlib#var#EGet(var, namespace, ?default='')
+" Retrieve a variable by searching several namespaces.
+"
+" EXAMPLES: >
+" let g:foo = 1
+" let b:foo = 2
+" let w:foo = 3
+" echo eval(tlib#var#EGet('foo', 'vg')) => 1
+" echo eval(tlib#var#EGet('foo', 'bg')) => 2
+" echo eval(tlib#var#EGet('foo', 'wbg')) => 3
+function! tlib#var#EGet(var, namespace, ...) "{{{3
+ let pre = []
+ let post = []
+ for namespace in split(a:namespace, '\zs')
+ let var = namespace .':'. a:var
+ call add(pre, printf('exists("%s") ? %s : (', var, var))
+ call add(post, ')')
+ endfor
+ let default = a:0 >= 1 ? a:1 : ''
+ return join(pre) . string(default) . join(post)
+endf
+
+
+" :def: function! tlib#var#Get(var, namespace, ?default='')
+" Retrieve a variable by searching several namespaces.
+"
+" EXAMPLES: >
+" let g:foo = 1
+" let b:foo = 2
+" let w:foo = 3
+" echo tlib#var#Get('foo', 'bg') => 1
+" echo tlib#var#Get('foo', 'bg') => 2
+" echo tlib#var#Get('foo', 'wbg') => 3
+function! tlib#var#Get(var, namespace, ...) "{{{3
+ let var_ = substitute(a:var, '#', '_', 'g')
+ for namespace in split(a:namespace, '\zs')
+ let vname = namespace == 'g' ? a:var : var_
+ let var = namespace .':'. vname
+ if exists(var)
+ return {var}
+ endif
+ endfor
+ return a:0 >= 1 ? a:1 : ''
+endf
+
+
+" :def: function! tlib#var#List(rx, ?prefix='')
+" Get a list of variables matching rx.
+" EXAMPLE:
+" echo tlib#var#List('tlib_', 'g:')
+function! tlib#var#List(rx, ...) "{{{3
+ TVarArg ['prefix', 'g:']
+ if v:version >= 704
+ exec 'let varlist = keys('. prefix .')'
+ else
+ redir => vars
+ silent! exec 'let '. prefix
+ redir END
+ let varlist = split(vars, '\n')
+ call map(varlist, 'matchstr(v:val, ''^\S\+'')')
+ endif
+ call filter(varlist, 'v:val =~ a:rx')
+ return varlist
+endf
+