created 2001 · complexity intermediate · author Chip Campbell · version 6.0
If you'd like to apply a substitute, or even any Ex command, to a text region you've selected using visual-blocks (i.e. ctrl-v and move, or ctrl-q in Windows), then you'll be wanting to use Charles Campbell's vis.vim plugin.
Note that applying Ex commands to a simple visual selection is a much simpler process, as is searching in a visual selection (see Tip 438). The vis.vim plugin is useful for applying Ex commands to the area of a blockwise visual selection.
It's a plugin and comes as a vimball; so to install it with Vim 7.1 just
vim vis.vba.gz :so % :q
ctrl-v (or ctrl-Q if using default mswin mappings) (move) :B s/pattern/newtext/
You can also perform any Ex command (:B !sort, for example). On the command line, when you enter :B, what you'll actually see is:
Just continue with the substitute or whatever...
and the substitute will be applied to just that block of text!
Example: ctrl-v move-to-select the central four "abc"s Initial Select inner four "abc"s :B s/abc/ABC/g abcabcabcabc abc--------abc abcabcabcabc abcabcabcabc abc|abcabc|abc abcABCABCabc abcabcabcabc abc|abcabc|abc abcABCABCabc abcabcabcabc abc--------abc abcabcabcabc
Vis.vim will also work with V (visual-line) and v (visual-character) selections.
Often it is used to change a variable. It's not the only way that the substitute can be done (you can use column selection regexp patterns), but it is, perhaps, more straightforward. As another example:
Initial After Substitute: printf("...", printf("...", abc,def,def, abc,def,DEF, abc,def,def, abc,def,DEF, abc,def,def, abc,def,DEF, abc,def,def, abc,def,DEF,
To do this, use ctrl-v and motion to select the defs, then apply the substitute:
There is no need of plugins:
Perhaps we need another example. The plugin is needed more so that changes don't take effect outside the visual area.
For example, just using /\%V in your pattern will change this (visual selection denoted by |):
abc|defghi|jkl bcd|efghij|kla kla|bcdefg|hij
abc|defGHI|jkl bcd|efGHIj|kla kla|bcdefG|HIj
when you do:
If you use the plugin, it becomes:
abc|defGHI|jkl bcd|efGHIj|kla kla|bcdefg|hij
Note the difference in the last line.
Or at least, that's how I understand it. I don't use the plugin myself.
--Fritzophrenic 15:52, January 20, 2010 (UTC)
- Correct. Note that in order to fix that particular example, you could add another "visual selection" match at the last matched character:
:%s/\%Vgh\%Vi/GHI/gBut this is not only difficult to remember, but soon becomes virtually impossible to specify with more complex patterns. -- Inkarkat 19:31, January 20, 2010 (UTC)
- If you think about it a different way, you just need to wrap your pattern in %V:
- But now you have to remember that it will never match against the right column of the selection. (%V just matches the selection, but if the i is the last character in the selection, then the second %V isn't inside the selection.) --Pydave 14:42, August 9, 2011 (UTC)