Hatena::Groupvim

ドゥユーワナビカマヴィマー?

2011/07/16 (Sat)

パターンとの戦い1

20:43 | パターンとの戦い1 - ドゥユーワナビカマヴィマー? を含むブックマーク はてなブックマーク - パターンとの戦い1 - ドゥユーワナビカマヴィマー?

ここ最近、主にsyntaxファイルや、検索コマンドの定義に時間を費やしているので、作業は必然的に、パターンとの戦いになります。

その過程で、新しいパターンの書き方を発見しては、その都度以前書いた、めんどくせぇ書き方を修正する作業を繰り返しています。

大抵、動かないときは自分のパターンの書き方がまずかったりするわけです。

が、なんで動かないのかよく分からないことも結構あるわけです。

これからしばらくは、詰まったところについての記録をしていく予定です。

今日詰まったところ

否定のコレクション[^;]の中に、空白文字も含めて、[^;\s](";"と空白文字以外)を実現したかったのですが、これではなぜか空白文字を正しく認識しない。

    syntax match sowTag /;[^;\s]\{-1,};/

とすると、空白文字を含んでしまったりして具合が悪い。

[^; \t]と書くことで解決した。

なぜかは知らないけれど、コレクションの中に\sを使うと正しく挙動しないようですね。

これを知ったので、前回のソースで使っていた

syntax region sowUrl start=/h\?ttps\?:\/\// end=/[\[\]<>"{}|\\\^`]\|\_s/me=s-1 nextgroup=sowUrlAttribute skipwhite skipnl

のendの部分も、わざわざ分けずに書くことができるようになりました。

syntax region sowUrl start=/h\?ttps\?:\/\// end=/[\[\]<>"{}|\\\^` \t\n]/me=s-1 nextgroup=sowUrlAttribute skipwhite skipnl

どっちの方が動作が速いのかは分かりません。もしかしたら前の方が早いのかも知れませんが。

しかし、なぜ\sが使えないのか。謎です。

追記:よく見たら、[:blank:]という表現もあるのですね。

コレクションの中ではこっち使えとヘルプに書いていましたね。見逃していました。