Neovim Nightlyでターミナル内でプロンプト間をジャンプできるようになった(OSC133)

by
カテゴリ:

Vim駅伝2025-03-12の記事です。

最近、NeovimがOSC 133に対応しました(https://github.com/neovim/neovim/pull/32736)。

これにより、OSC 133に対応したシェルのユーザーであれば、[[]] を使って、:terminal内のシェルプロンプト間をジャンプできるようになります。

大量の行に渡る出力が発生した場合に、出力がどこから始まっているか、目で終わずにジャンプできるのは便利ですね。

ちなみに、TerminalモードからNormalモードに移行するには<C-\><C-N>ですが、私は<C-\><C-O>を使っていないので、単に<C-\>で移行できるようにマッピングしています。

OSC133を利用したい場合、fish >= 4.0では設定不要ですが、シェルによってはプロンプト先頭に特殊なエスケープシーケンスを追加する必要があります。 OSC133の仕様を読んで気付きましたが、最初はプロンプトの末尾に足して不可思議な改行が発生して頭を悩ませました。

fish < 4.0の場合はfish_prompt関数において、プロンプトの先頭に\e]133;A\e\\を追加します。

function fish_prompt
  echo -e "\e]133;A\e\\'<作業ディレクトリとかの情報> $'
end

Zshユーザーは以下の記事を参考にするとよさそうです。

zshでOSC 133に対応する by Yoshi Yamaguchi
https://zenn.dev/ymotongpoo/articles/20220802-osc-133-zsh

ENJOY!

前回はthincaさんによる「Meguro.vim #28 を開催しました」でした。継続できててすごい……。

次回はokmkmさんによる「Neovimを使い始めて半年経った若輩Vimmerが愛用しているプラグインの紹介」だそうです。最近、プラグインの棚卸できてないので楽しみ!

謝辞

delphiusさんに、fish 4.0であれば設定不要なことを教えていただき、自身の設定や本記事の修正ができました。ありがとうございます。