vim icon indicating copy to clipboard operation
vim copied to clipboard

select breaks syntax highlighting in bash

Open DarioDarko opened this issue 1 year ago • 7 comments

Steps to reproduce

set filetype to sh or bash use 'select' as a command argument without surrounding quotes watch the syntax highlighting break

example:

while true
do
	anycommand select something
done

i randomly discovered this because copyq has a select argument, that i use in a script

Expected behaviour

'select' should not break the syntax highlighting if its used as an argument for a command. the syntax recognition logic should only trigger if its at the very beginning of the line, after && semicolon etc

Version of Vim

9.1.0408-1

Environment

EndeavourOS Alacritty

Logs and stack traces

No response

DarioDarko avatar May 17 '24 18:05 DarioDarko

I don't see this. Can you please verify using vim --clean grafik

chrisbra avatar May 18 '24 06:05 chrisbra

vim --clean

image

DarioDarko avatar May 18 '24 09:05 DarioDarko

Hm, did you use bash initially? I only see this when using bash in the shebang line. This seems to happen when the syntax script determines a bash script, because bash "knows" select name [ in word ] ; do list ; done, which the syntax script tries to match here. And since there is a missing do here, it matches the done with an error. You can workaround this by setting :let b:is_posix=1.

chrisbra avatar May 18 '24 10:05 chrisbra

yes normally i use bash, but for me this happens with sh as well

btw this does not only affect select. same with while, until, for, etc

DarioDarko avatar May 18 '24 11:05 DarioDarko

btw this does not only affect select. same with while, until, for, etc

Yeah, for the same reason, you are using reserved words which the syntax script tries to match against the expected syntax.

:let b:is_posix=1

So does this help?

chrisbra avatar May 18 '24 12:05 chrisbra

Yeah, for the same reason, you are using reserved words which the syntax script tries to match against the expected syntax.

yes, i understand the issue. wouldt it be pretty simple to fix that in the syntax script?

So does this help?

unfortunately no image

DarioDarko avatar May 19 '24 22:05 DarioDarko

You need to reload the file after :let b:is_posix=1 using :e!, otherwise setting the buffer local var happens too late.

chrisbra avatar May 20 '24 12:05 chrisbra