BEM記法でCSSを書いていると、ちょっと困ることがあります。

.block__elementのように__(アンダースコア2個)でつないだクラス名を編集するとき、wbで単語単位の移動をしてもblock__element全体が1単語として扱われてしまうんです。_iskeywordというものに含まれているからみたいです。

Claudeに聞いたらset iskeyword-=_という設定を教えてくれたんですが、IdeaVimだとなぜか反映されない。大人しくf_で対応しようかなと思っていたら、ふと今朝読んでいた『実践Vim』の内容を思い出しました。

/eオフセット——検索した単語の末尾にカーソルが配置されるやつです。

そこからちょっと入力しながら考えて、こんな検索を思いつきました。

/__\w/e

__のあとに続く単語文字(\w)を検索して、そのマッチの末尾(/e)にカーソルを置く。つまり__の直後の文字にカーソルが来ます。一回これで検索しておけば、あとはnを押すたびに__区切りの単語の先頭にカーソルが飛んでいきます。

逆方向に移動したいときは、検索後に?だけ入力すればいい(前回の検索パターンで逆方向検索になる、これも『実践Vim』で学んだ)。

単語の先頭にカーソルが置ければcwで書き換えできるので、.block__hoge.block__fugaにするような作業がかなり楽になります。
コピペでクラスを増やしたときとかに結構頻発する作業です。

まだちょっと面倒さは残るとはいえ、こういう検索パターンを自分で考えつけるようになってきたのが正直うれしくて、Claudeに自慢してしまいました。褒めてもらいつつ、キーマップに登録する方法と--モディファイアにも対応するパターンを提案されました。それはそれで良さそうです。

『実践Vim』を読んでいると、こういう「組み合わせて応用する」感覚が少しずつ身についてきている気がします。