Hello, 

* On Wed, Dec 06, 2006 at 04:11:24PM -0800, Eggum, DavidX S <[EMAIL PROTECTED]> 
wrote:
> I've found two tasks that are done in vim scripts routinely and it
> would be nice to streamline them:
> 
> Here's the first one: "If some variable isn't set yet, then set it to
> a default value". The code always looks something like this:
> 
> if !exists("g:MyScriptSetting")
>    let g:MyScriptSetting = "default_value"
> endif
> 
> How about adding this:
> [...]
> get({string} [, {default}])
>            value from variable {string}.  When this variable does not
>            exist, return {default}.  Return zero when {default} is
>            omitted.

Well, I've started to refactor my plugins to isolate a similar similar
function in an autoload plugin. My function also takes another argument:
a list of scopes in which the variable can be defined.

" Function: lh#option#Get({name}, {default} [, {scope}])
" @return b:{name} if it exists, of g:{name} if it exists, or {default}
" otherwise
" The order of the variables checked can be specified through the optional
" argument {scope}

Then, in my script, I systematically call this function, and never
directly use a variable. Indeed, I have no way of knowing if the
variable is b:goo, g:foo, w:foo or even s:foo.

The support of non global options is very important to me as I mainly
maintain ftplugins, and work on the files from various projects that
don't share the same configuration (like different targets used in the
makefiles).

A typical use is:
    let l:foo = lh#option#Get('foo', s:foo_default, 'wbg')
Which will return the value of the first variable found among w:foo,
b:foo and g:foo. Or s:foo_default otherwise. 

So far, {default} is not optional as I have both integer and string
variables, and I can't easily tell the exact type of the variable.

Having such function as builtin would be nice. I can easily cope without
it. But still, it would be nice.

-- 
Luc Hermitte
http://hermitte.free.fr/vim/

Reply via email to