Tip 794 Printable Monobook Previous Next

created 2004 · complexity advanced · author rja · version 5.7

It is possible to indirectly reference a variable using {} (curly braces) in your Vim script. This give you the ability to build up variable names on-the-fly and subsequently reference the data that those variables hold.

For example:

:let richard_name = "Richard"
:let name_pointer = "richard_name"
:echo {name_pointer}

will display the string "Richard" on screen

Another example:

:let richard_name = "Richard"
:let alan_name = "Alan"
:let postfix = "_name"
:let name_pointer = "richard" . postfix
:echo {name_pointer}
:let name_pointer = "alan" . postfix
:echo {name_pointer}

will display "Richard" then "Alan".

You can also call functions indirectly in the same way. For example:

function! GlobalFunc(pattern,func)
  let files = glob(a:pattern)
  while files != ''
    let file = substitute(files,'^\(.\{-}\)\n.*','\1',"")
    let files = strpart(files,strlen(file)+1)
    call {a:func}(file)

This function calls a:func with every file matching pattern.

References[edit | edit source]

Comments[edit | edit source]

Community content is available under CC-BY-SA unless otherwise noted.