Neovim 0.13(開発版)にテキストオブジェクトが増えるらしい。ilで空白を除いた1行、alでバッファ全体だってよ

by
カテゴリ:
タグ:

本記事は2026-05-20のVim 駅伝の記事です。

テキストオブジェクトについて

皆さんテキストオブジェクト使ってますか?

テキストオブジェクトを使うと、操作(y, d, cなど)の範囲指定がとても楽になります。

たとえば単語をdeleteしたいとしましょう。

テキストオブジェクトを使わない場合は、bdeといった具合に、bでカーソルを単語先頭に移動してから、dでdeleteを開始して、eで単語の末尾までを範囲に指定する、という流れになります。カーソル合わせが面倒ですね。特にドットリピートしたい時は、カーソル合わせが頻発します。

ところが、iwというテキストオブジェクトを使えば、diwでカーソルを含む単語をdeleteできるため、カーソル位置はざっくりでよくなります。

様々なテキストオブジェクトが標準に存在しているので、使ってみてください。

https://vim-jp.org/vimdoc-ja/motion.html#text-objects

新しいテキストオブジェクトのilalについて

さて、ようやく本題。タイトル通りなのですが、Neovim 0.13(開発版)に新しいテキストオブジェクトが追加されました。

  • il
    • 空白を除いた1行
    • inner lineと覚えるとよさそう
  • al
    • バッファ全体
    • all linesと覚えるとよさそう

https://github.com/neovim/neovim/pull/39845

ilは割と定番の設定として知られてきたものですね。古くからあるVimプラグインでも実装されています。

https://github.com/kana/vim-textobj-user

ところで、このプラグインではalは空白も含む行全体をChar-wiseに選択するものでした。伝統的(?)なall linesに相当するものはaeで知られています。

https://github.com/kana/vim-textobj-entire

伝統的なプラグインの定義とNeovimの新たな定義、どちらを好むかはユーザー次第かなと思います。

私の設定について

ちなみに私は今までalilも設定してませんでした。行全体選択のalに需要がなかったこと、ilがキーが近くて打ちにくいことが理由です。 inner lineにはiiをマッピングしていました。

でも今回を機にNeovimに寄せてみようかなと思ってます。

alがバッファ全体で本当にいいの?と思われるかもしれませんが、行全体選択としてのalは以下の理由で相変わらず不要と思ってます。

そもそも、ほとんどの場合はyy, dd, ccといった行単位の操作で十分と感じています。

ただし、これらは改行も操作対象にするため、yypは現在行を新しい行にputするし、ddは現在行がなくなるので、若干不便なケースもあります。こういったとき、yaldalが使えると、改行を除いた操作ができるわけですね。

しかし、0Y0Dで十分対応可能と感じます。カーソルの位置合わせの負担がないことに加え、これらの操作でドットリピートしたいケースがまずないからですね。

0Dでドットリピートしたいときも、0で行頭にカーソルを持ってきてしまえば0Dj.j.j.j.j.できるので特に困りません。

と思ってるのですが、もし行選択としてのalがめっちゃ便利なんだよーとかあればぜひお知らせください。

ENJOY

Neovimの更新をウォッチしてると、気付きがあって楽しいですね。