issues icon indicating copy to clipboard operation
issues copied to clipboard

一部の比較演算子で色が付かない

Open iranoan opened this issue 3 years ago • 7 comments

不具合の内容

表題通りで、見つけた範囲で !~, !~#, !~?, 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

iranoan avatar Mar 14 '21 16:03 iranoan

たしかになりますね...バグ、かはちょっとまだわかりませんが。

tsuyoshicho avatar Mar 15 '21 14:03 tsuyoshicho

slack内でいろいろ相談、考えたところ

  • vim.vimのルール順序があまりよくない

のが原因のようです。

PRは作りましたが、入るかは微妙です。

tsuyoshicho avatar Mar 15 '21 14:03 tsuyoshicho

やはり順序が一因ですね ただ is?, isnot? は ~/.vim/after/syntax/vim.vim に syntax match vimOper /\(\<is\|\<isnot\)[?#]\{0,2}\>/ nextgroup=vimString,vimSpecFile skipwhite を追記しても、色が付かないので、順序だけの問題でもないんでしょうね

iranoan avatar Mar 15 '21 15:03 iranoan

slack に書きましたが、

"\(\<is\|\<isnot\)[?#]\{0,2}\>" これ、is#, isnot# はマッチするけど is?, isnot? はマッチしない。なぜなら 'iskeyword'# が入ってるので。

k-takata avatar Mar 15 '21 15:03 k-takata

上記を含め、いくつか問題がありそうですが、手が届きそうにないので、最小限の修正に調整しました。

tsuyoshicho avatar Mar 15 '21 15:03 tsuyoshicho

"(<is|<isnot)[?#]{0,2}>" これ、is#, isnot# はマッチするけど is?, isnot? はマッチしない。なぜなら 'iskeyword' に # が入ってるので。

iskeyword には思い足りませんでした

iranoan avatar Mar 16 '21 03:03 iranoan

表題とズレてしまいますが、<Enter>も色が付きませんね $VIMRUNTIME/syntax/vim.vim の該当箇所で kenter→k\=enter としてやれば良さそうですけど

iranoan avatar Mar 16 '21 16:03 iranoan