Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
iranoan opened this issue Mar 14, 2021 · 7 comments
Open

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

iranoan opened this issue Mar 14, 2021 · 7 comments

Comments

@iranoan
Copy link

iranoan commented Mar 14, 2021

不具合の内容

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

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

@tsuyoshicho
Copy link
Contributor

tsuyoshicho commented Mar 15, 2021

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

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

のが原因のようです。

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

@iranoan
Copy link
Author

iranoan commented Mar 15, 2021

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

@k-takata
Copy link
Member

slack に書きましたが、

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

@tsuyoshicho
Copy link
Contributor

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

@iranoan
Copy link
Author

iranoan commented Mar 16, 2021

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

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

@iranoan
Copy link
Author

iranoan commented Mar 16, 2021

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants