Optimising what @MattObert said: * <kbd>y</kbd><kbd>3</kbd><kbd>i</kbd><kbd>w</kbd> * <kbd>/</kbd>`red dog`<kbd>Enter</kbd> * <kbd>c</kbd><kbd>3</kbd><kbd>i</kbd><kbd>w</kbd><kbd>Ctrl-r</kbd><kbd>0</kbd><kbd>Esc</kbd> * <kbd>n</kbd><kbd>.</kbd> etc. In detail: * <kbd>y</kbd><kbd>3</kbd><kbd>i</kbd><kbd>w</kbd> yanks `philosophical chicken`; this is marginally better than <kbd>y</kbd><kbd>2</kbd><kbd>W</kbd> because the latter includes a trailing space * <kbd>/</kbd>`red dog`<kbd>Enter</kbd> finds the first `red dog` * <kbd>c</kbd><kbd>3</kbd><kbd>i</kbd><kbd>w</kbd> deletes `red dog` (again, without the trailing space) and switches to insert mode * <kbd>Ctrl-r</kbd><kbd>0</kbd> pastes from register `0` (cf. `:h i_CTRL-R` and `:h quote0`) * <kbd>Esc</kbd> switches to normal mode * <kbd>n</kbd><kbd>.</kbd> finds the next `red dog` and re-plays the last operation (i.e. replaces it with `philosophical chicken`) * repeat <kbd>n</kbd><kbd>.</kbd> as needed. The first trick is that yanks are automatically saved to register `0`. The second trick is you can paste registers in insert mode with <kbd>Ctrl-r</kbd>. Other things that would help you: * turn on line numbers: `:setlocal relativenumber! number!` (run it again to turn it off) * same thing as a macro: `nnoremap <silent> <Leader>, :setlocal relativenumber! number!<CR>` * use line offsets relative to the cursor line: `:.,+6 s/.../.../` * replace with confirmation: `:%s/red dog/philosophical chicken/gc` Take a look at Drew Neil's [Vimcasts][Vimcasts] for other similar tricks. Also consider posting Vim-related questions to the [Vi site][vi.se]. [Vimcasts]: http://vimcasts.org/episodes/ [vi.se]: http://vi.stackexchange.com/