The Chronicle

of a ColdFusion Expatriate

Test Complex Vim Settings Easily

October 24, 2013

Have you ever wanted to test a new value for a complex Vim setting, like comments, and been annoyed at having to print out the setting, memorize its value, and then type it back in? There are a couple of ways around this that are much more convenient, but I’ll show you a great trick for getting the current value of a setting to work from.

As an example, let’s stick with the comments setting, which tells Vim what source code comments look like in various languages. A typical value for comments is something like s1:/*,mb:*,ex:*/,://,:# (this one handles all PHP-style comments).

The first part of this trick is to know that you can reference the values of settings by prepending an ampersand on their name. In other words, in VimL code, you can use &comments to reference the value of the comments setting. This is done in Vim script fairly regularly to manipulate the values of buffer-local settings that affect what the script is trying to do.

The second part of the trick is to understand that a variable like &comments is considered to be an expression by Vim, which is to say, it can be evaluated. The result of evaluating &comments is the value of the setting.

Armed with these two pieces of knowledge, we can use the expression register to easily feed the current value of a setting into the command to change that setting. Let’s try it with comments. Type this exactly:

:set comments=<C-R>=&comments<CR>

Note that <C-R> means that you should press Ctrl-R on your keyboard, and <CR> means that you should press the return key. When you press Ctrl-R, Vim will enter operator pending mode and wait for you to enter a register name (which is typically a single letter or number). When you press =, it indicates that you want to insert a value from the expression register, which is a special register that has no stored value. Instead, you will see an equal sign prompt and you can enter any expression that Vim can evaluate.

When you enter &comments at the expression prompt and press enter, Vim evaluates that expression and inserts the resulting value at the cursor’s (previous) position, which sets you up to start editing that setting.

You can also use this <C-R>= trick in insert mode at any time to insert the result of expression evaluation directly into the file you’re editing. This can sometimes be helpful to do quick math or string conversions using any of Vim’s built-in functions.

Want more? Check out these articles in the Vim help files to learn all about expressions, the expression register, and Vim’s built-in functions:

  • :h expression
  • :h function-list
  • :h quote=