42

Maybe I am being daft but can you replace all the characters from where the cursor is to the end of line by one command? Then use . to do the same replace on the next line and so on.

7 Answers7

59

If I understood your question properly, try this:

C (that's a capital C) will delete everything from the cursor to the end of the line and put you in INSERT mode, then you write your replacement, leave INSERT mode, use . to repeat the process somewhere else.

sr_
  • 15,384
14

Adding to sr_'s answer:

If your cursor starts at the same position on each line, you might be interested in the Visual Block feature.

Type the following in order, with your cursor in the initial position:

  • Ctrl+v: Enter visual block mode.
  • $: go to the end of the line.
  • [X]j: replace X with the number of lines you want to go down.

This should create a rectangular selection going from your cursor on the first line to the end of the line [X] lines below.

You can then replace your whole selection:

  • c: delete selction and go in insert mode.
  • insert new text
  • Esc: Exit insert mode; Vim will automatically repeat the step on each line selected.

I use visual block whenever I can, I thought I'd share

rahmu
  • 20,023
  • +1 nice answer indeed. But not really what I want since sometimes my code is not nicely formatted like that ^_~ – Sardathrion - against SE abuse Feb 17 '12 at 10:22
  • @sardathrion; RE comment, 'nicely formatted'. Creating tables in Markdown I was able to auto fill spaces in n+1 lines, after creating line n by Visual Block selecting backwards! In other words the shape was similar to backwards 7 or vertical flipped L, or 'not nicely formatted'. lol. – xtian Oct 01 '14 at 15:18
4

C or c$ is for "change" and R is for "replace".

Two almost similar behavior. The former would get the line deleted before you start typing; while the latter would let you type over the characters and possibly go beyond the limit of the old line's characters displayed.

ismail
  • 141
2

To change every character on a line with a single character from the current column until the end of the line while keeping the line length unchanged:

:.s/\%>.c./-/g where - is the new character


.s/./-/g would replace every character on the current line with -

\%>.c matches from the current column

1

Just press 'C' i.e. Capital C in the command mode, and type the replacement text.

Mat
  • 52,586
weima
  • 183
0

The other answers missed these, they don't enter insert mode.

  • D Delete to the end of the line
  • d$ Deletes from the cursor to the end of the line

Then of course use .

0

As it can be useful, once we are trying to change till the end of line. I have created an insert mapping to perform this task, it not uses D because in insert mode this key is used to decreasing indentation. So it is Ctrl-k

:inoremap <C-k> <C-o>C
SergioAraujo
  • 459
  • 6
  • 8