Vim Tips Wiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
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.