Wednesday, July 17, 2013

Re: Incorrect syntax highlight of things like '\r' within EOF block in bash script

On Wed, Jul 17, 2013 at 4:22 PM, Peng Yu <pengyu.ut@gmail.com> wrote:
> On Wed, Jul 17, 2013 at 3:09 PM, Adnan Zafar <adnanjzafar@gmail.com> wrote:
>> On Wed, Jul 17, 2013 at 4:02 PM, Peng Yu <pengyu.ut@gmail.com> wrote:
>>> Hi,
>>>
>>> vim can not syntax highlight the following script correctly. Does
>>> anybody know a better highlight plugin that can correct highlight it?
>>> Thanks.
>>>
>>> ~/linux/test/latex/tex/bin$ cat main.sh
>>> #!/usr/bin/env bash
>>>
>>> tex <<EOF
>>> \relax
>>> Hello?
>>> \end
>>> EOF
>>>
>>> --
>>> Regards,
>>> Peng
>>
>> Inside of heredocs, bash (and other shells) can do certain expansions
>> and substutions, so the Vim syntax highlights for those. However if
>> the delimiter word (here EOF) is quoted in some way, like \EOF then
>> those expansions and substitutions are disabled, and Vim's syntax
>> adjusts accordingly.
>>
>> In short either escape backslashes inside the heredoc or simply use
>>
>> tex << \EOF
>> \relax
>> Hello?
>> \end
>> EOF
>
> The following is the document from bash. I don't see the usage of
> \EOF. Do you know where it is documented? I tried both \EOF and EOF,
> both of them generate the same dvi file. So it seems \r and \e are
> take literally by tex (i.e., a backslash and 'r', a backslash and
> 'e'). Is it so?

The use of \EOF is mentioned in the following paragraph, specifically
"If any characters in word are quoted". Although the docs says that
backslashes must be escaped if the word is unquoted, I guess bash
leaves them alone in some circumstances The way Vim's syntax works
will cause the escape sequences to be highlighted unless you quote a
character in the word though, and Vim's syntax seems to only recognize
when the first character is quoted.

> No parameter expansion, command substitution, arithmetic expansion, or
> pathname expansion is performed on word. If any characters in word are
> quoted, the delimiter is the result of quote removal on word, and the
> lines in the here-document are not expanded. If word is unquoted, all
> lines of the here-document are subjected to parameter expansion, com-
> mand substitution, and arithmetic expansion. In the latter case, the
> character sequence \<newline> is ignored, and \ must be used to quote
> the characters \, $, and `.

--Adnan

--
--
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.
For more options, visit https://groups.google.com/groups/opt_out.

No comments: