11

Maybe I'm searching the wrong way, but I've failed to find out how to do this.

Here's the scenario: I have a list in a text file where I want to insert the same word on multiple lines, here's an example text:

12.1           Item1
12.2           Item2
12.3           Item3

Now I visual-block mark the 8th column, indicated with underscores below, and intend to replace part of the whitespace with Done without moving the item column:

12.1   _       Item1
12.2   _       Item2
12.3   _       Item3

I expected that I could go into replace mode, but I can only enter insert (I), append (A), or change-mode (c). The change-mode comes close to what I want: if I know the length of the word the block can be set to the same width.

Is there something I'm missing here?

2 Answers 2

19

Why don't you select 4 columns and hit c?

<C-v>
2j
3l
cDone
<Esc>

Also, you could use :h normal:

V
2j
:'<,'>norm 7lRDone
<Esc>
3
  • 1
    That works for Done, but what if I want to write something else, I want to be free from counting characters, if possible.
    – Thor
    Commented Sep 11, 2012 at 12:16
  • 1
    :norm is your friend, then.
    – romainl
    Commented Sep 11, 2012 at 12:20
  • Yes the second solution can be used for a convenient mapping. Thank you.
    – Thor
    Commented Sep 11, 2012 at 12:23
1

If you want to substitute within a visual block, you can use the vis.vim plugin.

http://vim.wikia.com/wiki/Applying_substitutes_to_a_visual_block

To install:

Download vis.vba.gz from http://www.drchip.org/astronaut/vim/index.html#VIS

# Open vis.vba.gz in Vim 7.1 or later.
vim vis.vba.gz

# Source the open file.
:so %

# Quit Vim
:q

Once installed:

ctrl-v to enter visual-block mode
Move to select the block you want
:B s/pattern/newtext/

Even better, you can perform any Ex command on the visual block, not just substitutions. For example :B !sort.

2
  • Nice plugin, I will be using it :-). But how can I use it to replace arbitrary columns?
    – Thor
    Commented Nov 6, 2015 at 21:21
  • Right, you still have the problem of quickly setting the visual block width to match your arbitrary-width columns. I usually do <count> w or e to select several columns quickly, then adjust with h or l. Commented Nov 6, 2015 at 21:42

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .