{...}: let mk = key: action: desc: { mode = "n"; inherit key action; options = { silent = true; inherit desc; }; }; mkRaw = key: raw: desc: { mode = "n"; key = key; action.__raw = raw; options = { silent = true; desc = desc; }; }; in { programs.nixvim.keymaps = [ # Search (mk "" "nohlsearch" "検索ハイライトを解除") # Screen line movement { mode = "n"; key = "j"; action.__raw = "vim.v.count == 0 and 'gj' or 'j'"; options = { silent = true; expr = true; desc = "下へ移動(画面行優先)"; }; } { mode = "n"; key = "k"; action.__raw = "vim.v.count == 0 and 'gk' or 'k'"; options = { silent = true; expr = true; desc = "上へ移動(画面行優先)"; }; } # LSP (mkRaw "K" "vim.lsp.buf.hover" "LSPエラーのホバー表示") (mk "gd" "Glance definitions" "定義へ移動") (mk "gr" "Glance references" "参照を表示") (mkRaw "rn" "vim.lsp.buf.rename" "シンボル名を一括変換") (mkRaw "cf" "function() require('conform').format({ timeout_ms = 1000, lsp_format = 'fallback' }) end" "コードをフォーマット") (mkRaw "ca" "function() vim.lsp.buf.code_action({ context = { diagnostics = vim.diagnostic.get(0, { lnum = vim.fn.line('.') - 1 }) } }) end" "コードアクション") # Diagnostics (mkRaw "]d" "vim.diagnostic.goto_next" "次のエラー") (mkRaw "[d" "vim.diagnostic.goto_prev" "前のエラー") (mkRaw "dl" "vim.diagnostic.open_float" "エラー詳細") # File tree (mk "e" "Neotree toggle left" "ファイルツリー") # Terminal (mk "tt" "ToggleTerm direction=float" "ターミナル") # Diagnostics list (mk "xx" "Trouble diagnostics toggle" "エラー一覧") # Window navigation (mk "" "h" "左のウィンドウへ") (mk "" "j" "下のウィンドウへ") (mk "" "k" "上のウィンドウへ") (mk "" "l" "右のウィンドウへ") # Buffer Bar (mk "[b" "BufferPrevious" "前のバッファーに移動") (mk "]b" "BufferNext" "後のバッファーに移動") (mk "bc" "BufferClose" "バッファーを削除") # Git (mk "gl" "LazyGit" "LazyGitを開く") (mk "gd" "DiffviewOpen" "差分を開く") (mk "gH" "DiffviewFileHistory" "リポジトリ履歴") (mk "gh" "DiffviewFileHistory %" "ファイル履歴") (mk "gq" "DiffviewClose" "差分を閉じる") # Markview (mk "mp" "Markview splitToggle" "Markdownプレビュー") # Zen Mode (mk "zz" "ZenMode" "Zen Modeを開く/閉じる") # UFO (folding) (mkRaw "zR" "require('ufo').openAllFolds" "全て展開") (mkRaw "zM" "require('ufo').closeAllFolds" "全て折りたたむ") # Dropbar (mkRaw "dp" "function() require('dropbar.api').pick() end" "dropbarでナビゲート") # Snacks (mkRaw "sd" "function() Snacks.dim.toggle() end" "Dimモードをトグル") # Flash (mkRaw "s" "function() require('flash').jump() end" "Flashジャンプ") (mkRaw "S" "function() require('flash').treesitter() end" "Flashツリーシッタ選択") # Todo Comments (mk "]t" "TodoNext" "次のTODO") (mk "[t" "TodoPrev" "前のTODO") (mkRaw "ft" "function() Snacks.picker.todo_comments() end" "TODO一覧") # Spectre (mkRaw "sr" "function() require('spectre').toggle() end" "検索・置換") # Snacks Picker (mkRaw "ff" "function() Snacks.picker.files() end" "ファイルを探す") (mkRaw "fg" "function() Snacks.picker.grep() end" "文字列を全文検索") (mkRaw "fb" "function() Snacks.picker.buffers() end" "開いているバッファを探す") (mkRaw "fh" "function() Snacks.picker.help() end" "ヘルプ項目を探す") (mkRaw "fk" "function() Snacks.picker.keymaps() end" "キーマップを探す") (mkRaw "fc" "function() Snacks.picker.commands() end" "コマンドを探す") ]; }