Humanity

Edit the world by your favorite way

Vimの正規表現のハマりどころ

ばよえ〜ん(訳:Vim Advent Calendar 2012への10回目の投稿です)
この記事はVim Advent Calendar 2012の113日目の記事になります。
112日目は@manga_osyoさんのVim とスマホ(Android)でメモをとるでした。
記念すべき10回目ですが奇を衒わず正規表現ネタで行こうと思います。


id:thincaさんにツッコミ頂いてるので、コメント欄も合わせてお読みください。

iskeywordに影響される\<、\>、\k

ハマった記録がこちら。
vimrcにあるURLが開けない · Issue #22 · tyru/open-browser.vim · GitHub
macvim-kaoriyaのみ?で filetype=vim の時だけ正規表現がマッチしない · Issue #334 · vim-jp/issues · GitHub


filetype=vim だと通常「:」が
runtimeファイルによって自動的にiskeywordに含まれます。


runtimeファイルとはVimにデフォルトでついてきたsyntaxファイル、ftpluginファイル等の事です。
Vimはこのデフォルトのsyntaxファイルがとても多い(syntax highlightのサポートが豊富な)事が優れている点の一つです。


しかし以前は「:」はiskeywordには含まれておらず、 iskeywordの変更は「*」「w」等の様々な挙動を変えるため、挙動を変えたくなかった私はafterディレクトリのfiletype=vim用ftpluginファイルで iskeywordから「:」を除外するよう設定しました。これがアダとなりました。
個人的にはiskeywordやisfnameなんて大雑把なオプションがなんとなく好きになれなかったのですが、今回の一件で大嫌いになりました。(八当たり)


まぁハマったとかいいつつ結局解決(しかも一瞬で)してくれたのはynkdirさんな訳で、足を向けて寝れません。
住まいはどちらか存じませんが向けてない事を祈ります。

魔法(magic)は全てを変える

\vをつけるとmagicがオンのように振舞います。
\Vをつけるとnomagic になります。
では両方とも正規表現につけられていない場合は?
それはVimの現在のmagicオプションの値によって決められます。
オプション値によって正規表現の方言の解釈が変わってしまうVimscript、恐ろしい世界です。
(しかし実際にはmagicオプションなんて誰も.vimrcで変えたりしないので、デフォルトのnomagicになっていることを前提にして書かれているVimスクリプトがほとんどです)

+に\をつけ忘れる

これはVimscript書き初めの頃によくやってしまうあるあるネタです。
...しかしこの時期を過ぎるともっと深刻な次の問題にぶち当たります。

普段の正規表現Vim訛りが出てしまう

「え?今訛ってた?完全に無意識だったわ」
つまり普段の正規表現を書いている時に「\+」と書いてしまうのです。
正に精神をVimにやられている状態、いわゆる「腐ってやがる、(Vimは人類には)早すぎたんだ」状態です。
Vimニンジャへのアップデートが望まれます。


これをやらかしてしまった時の虚無感は異常です。
Vimscriptを書き過ぎた代償による反動...
かといって便利な部分も数々あるVim正規表現を憎み切れず、Vimが悪いのではない、構文自体が正規化されてない正規表現という矛盾を孕んだ存在が悪いのだ、という結論に至ります。


ではVimmerはこれからも精神を汚染され続けていくのでしょうか?
また、Vimを使い始める人はこうした正規表現と契約しないとVimを使えないのでしょうか?


こうした悲劇を繰り返さず、かつVimscriptを書く事もやめないための方法が一つあります。
それは「\v」を正規表現のパターンに付け、他方言の正規表現と概ね似た構文でVimscriptを書く事です。
これなら仕事でうっかりVim訛りが出てしまい同僚にVimバレする事もありません。


しかし同僚がVimmerかつ美少女だった場合はあえてVimバレしてみるのも手かもしれません。
Vimから始まる縁もある事でしょう。


(まどマギネタの流れはガン無視されました。続きを読むには契約して下さい)