Fandom

Vim Tips Wiki

Repeating a substitute from current cursor position

1,624pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Tip 573 Printable Monobook Previous Next

created October 3, 2003 · complexity intermediate · author Charles E. Campbell, Jr. · version 6.0


The :RS /pattern/subpattern/{flags} command+function as shown below allows one to repeat a RS-substitute after the current cursor position.

For example:

" The cursor position is indicated with '^' on next line.
one two three one two three one two three
 ^

:RS /two/TWO/
one TWO three one two three one two three
       ^

move cursor:
one TWO three one two three one two three
                      ^

(I think tip author intended to repeat :RS here?)

cursor ends up:
one TWO three one two three one TWO three

Put the following into your vimrc if you'd like to be able to do this.

" RS: repeat substitution command
com! -range -nargs=* RS call RepeatSubst(<q-args>)
" RepatSubst:
fun! RepeatSubst(subexpr)
  if a:subexpr != ""
    let g:repeatsubst= a:subexpr
  endif
  let curcol= col(".")
  let sep = strpart(g:repeatsubst,0,1)
  let pat = substitute(g:repeatsubst,'^.\(.\{-}\)'.sep.'.*$','\1','')
  s/\%#./\r&/
  let curcol= curcol + matchend(getline("."),pat)
  exe "s".g:repeatsubst
  norm! k
  j!
  exe 'norm! '.curcol.'|'
endfun

CommentsEdit

Also on Fandom

Random Wiki