2011/07/16 (Sat)
パターンとの戦い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:]という表現もあるのですね。
コレクションの中ではこっち使えとヘルプに書いていましたね。見逃していました。
コメント