From 310cd1a2decc6c3a19069ca09909d04e296f18c9 Mon Sep 17 00:00:00 2001 From: "David T. Sadler" Date: Fri, 13 Feb 2026 17:00:18 +0000 Subject: Configure key mappings for pickers in Neovim --- nvim/.config/nvim/lua/config/keymaps.lua | 60 ++++++++++++++++++++++++--- nvim/.config/nvim/lua/plugins/nord.lua | 4 ++ nvim/.config/nvim/lua/plugins/snacks-nvim.lua | 1 + 3 files changed, 59 insertions(+), 6 deletions(-) diff --git a/nvim/.config/nvim/lua/config/keymaps.lua b/nvim/.config/nvim/lua/config/keymaps.lua index f3942cb..00d74ee 100644 --- a/nvim/.config/nvim/lua/config/keymaps.lua +++ b/nvim/.config/nvim/lua/config/keymaps.lua @@ -24,10 +24,10 @@ set('v', '', ":execute \"'<,'>move '>+\" . v:count1gv=gv", { desc set('v', '', ":execute \"'<,'>move '<-\" . (v:count1 + 1)gv=gv", { desc = 'Move Up' }) -- Buffer navigation. -set('n', '', 'bprevious', { desc = 'Prev Buffer' }) -set('n', '', 'bnext', { desc = 'Next Buffer' }) -set('n', '[b', 'bprevious', { desc = 'Prev Buffer' }) -set('n', ']b', 'bnext', { desc = 'Next Buffer' }) +set('n', '<,', 'bprevious', { desc = 'Prev Buffer' }) +set('n', '>.', 'bnext', { desc = 'Next Buffer' }) +set('n', '>b', 'bprevious', { desc = 'Prev Buffer' }) +set('n', 'bnext', { desc = 'Next Buffer' }) set('n', 'bb', 'e #', { desc = 'Switch to Other Buffer' }) set('n', '`', 'e #', { desc = 'Switch to Other Buffer' }) set('n', 'bd', function() Snacks.bufdelete() end, { desc = 'Delete Buffer' }) @@ -125,7 +125,6 @@ set('n', 'xx', 'source %', { desc = 'Source Current File' }) set('n', 'cl', function() Snacks.picker.lsp_config() end, { desc = "Lsp Info" }) set('n', 'gd', vim.lsp.buf.definition, { desc = 'Goto Definition' }) set('n', 'gr', vim.lsp.buf.references, { desc = 'References', nowait = true }) -set('n', 'gr', vim.lsp.buf.references, { desc = 'References', nowait = true }) set('n', 'gI', vim.lsp.buf.implementation, { desc = 'Goto Implementation' }) set('n', 'gy', vim.lsp.buf.type_definition, { desc = 'Goto T[y]pe Definition' }) set('n', 'gD', vim.lsp.buf.declaration, { desc = 'Goto Declaration' }) @@ -134,4 +133,53 @@ set('n', 'gK', function() return vim.lsp.buf.signature_help() end, { desc = 'Sig set({'n', 'x'}, 'ca', vim.lsp.buf.code_action, { desc = 'Code Action' }) set({'n', 'x'}, 'cc', vim.lsp.codelens.run, { desc = 'Run Codelens' }) set('n', 'cR', function() Snacks.rename.rename_file() end, { desc = 'Rename File' }) -set('n', 'leader>cr', vim.lsp.buf.rename, { desc = 'Rename' }) +set('n', 'cr', vim.lsp.buf.rename, { desc = 'Rename' }) + +-- Pickers +local getSmartOpts = function(overrides) + local cwd = vim.uv.cwd() or '' + -- Show hidden files in picker when editing the .dotfiles directory. + local is_dotfiles = not not cwd:find(".dotfiles", 1, true) + + local defaults = { + hidden = is_dotfiles, + exclude = { '.git', '.gitmodules' }, + root = true, + } + + return vim.tbl_extend("force", defaults, overrides or {}) +end +---- Find +set('n', '', function() Snacks.picker.files(getSmartOpts()) end, { desc = 'Find Files (Root Dir)' }) +set('n', 'ff', function() Snacks.picker.files(getSmartOpts()) end, { desc = 'Find Files (Root Dir)' }) +set('n', 'fF', function() Snacks.picker.files(getSmartOpts({ root = false })) end, { desc = 'Find Files (CWD)' }) +set('n', ',', function() Snacks.picker.buffers() end, { desc = 'Buffers' }) +set('n', 'fb', function() Snacks.picker.buffers() end, { desc = 'Buffers' }) +---- Grep +set('n', '/', function() Snacks.picker.grep(getSmartOpts()) end, { desc = 'Grep (Root Dir)' }) +set('n', 'sg', function() Snacks.picker.grep(getSmartOpts({ live = true} )) end, { desc = 'Grep (Root Dir)' }) +set('n', 'sG', function() Snacks.picker.grep(getSmartOpts({ live = true, root = false })) end, { desc = 'Grep (CWD)' }) +set('n', 'sb', function() Snacks.picker.lines() end, { desc = 'Buffer Lines' }) +set('n', 'sB', function() Snacks.picker.grep_buffers() end, { desc = 'Grep Open Buffers' }) +set('n', ':', function() Snacks.picker.command_history() end, { desc = 'Command History' }) +set({'n', 'x'}, 'sw', function() + Snacks.picker.grep_word(getSmartOpts()) +end, { desc = 'Visual selection or word (Root Dir)' }) +set({'n', 'x'}, 'sW', function() + local opts = getSmartOpts() + opts.root = false + Snacks.picker.grep_word(opts) +end, { desc = 'Visual selection or word (CWD)' }) +-- Search +set('n', 'sc', function() Snacks.picker.command_history() end, { desc = 'Command History' }) +set('n', 'sC', function() Snacks.picker.commands() end, { desc = 'Commands' }) +set('n', 'sd', function() Snacks.picker.diagnostics() end, { desc = 'Diagnostics' }) +set('n', 'sD', function() Snacks.picker.diagnostics_buffer() end, { desc = 'Buffer Diagnostics' }) +set('n', 'sh', function() Snacks.picker.help() end, { desc = 'Help Pages' }) +set('n', 'sH', function() Snacks.picker.highlights() end, { desc = 'Highlights' }) +set('n', 'si', function() Snacks.picker.icons() end, { desc = 'Icons' }) +set('n', 'sj', function() Snacks.picker.jumps() end, { desc = 'Jumps' }) +set('n', 'sk', function() Snacks.picker.keymaps() end, { desc = 'Keymaps' }) +set('n', 'sm', function() Snacks.picker.marks() end, { desc = 'Marks' }) +set('n', 'sR', function() Snacks.picker.resume() end, { desc = 'Resume' }) +set('n', 'sq', function() Snacks.picker.qflist() end, { desc = 'Quickfix List' }) diff --git a/nvim/.config/nvim/lua/plugins/nord.lua b/nvim/.config/nvim/lua/plugins/nord.lua index 046d8ad..4f7ced5 100644 --- a/nvim/.config/nvim/lua/plugins/nord.lua +++ b/nvim/.config/nvim/lua/plugins/nord.lua @@ -1,3 +1,7 @@ vim.pack.add({'https://github.com/shaunsingh/nord.nvim'}) vim.cmd[[colorscheme nord]] + +-- Make directory paths in the Snacks picker readable. +vim.api.nvim_set_hl(0, "SnacksPickerDir", { link = "Directory" }) +vim.api.nvim_set_hl(0, "SnacksPickerPathHidden", { link = "Comment" }) diff --git a/nvim/.config/nvim/lua/plugins/snacks-nvim.lua b/nvim/.config/nvim/lua/plugins/snacks-nvim.lua index 91a953f..b912ad9 100644 --- a/nvim/.config/nvim/lua/plugins/snacks-nvim.lua +++ b/nvim/.config/nvim/lua/plugins/snacks-nvim.lua @@ -4,4 +4,5 @@ require('snacks').setup({ bigfile = { enabled = true }, bufdelete = { enabled = true }, terminal = { enabled = true }, + picker = { enabled = true }, }) -- cgit v1.2.3-13-gbd6f