← Vim研究所

Vimの検索オフセットで、検索後のカーソル位置を指定する

2026-08-03 公開

検索してマッチした文字列の末尾にカーソルを移動させたいのに、毎回/wordのあとにelを何度も押して調整していた時期がある。検索コマンド自体に「マッチ位置からどれだけずらすか」を直接指定できる仕組みがある。

基本の書き方

/{検索キーワード}/{オフセット}<Enter>
?{検索キーワード}?{オフセット}<Enter>

検索キーワードのあとにもう一度区切り文字(/または?)を挟んでオフセットを書く。上方向検索の?を使う場合は、オフセット側の区切りも?にする必要がある点は間違えやすい。

よく使うオフセット

オフセット移動先
eマッチした文字列の末尾
e+N / e-N末尾からN文字右/左
s+N / s-N先頭からN文字右/左(bでも同じ)
N / +Nマッチした行からN行下
-Nマッチした行からN行上

もっとも使う場面が多いのはeだ。マッチした単語の末尾に一発で移動できるので、そこからaで追記したり、次の操作につなげたりしやすくなる。

/word/e<Enter>

オペレータと組み合わせる

検索オフセットは移動先の指定なので、オペレータと組み合わせるとその区間がまとめて操作対象になる。マッチした部分を書き換える定番パターンが次の形だ。

/foo<CR>
c//e<CR>bar<Esc>

最初にfooを検索し、c//e(直前の検索パターンをそのままオフセットe付きで再利用して変更)でbarに書き換える。//は直前の検索パターンを再利用する記法で、同じ単語を続けて書き換えたいときに毎回パターンを打ち直さずに済む。

単に移動したいだけなら n/N でも足りる

すでに検索済みのパターンをオフセット付きで再検索したいだけなら、n(次のマッチへ)やN(前のマッチへ)でも移動はできる。ただしn/Nは元の検索時に指定したオフセットを引き継がないため、末尾ぴったりに止めたいといった細かい位置指定をしたい場合は、そのつどオフセット付きで検索し直す必要がある。移動先の精度にこだわらないならn/N、正確な位置に止めたいならオフセット、と使い分けるとよい。

要点:オフセットは「検索してから移動する」を1コマンドにまとめる仕組み。単体でも便利だが、c//eのようにオペレータと組み合わせると効果が跳ね上がる。
使ってみて

最初はeオフセットだけ覚えて満足していたが、同じ単語を複数箇所で書き換える作業をしていたときにc//eの連打パターンを知ってから作業速度が変わった。検索して、書き換えて、nで次へ、またc//eという流れが手に馴染むと、置換コマンドを使う場面がかなり減った。行オフセットの+N/-Nは当初あまり使わないだろうと思っていたが、ログファイルで特定のキーワードの数行下にある値だけ確認したいときに地味に重宝している。

まとめ

検索オフセットは地味だが、マッチ位置からの移動を1コマンドに圧縮できる。特にeオフセットとオペレータの組み合わせは覚えておく価値が高い。

← Vim研究所 トップへ戻る