本記事は2026-05-20のVim 駅伝の記事です。
テキストオブジェクトについて
皆さんテキストオブジェクト使ってますか?
テキストオブジェクトを使うと、操作(y, d, cなど)の範囲指定がとても楽になります。
たとえば単語をdeleteしたいとしましょう。
テキストオブジェクトを使わない場合は、bdeといった具合に、bでカーソルを単語先頭に移動してから、dでdeleteを開始して、eで単語の末尾までを範囲に指定する、という流れになります。カーソル合わせが面倒ですね。特にドットリピートしたい時は、カーソル合わせが頻発します。
ところが、iwというテキストオブジェクトを使えば、diwでカーソルを含む単語をdeleteできるため、カーソル位置はざっくりでよくなります。
様々なテキストオブジェクトが標準に存在しているので、使ってみてください。
新しいテキストオブジェクトのilとalについて
さて、ようやく本題。タイトル通りなのですが、Neovim 0.13(開発版)に新しいテキストオブジェクトが追加されました。
il- 空白を除いた1行
- inner lineと覚えるとよさそう
al- バッファ全体
- all linesと覚えるとよさそう
ilは割と定番の設定として知られてきたものですね。古くからあるVimプラグインでも実装されています。
ところで、このプラグインではalは空白も含む行全体をChar-wiseに選択するものでした。伝統的(?)なall linesに相当するものはaeで知られています。
伝統的なプラグインの定義とNeovimの新たな定義、どちらを好むかはユーザー次第かなと思います。
私の設定について
ちなみに私は今までalもilも設定してませんでした。行全体選択のalに需要がなかったこと、ilがキーが近くて打ちにくいことが理由です。
inner lineにはiiをマッピングしていました。
でも今回を機にNeovimに寄せてみようかなと思ってます。
alがバッファ全体で本当にいいの?と思われるかもしれませんが、行全体選択としてのalは以下の理由で相変わらず不要と思ってます。
そもそも、ほとんどの場合はyy, dd, ccといった行単位の操作で十分と感じています。
ただし、これらは改行も操作対象にするため、yypは現在行を新しい行にputするし、ddは現在行がなくなるので、若干不便なケースもあります。こういったとき、yalやdalが使えると、改行を除いた操作ができるわけですね。
しかし、0Yや0Dで十分対応可能と感じます。カーソルの位置合わせの負担がないことに加え、これらの操作でドットリピートしたいケースがまずないからですね。
0Dでドットリピートしたいときも、0で行頭にカーソルを持ってきてしまえば0Dj.j.j.j.j.できるので特に困りません。
と思ってるのですが、もし行選択としてのalがめっちゃ便利なんだよーとかあればぜひお知らせください。
ENJOY
Neovimの更新をウォッチしてると、気付きがあって楽しいですね。
Atusy's blog