I have a relatively simple function I use:
function! GetVar( ... )
let varName=a:1
let retVal = exists( "a:2" ) ? a:2 : -1
if ( exists ( "w:" . varName ) )
let retVal=w:{varName}
elseif ( exists ( "b:" . varName ) )
let retVal=b:{varName}
elseif ( exists ( "t:" . varName ) )
let retVal=t:{varName}
elseif ( exists ( "g:" . varName ) )
let retVal=g:{varName}
endif
return retVal
endfunction
Calling it with something like:
:let test = GetVar( 'expandWindow', 'never' )
First checks to see if w:expandWindow exists (and returns that), then
b:expandWindow, t:expandWindow and finally g:expandWindow; if none of them
exist, it returns 'never' (or -1, if there was no second parameter). I use it
in plugins to allow both global default values as well as window-, buffer- or
tab-specific overrides.
This could be easily rewritten as:
:return exists( a:1 ) ? {a:1} : exists( a:2 ) ? a:2 : 0
To do what you're asking.
Of course, an internal version would be much faster, which might be why you
asked :)
Salman.
> -----Original Message-----
> From: Eggum, DavidX S [mailto:[EMAIL PROTECTED]
> Sent: Thursday, December 07, 2006 1:22 PM
> To: vim developers list
> Subject: RE: Two minor requests for the TODO list
>
>
> > How about adding this:
> > get({string} [, {default}])
> > Get value from variable {string}.
> > When this variable does not
> > exist, return {default}.
> Return zero
> > when {default} is
> > omitted.
>
>
> Hmmm.... we could follow the more succinct gmake way of doing
> things and add a new operator instead (I like this solution better):
>
> :let {var} ?= {expr} This is a conditional
> variable assignment operator,
> it only has an effect
> if the variable is not yet
> defined. This statement:
>
> let foo ?= "bar"
>
> is exactly equivalent to this:
>
> if !exists("foo")
> let foo = "bar"
> endif
>
> Regards,
> David
>
> ---
> "Love is what's in the room with you at Christmas if you stop
> opening presents and listen."
>
> Bobby - age 7
>