Vim Tips Wiki
Register
(Adjust previous/next navigation + some minor manual clean)
m (Reverted edits by Emprego.curitiba (talk | block) to last version by JohnBot)
 
(3 intermediate revisions by 2 users not shown)
Line 9: Line 9:
 
|version=6.0
 
|version=6.0
 
|rating=4/3
 
|rating=4/3
  +
|category1=
  +
|category2=
 
}}
 
}}
 
The :RS /pattern/subpattern/{flags} command+function as shown below allows one to repeat a RS-substitute after the current cursor position.
 
The :RS /pattern/subpattern/{flags} command+function as shown below allows one to repeat a RS-substitute after the current cursor position.
Line 36: Line 38:
 
<pre>
 
<pre>
 
" RS: repeat substitution command
 
" RS: repeat substitution command
com! -range -nargs=* RS call RepeatSubst(&lt;q-args&gt;)
+
com! -range -nargs=* RS call RepeatSubst(&lt;q-args>)
 
" RepatSubst:
 
" RepatSubst:
 
fun! RepeatSubst(subexpr)
 
fun! RepeatSubst(subexpr)
Line 45: Line 47:
 
let sep = strpart(g:repeatsubst,0,1)
 
let sep = strpart(g:repeatsubst,0,1)
 
let pat = substitute(g:repeatsubst,'^.\(.\{-}\)'.sep.'.*$','\1','')
 
let pat = substitute(g:repeatsubst,'^.\(.\{-}\)'.sep.'.*$','\1','')
s/\%#./\r&amp;/
+
s/\%#./\r&/
 
let curcol= curcol + matchend(getline("."),pat)
 
let curcol= curcol + matchend(getline("."),pat)
 
exe "s".g:repeatsubst
 
exe "s".g:repeatsubst
Line 55: Line 57:
   
 
==Comments==
 
==Comments==
 
----
 

Latest revision as of 15:32, 8 November 2011

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

Comments[]