issues
issues copied to clipboard
一部の比較演算子で色が付かない
不具合の内容
表題通りで、見つけた範囲で !~, !~#, !~?, is?, isnot? は色が付きません
これはバグでしょうか?
再現手順
$ vim -u NONE +'syntax on | set filetype=vim'
で起動して、
if &filetype !~# '^v'
echo 1
endif
など適当なスクリプトを入力
補足
:syntax
を見てやると
vimOper xxx match /%#=1(==|!=|>=|<=|=~|!~|>|<|=)[?#]{0,2}/ nextgroup=vimString,vimSpecFile skipwhite match /(<is|<isnot)[?#]{0,2}>/ nextgroup=vimString,vimSpecFile skipwhite match /|||&&|[-+.!]/ nextgroup=vimString,vimSpecFile skipwhite links to Operator
とあるのですが…
また
~/.vim/after/syntax/vim.vim
に
syntax match vimOper /\%#=1\(==\|!=\|>=\|<=\|=\~\|!\~\|>\|<\|=\)[?#]\{0,2}/ nextgroup=vimString,vimSpecFile skipwhite
と記載すると、
!~, !~#, !~?
は色がつくので、他の定義で上書きされているようです
Vimのバージョン
$ vim --version VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Aug 11 2020 17:00:59) 適用済パッチ: 1-716
OSの種類/ディストリ/バージョン
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 20.10
Release: 20.10
Codename: groovy
$ uname -a
Linux xxxx 5.8.0-44-generic #50-Ubuntu SMP Tue Feb 9 06:29:41 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
たしかになりますね...バグ、かはちょっとまだわかりませんが。
やはり順序が一因ですね
ただ is?, isnot? は ~/.vim/after/syntax/vim.vim に
syntax match vimOper /\(\<is\|\<isnot\)[?#]\{0,2}\>/ nextgroup=vimString,vimSpecFile skipwhite
を追記しても、色が付かないので、順序だけの問題でもないんでしょうね
"\(\<is\|\<isnot\)[?#]\{0,2}\>"
これ、is#
,isnot#
はマッチするけどis?
,isnot?
はマッチしない。なぜなら'iskeyword'
に#
が入ってるので。
上記を含め、いくつか問題がありそうですが、手が届きそうにないので、最小限の修正に調整しました。
"(<is|<isnot)[?#]{0,2}>" これ、is#, isnot# はマッチするけど is?, isnot? はマッチしない。なぜなら 'iskeyword' に # が入ってるので。
iskeyword には思い足りませんでした
表題とズレてしまいますが、<Enter>も色が付きませんね $VIMRUNTIME/syntax/vim.vim の該当箇所で kenter→k\=enter としてやれば良さそうですけど