スポンサーリンク

Vim でスネークケース(アンダースコア区切り)の単語単位でカーソル移動できるようにする方法

自分は普段使っているエディタや IDE では Vim キーバインドを設定して使っています。

Vim のキー操作には単語単位の移動があるのですが、スネークケース(get_user_id みたいなアンダースコア区切り) を移動する時は、get_user_id で1単語と認識されて、user って単語に移動したい時は少し入力キーが増えます。

自分は Python を使うことが多いので、1発で行きたい場所に行けない感じが地味に煩わしかったので、アンダースコア単位で単語と認識してカーソル移動させることができないものか?と調べたので、備忘録として記事にします。

Vim で単語の区切り文字をアンダースコアにする

さっそく結論

対応はとても簡単でした。

init.vim に下記の1行を追加するだけでした。

set iskeyword-=_

これを追記するだけで、アンダースコア区切りでカーソル移動をすることができます。

上記を追記したら、設定ファイルの再読み込みをすれば反映され、アンダースコア単位でカーソル移動するようになります。

深掘り

この設定がどのような意味なのかを説明すると、iskeyword は Vim が単語を構成する文字を定義するオプションです。

デフォルトの設定値は下記のドキュメントに記載がある通りです。

options - Vim日本語ドキュメント

ドキュメントに記載があるように、デフォルトでは _ (アンダースコア) が単語の構成文字に含まれています。

つまり、_ (アンダースコア) は単語の一部であるため、Vim で w, e, b などを使ったカーソル移動ではアンダースコアを飛び越えて一連の文字列の終わりや始まりまでカーソル移動します。

今回の設定では set iskeyword-=_ (-= を使う) を設定することで、_ (アンダースコア) を単語の構成文字から除外しました。

その結果、_ (アンダースコア) が区切り文字(単語の一部ではなくなった)としてカーソル移動するようになりました。

set iskeyword-={任意の文字列}

逆に特定の文字を単語の構成文字に含めたい場合は += を使って任意の文字を追加すると良いです。

例えばケバブケース(ハイフン繋ぎ)で書いた文字列を1つの単語と定義したい場合は下記のように書きます。

set iskeyword+=-

設定ファイルを再読み込みすると適用されると思います。

余談 : 結局戻したって話

あくまで自分の話ではあるのですが、この設定は割とすぐに戻しました。笑

_ (アンダースコア)を区切り文字にすると快適になるのではと思って設定したのですが、実際開発をしててアンダースコア区切りで動いてくれて嬉しい場面は意外と少なかったです。むしろ Python を書いていると、通常時のカーソル移動のためにキーを押す回数が圧倒的に増えて、なんか辛くなったので戻しました。

まとめ

自分は結局設定は元に戻しましたが、今回この設定をする上で色々と調べて学びはあったのでよかったと感じています。

皆様の役に立ちますと幸いです。

Vim
スポンサーリンク
ibukishをフォローする
スポンサーリンク
ibukish Lab+

コメント

タイトルとURLをコピーしました