Neovim toggle-term内のスペースが重い

SPCのtimeoutが原因でした

目次

問題: toggle-term内のspaceを開けると以上に重い

nvimでtoggle-termを使っているのですが、その上でスペースを入れる、つまりコマンドとオプションの入力などをすると以上に入力可能になるまでの時間が伸びる。

on toggle-term

ls .config/
# 👆このタイミングで`.config/`が入力できるようになるのが遅い

最初はzsh-abbrなどの展開が遅いのかと思っていた。しかしbashでも遅いので他の原因…

また後からわかりますがおそらくこの待ち時間は1000ms程度とわかります。コマンドラインとしてはストレスの出る遅さですね。

原因: SpaceをLeaderにしており、それのタイムアウト待ちだった

私はhelixに一瞬浮気したあたりからSpace keyをnvimのメインのleader keyにしていたのですが、そうするとSpaceを離しても1000msはspaceの判定が残るようになります。その間にfなどを押せば指定の操作が発火すると言う仕組みです。1つまり毎回1000msかけて入力されたspaceがprefixかspaceかを判定するわけです。

そしてなぜか使ってもいない<Leader>を使ったkey bindが設定に含まれていました。toggle termは普通にctrl + \の方が使いやすく、そのような設定にしてましたが念のためで<Leader>(Space)の設定も書いていたようです。

つまりtoggle term上でもSpaceが押されるたびに1000msの判定をしていた

そりゃ遅いわけです。

~/.config/nvim/lua/plugins/term.lua

return {
  {
    "akinsho/toggleterm.nvim",
    version = "*",
    config = function()
      -- 色んな設定

      -- Toggle terminal (`Ctrl + \`でtermをtoggleする)
      vim.keymap.set(
        { "n", "t" },
        "<C-\\>",
        function() vim.cmd("ToggleTerm") end,
        { noremap = true, silent = true }
      )

      -- 👇こいつが邪魔してた
      vim.keymap.set(
        { "n", "t" },
        "<Leader>\\",
        function() vim.cmd("ToggleTerm") end,
        { noremap = true, silent = true }
      )
    end,
  },
}

普通にこの"<Leader>\\",の設定を消して解決です。

快適zsh on toggleterm。

似ていることは前にもあった

snacks.nvimのlsp symbolsが遅かった原因-Zenn

だいたい同じ原因です。普通の入力に使うキーを無理矢理prefixとかのメタ的なキーにするのはちょっと面倒くさいですね。

Footnotes

  1. 私の場合はfzf finder