Applying substitutes to a visual block
From Vim Tips Wiki
Tip 63 Previous Tip • Next Tip
Created: March 28, 2001 Complexity: intermediate Author: Chip Campbell Minimum version: 5.7 Karma: 151/44 Imported from: Tip#63
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, available at http://mysite.verizon.net/astronaut/vim/index.html#VIS
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
Once installed:
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:
:'<,'>B s/pattern/newtext/
Just continue with the substitute or whatever...
:'<,'>B s/abc/ABC/g
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[0],def[0],def[0], abc[0],def[0],DEF[0],
abc[1],def[1],def[1], abc[1],def[1],DEF[1],
abc[2],def[2],def[2], abc[2],def[2],DEF[2],
abc[3],def[3],def[3], abc[3],def[3],DEF[3],
To do this, use ctrl-v and motion to select the defs, then apply the substitute:
:B s/def/DEF/
[edit] Comments
Categories: VimTip | Plugin | Searching
