nvimでRubyを書いているときにドットを入力すると勝手にインデントが下がるのを防ぐ
/ 4 min read
Updated:Table of Contents
はじめに
前からnvim(Neovim)でRuby(Rails)を書いているときに、特定条件下で勝手にインデントが下がることがありました。
自分自身この条件を完全に把握しきれてないのですが、メソッドの中に入ってドットを入力したタイミングで勝手に下がるような気がしていました。ずっと気になっていたので、調べるとこちらの記事を見つけました。どうやらtreesitterにインデントの設定があり、そちらが問題を起こす可能性があるようでした。
nvim-treesitter は Python のインデントを壊す (共存方法まで紹介)
自分のtreesitterの設定を見直したところindentの設定をしていたため、試しに無効にするとインデントが下がる問題を解決しました。
が…これだと改行したときにいい感じにインデントが効いてくれないという問題が新たに発生しました。イメージとしてはこんな感じです。
def hoge |hogeで改行するとここにカーソルがきてほしいend
def hoge|がここにカーソルがくるend結局インデントがいい感じになってくれないのは変わらないので、treesitterの設定をどうにかする方法を調べました。すると同じような悩みを持っているユーザがいて、そちらの設定をしたところ直った気がするので紹介します。
修正方法
こちらのIssueに解決方法が載っていました(まさにIssueの本文に載っている動画の挙動で困っていました!)。
Ruby indent when entering a period · Issue #3363 · nvim-treesitter/nvim-treesitter
やってることはRubyのファイルを開いているときに、ドットを入力したときにインデントを効かせる設定リストから除外するみたいなことをやってるらしいです(ChatGPTに聞いた)。
vim.cmd('autocmd FileType ruby setlocal indentkeys-=.')この設定を入れてからインデントが勝手に下るということもなく、その他の操作も特に不便なく動いています。挙動が怪しくなったりしたら追記しておきます。
終わりに
treesitterのインデントの設定を見直して、ドットを入力したときに勝手にインデントが下がる問題を解決しました。treesitterはハイライトをいい感じにやってくれるくらいの認識しかなかったので、まさかインデントの問題がここに絡んでくるとは思っていませんでした。
インデント問題が直ってよかった!