sponsor Vim development Vim logo Vim Book Ad

intermediate Tip #1438: Using parameterized snippet inserts

 tip karma   Rating 2/2, Viewed by 374 

created:   December 12, 2006 3:16      complexity:   intermediate
author:   Bernd Pol      as of Vim:  

The macro ability of Vim to execute the contents of a register (see ':help q' and ':help @') comes in handy when one has to insert the same text over and over again.  Usually, this snippet will not be used literally all over again, but contain variable parts which need to be adapted for every occurrence.  Usually you would either enter the varying parts manually or use the :substitute command, both of which will become cumbersome after all if there are many occurrences to work at.  Using a parameter substitution engine, such as VPars (Vim script # 1696) can relieve you of much of this burden.

For example, I often use in my scripts a command sequence like this to optionally initialize some script local variable from a global one:

    let s:name = "value"
    if exists( "g:global_name" )
let s:name = g:global_name
    endif

Here "name" is some variable name and "value" is the default value it will assume.  Now, instead of explicitely hunting for "name" 4 times each time the snippet was inserted, I make them VPars variables by including them in "<| .. |>" delimiters, like this:

    let s:<|name|> = "<|value|>"
    if exists( "g:global_<|name|>" )
let s:<|name|> = g:global_<|name|>
    endif

This snippet will then be saved in some suiting register (I routinely use m -- for 'macro').  And in another register (the q register comes in very handy for this purpose) I put the following commands.  Just type and then copy this sequence into the q register by "qy or equivalent:

0"mPV4j,jj

(This could as well be accomplished using the q keystroke recording function, which however would require a final <Esc> to get back to command mode again in order to stop recording. Unfortunately, this <Esc> gets recorded as well, causing Vim to later drop out of insert mode when executing the macro.)

Now all I have to do is to position the cursor at the line where the snippet is to be inserted, and the issue @q (which is very quick to type).  Vim will insert the snippet, call VPars with the ",jj" shortcut.  VPars in turn will stop at the first variable (# denotes the cursor):

    let s:<|#name|> = "<|value|>"

and wait there, in insert mode already, for some replacement value.  Just type it in and press the <F3> function key (or use the ,jj shortcut).  VPars will substitute <|name|> for this text at all occurrences immediately, and then wait for a <|value|> replacement.  Enter text, press <F3>, and VPars will after substitution put the cursor at the end of the snippet.  There you may issue @q again and repeat the game as many times as wanted.

 rate this tip  Life Changing Helpful Unfulfilling 

<<Using VIM with the Dvorak Keyboard Layout | Using vim as an IDE all in one >>

Additional Notes

Anonymous, December 12, 2006 4:23
Shouldn't this go to the description page of your plugin?
If you have questions or remarks about this site, visit the vimonline development pages. Please use this site responsibly.
Questions about Vim should go to [email protected] after searching the archive. Help Bram help Uganda.
    stats
Sponsored by Web Concept Group Inc. SourceForge.net Logo