I'm trying to work out if it's possible to refer to 'the previous
line' in a regex.
e.g. if the first 8 characters of a line are blank,
^\s{8}
replace them with the 8 characters at the start of the previous line.
Ideally it would handle a line a time, thus multiple blank line
starts would be filled in with the last non blank start.
Something like the following (untested) regexp should do the trick:
:%s/^\(.\{8}\).*\n\zs\s\{8}/\1
or
:%s/^\(.\{8}\)\(.*\n)\s\{8}/\1\2\1
Playing around with this a little more ("how did you spend your
morning, dear?" "Oh, just playing around with some regular
expressions for a guy on a email list, one could expand it from 8
spaces to N spaces with something like
:g/^\s\+/k a|?^\S?y|'a|s/^\s\+/\=strpart(@", 0,
strlen(submatch(0)))
It tromps on your scratch register, and your "a" mark (the "k a"
and "'a" bits) but it is a little more flexible.
If you need multiples of a given number of spaces, you could
alter it to
:g/^\(\s\{4}\)\+/...
which would be multiples of 4 whitespace characters.
-tim