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) endwhile endfunction
This function calls a:func with every file matching pattern.