zsh-users / zsh-syntax-highlighting

Fish shell like syntax highlighting for Zsh.
github.com/zsh-users/zsh-syntax-highlighting
BSD 3-Clause "New" or "Revised" License
20k stars 1.33k forks source link

history-expansion does not highlight & (previous substitution modifier) character #929

Open zaidhaan opened 1 year ago

zaidhaan commented 1 year ago

Screenshot: (note that expansion does work as expected after hitting return. & however, is not highlighted) image

Reproducible setup:

$ echo foo_replaceme_bar
$ echo baz_replaceme_qux
$ !-2:s/replaceme/subst/ && !-1:&   

Relevant zsh manual section: 14.1.4 Modifiers.

& Repeat the previous s substitution. Like s, may be preceded immediately by a g. In parameter expansion the & must appear inside braces, and in filename generation it must be quoted with a backslash.

I'm no zsh expert but I think all modifiers apply to history expansions too, so the modifier & should be also be highlighted in history-expansion.

phy1729 commented 1 year ago

Looks like this is a zsh bug

printf '<%s>' ${(z)${:-'!-2:&'}}
<!-2:><&>

(That means the (z) PE flag is splitting the & into a separate token when it should be all one token.)

zaidhaan commented 1 year ago

Looks like this is a zsh bug

Reported at https://zsh.org/workers/51819