On 9/19/20 9:27 AM, Tim Chase wrote:
> The only gotcha with this is that a paragraph must have a blank
> line before & after it. I've gotten stung doing this exact format
> of command because the match was in the first/last paragraph of the
> document. So you need to also ("\|") accept a match of the beginning
> of the file ("\%^") and end of the file ("\%$")
>
> :g/aaa/?^$\|\%^?,/^$\|\%$/s:aaa:bbb:g
>
> As Sven says, it's ugly. But it's doable and fairly concise in what
> you're describing:
>
> Find all the "aaa"
> Starting there, search backwards to the previous blank line or BOF
> From there, search forwards to the next blank line or EOF
> Substitute "aaa" → "bbb" on all the lines of that range
Very interesting.
Thank you for that explanation Tim.
> Alternatively, you could hack it with normal mode, something like
>
> :g/aaa/norm vip:s//bbb^V^M
>
> where ^V^M is a control-V followed by a control-M (which makes this
> nasty to put in a mapping or vimrc). This works because vim knows
> that a "paragraph" is bounded by empty lines *or* BOF/EOF and does
> the ugly work for us.
ACK
Would it be worth while to include word boundaries \< and \> so that you
don't accidentally get a sub-string?
:g/aaa/?^$\|\%^?,/^$\|\%$/s:\<aaa\>:bbb:g
Also, is there any way to group the first "aaa" so that it could be
(back) referenced in the substitution? }:-)
> I can't imagine doing this in pretty much any other text editor
> without typing a LOT more.
~chuckle~
--
Grant. . . .
unix || die
--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/dd4e9977-15d9-12d7-ee94-6d1faf50b553%40spamtrap.tnetconsulting.net.
No comments:
Post a Comment