Re: Syntax: allow newline but not blank lines in a region

BPJ <[email protected]>
Newsgroups gmane.editors.vim
Message-ID <CADAJKhBE-Ffjycp9BWdayNi5No84nSq+NfNMn919OGsVh56CKw@mail.gmail.com>
Den lör 23 nov. 2024 04:59Doug Kearns <[email protected]> skrev:

> On Sat, 23 Nov 2024 at 04:28, BPJ <[email protected]> wrote:
>
>> I have a syntax for a markup language where certain delimited constructs
>> allow single newlines but not blank lines, i.e. this is OK
>>
>> ``` markup
>> {_foo
>> bar_}
>> ```
>>
>> but this is not OK
>>
>> ``` markup
>> {_foo
>>
>> bar_}
>> ```
>>
>> is there any way to set up a region so that it behaves like this? I tried
>> `oneline` plus a contained `syn match` which matches a newline not preceded
>> or followed by a blank line but no luck!
>>
>> I get the behavior I want with a `syn match` with this pattern
>>
>> ``` pattern
>> {_\%([^\n]\|\%(\_^\s*\)\@<!\n\%(\s*\_$\)\@!\)\{-}_}
>> ```
>>
>
> Does something like this work?
>
> :syn region foobar start="{_" end="_}" end="$" skip="\n\s*\S"
>


I already tried that. No lunch unfortunately. I'm going with the `syn
match` version which incorporates the single newline pattern. It is
probably less efficient but is also probably my only choice now as I found
that I also need to exclude backslash from the "normal" subpattern and skip
past backslash + char lest the closing delimiter is directly preceded by a
backslash.

BTW for reference the correct pattern, maybe inefficient but accurate, for
a newline not preceded or followed by any blank line is

``````pattern
\%(\_^\s*\)\@<!\n\%(\s*\_$\)@!
``````

i.e. with negative lookbehind for optional horizontal whitespace and a
start-of-line and the opposite negative lookahead for optional horizontal
whitespace and an end-of-line.

FWIW the backslash escape pattern I used is `\\\_.`, with later Special
highlighting of backslashes followed by ASCII punctuation or
space/newline/return. Who said it has to be easy! :-)


>
>> but then highlighting obviosly doesn't kick in until I type the closing
>> delimiter so I would prefer a region.
>>
>> Also is there a better way to match the start or end of the file than
>> `\_.\@<!` and `\_.\@!`?
>>
>
> :help \%^
>

Thanks. I still learn new things about Vim after having used it for ~20
years, which is both gratifying and frustrating!

/bpj



> Regards,
> Doug
>
> --
> --
> 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 [email protected].
> To view this discussion visit
> https://groups.google.com/d/msgid/vim_use/CAJ1uvoB5GPjE1RKY4wQkRW_zawUvFxnYWDHgOdOQ8tgkMdU%2Bpw%40mail.gmail.com
> <https://groups.google.com/d/msgid/vim_use/CAJ1uvoB5GPjE1RKY4wQkRW_zawUvFxnYWDHgOdOQ8tgkMdU%2Bpw%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
-- 
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 [email protected].
To view this discussion visit https://groups.google.com/d/msgid/vim_use/CADAJKhBE-Ffjycp9BWdayNi5No84nSq%2BNfNMn919OGsVh56CKw%40mail.gmail.com.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.