Tag: Neovim

cheatsheet/snacks.nvim

Snacks.nvim

rafi/vim-config を LazyVim の現行寄りに使う前提の snacks.nvim チートシート。 <leader>Space<localleader>;。 起動キーは 2026-05-29 時点の手元環境で maparg() を見て確認したもの。

ファイラは lazyvim.plugins.extras.editor.snacks_explorer を有効にした Snacks Explorer を使う。 個人プラグイン側で Snacks Explorer を無効化する override は置かない。

起動

効果キー
picker 一覧Space ;
ファイル検索(root dir)Space Space, Space ff
ファイル検索(cwd)Space fF
git 管理ファイル検索Space fg
カーソル下の語でファイル検索Space gf
最近開いたファイルSpace fr
最近開いたファイル(cwd)Space fR
grep(root dir)Space /, Space sg
grep(cwd)Space sG
カーソル下/選択範囲を grep(root dir)Space sw
カーソル下/選択範囲を grep(cwd)Space sW
buffer 行検索Space sb
search and replaceSpace sr
picker resumeSpace sR
zoxide;z
spelling suggestion;u
notification historySpace n
scratch buffer toggleSpace .
scratch buffer 選択Space S
Snacks Explorer(root dir);e, Space e, Space fe
Snacks Explorer(cwd);E, Space E, Space fE
現在ファイルを Explorer で reveal(root dir);a
現在ファイルを Explorer で reveal(cwd);A

Picker

効果キー
決定して開くEnter
window を選んで開くShift Enter
キャンセルEsc, q
help?
入力窓とリストの focus 切り替え/
次/前へ移動Ctrl j, Ctrl k, Ctrl n, Ctrl p, j, k
下/上へスクロールCtrl d, Ctrl u
preview を下/上へスクロールCtrl f, Ctrl b
preview を右/左へスクロールCtrl l, Ctrl h
複数選択して次/前へTab, Shift Tab
全選択Ctrl a, *
quickfix へ送るCtrl q, e
location list へ送るE
split / vsplit / tab で開くCtrl s, Ctrl v, Ctrl t
split / vsplit / tab で開く(rafi 追加)sv, sg, st
hidden files toggleAlt h, .
ignored files toggleAlt i, ,
preview toggleAlt p
follow mode toggleAlt f
live grep toggleCtrl g
regex toggleAlt r
最大化 toggleAlt m
picker window cycleAlt w
flash jumpss
insert mode から抜けるjj
選択して前/次へ進むK, J

filesgrep source は hidden files を見る設定になっている。 そのため通常は dotfile も候補に出る。 ignored files は , または Alt i で切り替える。

Read more...

neovimでvim-neon-darkでエラーが出た

発生したエラー

Error in decoration provider treesitter/highlighter.line:
Error executing lua: .../vim-neon-dark/lua/vim-neon-dark.lua:55: attempt to call field 'get_node_text' (a nil value)

Tree-sitter のハイライト系統の内部で、vim-neon-dark テーマの Lua コードから get_node_text を呼び出していることが原因でした。

検証ログ

Neovim のバージョン

nvim --version
NVIM v0.10.5-dev-22+g0c995c0efb

vim.treesitter.get_node_text が実行時に nil か確認

:lua print(vim.inspect(vim.treesitter.get_node_text))

結果:

<function 1>

→ Neovim 側に関数は存在する

ldd で Tree-sitter が外部ライブラリか確認

ldd $(which nvim) | grep tree-sitter

結果: 空。→ Neovim 側に静的リンクされていると分かる

原因

  • vim-neon-dark の Lua コード内で vim.treesitter.query.get_node_text() を呼び出している
  • これは Neovim 0.10 以上では存在しない (deprecated)
  • vim.treesitter.get_node_text() を使ってみた

対処

エラーの起点

Read more...

mcphub.nvimのメモ

mcphub.nvimのメモ

2025年はAI IDEが流行っている。VSCodeのAI IDEは有名だが、neovimでもMCPを使うことができる。

インストール

使い方

エラー対応

npm ERR! code EACCES

パーミッションのエラーが出る

npm ERR! code EACCES
npm ERR! syscall rename
npm ERR! path /usr/local/bin/mcp-hub
npm ERR! dest /usr/local/bin/.mcp-hub-eluhfCZx
npm ERR! Error: EACCES: permission denied, rename '/usr/local/bin/mcp-hub' -> '/usr/local/bin/.mcp-hub-eluhfCZx'
  • /usr/local/bin/mcp-hub を書き換え(rename)ようとしたが
  • 現在のユーザーには /usr/local/bin/ を操作する権限がなかった ために、Permission denied (EACCES) エラーになっています。

一旦、rootになって下記のようにmcp-hubを再インストールする

sudo npm install -g mcp-hub

まだ未検証だが、下記のようにインストールパスを変更する事も可能かも

mkdir -p ~/.npm-global
npm config set prefix '~/.npm-global'

# パスを通す(これを ~/.bashrc や ~/.zshrc などにも追記すると良い)
export PATH="$HOME/.npm-global/bin:$PATH"

不安定だな

たまに起動しない時がある ただ、これは私がコンテナ環境でnvimを実行しているのもありそう。だがログとして残す

Read more...

avante.nvimのメモ

avante.neovimのメモ

2025年はAI IDEが流行っている。VSCodeのAI IDEは有名だが、neovimでもAI IDEを行うことができる。そのために、avante.neovimを使う。

インストール

avante.nvimのオフィシャルサイトの手順に従ってインストールする。

ここにあるように設定を入れる

私はrafiのnvim設定を用いているので ~/.config/nvim/lua/plugins/avante.lua を作成して、冒頭に return を追記して動作した

現在は ~/.config/nvim/lua/plugins/avante.lua に設定を置いている。 provider は gemini、input provider は snacks にしている。

Avante は Lua 部分だけでなく avante_templatesavante_tokenizersavante_repo_mapavante_html2md などの native module も使う。 そのため、プラグインがロードできるだけでは十分ではなく、build/*.so があるかまで確認する。

make -C ~/.local/share/nvim/lazy/avante.nvim

2026-05-29 に確認した時点では、build 前は require("avante") は通るが native module が読めない状態だった。 make 実行後、次が作られた。

~/.local/share/nvim/lazy/avante.nvim/build/avante_html2md.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_repo_map.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_templates.so
~/.local/share/nvim/lazy/avante.nvim/build/avante_tokenizers.so

テスト

Neovim の plugin 設定は、実 UI を開く前に headless で最低限テストする。

nvim --headless '+lua local lazy=require("lazy"); local C=require("lazy.core.config"); local p=C.plugins["avante.nvim"]; print("avante_spec=" .. tostring(p ~= nil)); if p then print("avante_enabled=" .. tostring(p.enabled ~= false)); print("avante_lazy=" .. tostring(p.lazy)); end; lazy.load({ plugins = { "avante.nvim" }, wait = true }); local ok, avante = pcall(require, "avante"); print("avante_require=" .. tostring(ok)); if not ok then print("avante_error=" .. tostring(avante)); end; print("AvanteAsk_cmd=" .. tostring(vim.fn.exists(":AvanteAsk"))); local opts = LazyVim.opts("avante.nvim"); print("avante_provider=" .. tostring(opts.provider)); print("avante_input_provider=" .. tostring(opts.input and opts.input.provider)); vim.cmd("qa")'

期待値は次の通り。

Read more...

Neovim で Golang のデバッグ環境を構築する方法

この記事では、Neovim で Golang のデバッグ環境を構築する手順について紹介します。 具体的には、Delve を利用した nvim-dap の設定や、動的に CLI 引数を入力する方法、さらに視覚的にデバッグ情報を表示する nvim-dap-ui の導入方法について解説します。

必要なツールと前提条件

  • Neovim: v0.10.5
  • Go: Go の実行環境および go.mod で管理されたプロジェクトが必要です。
  • Delve: Golang 用デバッガである Delve をインストールしてください。
    • go install github.com/go-delve/delve/cmd/dlv@latest
  • LazyVim / lazy.nvim
    • Neovim の設定管理ツールとして LazyVim を使用しています。
  • プラグイン

nvim-dap の基本設定

まずは、nvim-dap を LazyVim の仕組みを利用して設定します。 以下のサンプル設定では、Go 用のアダプタとして Delve を利用し、単一ファイル実行と動的な CLI 引数入力の2種類のデバッグ構成を用意しています。

-- ~/.config/nvim/lua/plugins/nvim-dap.lua
return {
  "mfussenegger/nvim-dap",
  event = "VeryLazy",  -- lazy.nvim の遅延読み込みイベント
  config = function()
    local dap = require("dap")

    -- Go 用のアダプタ設定(Delve を利用)
    dap.adapters.go = {
      type = "executable",
      command = "dlv",
      args = { "dap" },
    }

    -- デバッグ構成の定義
    dap.configurations.go = {
      {
        type = "go",
        name = "Launch file",
        request = "launch",
        program = "${file}",
        cwd = "${workspaceFolder}",
      },
      {
        type = "go",
        name = "Launch file (with arguments)",
        request = "launch",
        program = "${file}",
        cwd = "${workspaceFolder}",
        args = function()
          local input = vim.fn.input("Enter CLI arguments: ")
          return vim.split(input, " ", { trimempty = true })
        end,
      },
      {
        type = "go",
        name = "Launch package (with arguments)",
        request = "launch",
        program = "${workspaceFolder}",  -- パッケージ全体をビルド対象にする
        cwd = "${workspaceFolder}",
        args = function()
          local input = vim.fn.input("Enter CLI arguments: ")
          return vim.split(input, " ", { trimempty = true })
        end,
      },
      {
        type = "go",
        name = "Debug tests",
        request = "launch",
        mode = "test",
        program = "${file}",
      },
    }

    -- キーマッピングの設定例
    vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
    vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Start Debugging" })
    vim.keymap.set("n", "<leader>di", dap.step_into, { desc = "Step Into" })
    vim.keymap.set("n", "<leader>do", dap.step_over, { desc = "Step Over" })
    vim.keymap.set("n", "<leader>dO", dap.step_out, { desc = "Step Out" })
  end,
}

ポイント

  • program と cwd の設定
    • 単一ファイルの場合は ${file}、複数ファイルを含むパッケージの場合は ${workspaceFolder} を指定します。
  • 動的 CLI 引数入力
    • args を関数にして、デバッグ開始時にユーザーから CLI 引数を入力させるようにしています。

nvim-dap-ui の導入と設定

続いて、視覚的にデバッグ情報を表示するために nvim-dap-ui を設定します。 nvim-dap-ui は nvim-dap に依存するため、LazyVim の設定では dependencies を指定しておきます。

Read more...

Neovim で neotest でのテスト環境を構築する方法

この記事では、Neovim で Golang のテストを実行するまでの手順を紹介します

必要なツールと前提条件

  • Neovim: v0.10.5
  • Go: Go の実行環境および go.mod で管理されたプロジェクトが必要です。
  • LazyVim / lazy.nvim
    • Neovim の設定管理ツールとして LazyVim を使用しています。
  • プラグイン

neotest の基本設定

私はrafi/vim-configを利用しています。 “extras” plugins として lazyvim.plugins.extras.test.core がリストの中にありました。 :LazyExtras でLazyVimのメニューを出し、testで検索、xで有効、neovimの再起動でインストールされました。

neotest 使い方

<leader> t でテスト関連のメニューが開き

  • t テストファイルを開いた状態で実行すると、そのテストファイルの内容が実行される
  • T と押すと全てのテストが実行

まずは、nvim-dap を LazyVim の仕組みを利用して設定します。 以下のサンプル設定では、Go 用のアダプタとして Delve を利用し、単一ファイル実行と動的な CLI 引数入力の2種類のデバッグ構成を用意しています。

-- ~/.config/nvim/lua/plugins/nvim-dap.lua
return {
  "mfussenegger/nvim-dap",
  event = "VeryLazy",  -- lazy.nvim の遅延読み込みイベント
  config = function()
    local dap = require("dap")

    -- Go 用のアダプタ設定(Delve を利用)
    dap.adapters.go = {
      type = "executable",
      command = "dlv",
      args = { "dap" },
    }

    -- デバッグ構成の定義
    dap.configurations.go = {
      {
        type = "go",
        name = "Launch file",
        request = "launch",
        program = "${file}",
        cwd = "${workspaceFolder}",
      },
      {
        type = "go",
        name = "Launch file (with arguments)",
        request = "launch",
        program = "${file}",
        cwd = "${workspaceFolder}",
        args = function()
          local input = vim.fn.input("Enter CLI arguments: ")
          return vim.split(input, " ", { trimempty = true })
        end,
      },
      {
        type = "go",
        name = "Launch package (with arguments)",
        request = "launch",
        program = "${workspaceFolder}",  -- パッケージ全体をビルド対象にする
        cwd = "${workspaceFolder}",
        args = function()
          local input = vim.fn.input("Enter CLI arguments: ")
          return vim.split(input, " ", { trimempty = true })
        end,
      },
      {
        type = "go",
        name = "Debug tests",
        request = "launch",
        mode = "test",
        program = "${file}",
      },
    }

    -- キーマッピングの設定例
    vim.keymap.set("n", "<leader>db", dap.toggle_breakpoint, { desc = "Toggle Breakpoint" })
    vim.keymap.set("n", "<leader>dc", dap.continue, { desc = "Start Debugging" })
    vim.keymap.set("n", "<leader>di", dap.step_into, { desc = "Step Into" })
    vim.keymap.set("n", "<leader>do", dap.step_over, { desc = "Step Over" })
    vim.keymap.set("n", "<leader>dO", dap.step_out, { desc = "Step Out" })
  end,
}

ポイント

  • program と cwd の設定
    • 単一ファイルの場合は ${file}、複数ファイルを含むパッケージの場合は ${workspaceFolder} を指定します。
  • 動的 CLI 引数入力
    • args を関数にして、デバッグ開始時にユーザーから CLI 引数を入力させるようにしています。

nvim-dap-ui の導入と設定

続いて、視覚的にデバッグ情報を表示するために nvim-dap-ui を設定します。 nvim-dap-ui は nvim-dap に依存するため、LazyVim の設定では dependencies を指定しておきます。

Read more...

CLIツールのショートカットを統一していきたい

背景

CLI関連のツール、tmux, w3m, weztermのキーバインドを揃えたい。ひとまずリストを出す。 ローカルのマシン(macOSなりLinuxなどのデスクトップ環境)ではWezTermとtmuxを用いている。 (以前はgnome-terminal, mltermを用いていたが、sixel対応と設定がluaで書ける点からWezTermを始めた)

将来的に下記の条件が成立したらgnome-terminal, mltermに戻るかも

  1. tmuxのsixel対応が安定動作する
  2. macOS, Linuxの設定ファイルを共通にしたい(WezTermだとOSによってif文で設定を変えられる)
  • tmuxもif-shellで振る舞いを分岐できるようになった

関連ページ

WezTermtmuxneovimw3m
cheat sheetcheat sheet tmuxcheat sheet vimcheat sheet w3m
私のメモtmuxvimw3m
私の設定リポジトリ

現在のキーバインド

prefix

WezTerm(tmux1)tmux2(ローカルで用いる)tmux3(リモートで用いる)
ctrl + yctrl + tctrl + b

リモートサーバ上でtmuxを用いる場合はtmux3のprefixを使う。

ショートカット

weztermtmuxneovimw3m
新しいウィンドウ(タブ)を作るcctabnewCtrl + T
現在のウィンドウ(タブ)を閉じるCtrl + d でexitCtrl + d でexit:wqCtrl + Q
ウィンドウ(タブ)を右に移動nngt}
ウィンドウ(タブ)を左に移動ppgT{
ウィンドウ(タブ)のリストEsc + t

設定が被らないように既存の設定を確認する

環境表示方法設定ファイル
bashbind -P~/.inputrc
fishbind あるいは fish_key_reader~/.config/fish/functions/fish_user_key_bindings.fish
tmuxprefix -> :list-keys~/.config/tmux/tmux.conf
w3m起動中にHを押す~/.w3m/keymap
wezterm
Read more...