Saturday, September 19, 2020

Re: How to replace string in specific paragraph only?

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