summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid T. Sadler <davidtsadler@googlemail.com>2026-02-13 17:00:18 +0000
committerDavid T. Sadler <davidtsadler@googlemail.com>2026-02-13 17:00:18 +0000
commit310cd1a2decc6c3a19069ca09909d04e296f18c9 (patch)
treef064a4d81ae97764bfebbc0bc6c38166e72f707f
parentab78c4274a485398ea7dc61cdd11ba90e215fbd7 (diff)
Configure key mappings for pickers in Neovim
-rw-r--r--nvim/.config/nvim/lua/config/keymaps.lua60
-rw-r--r--nvim/.config/nvim/lua/plugins/nord.lua4
-rw-r--r--nvim/.config/nvim/lua/plugins/snacks-nvim.lua1
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', '<C-j>', ":<C-u>execute \"'<,'>move '>+\" . v:count1<cr>gv=gv", { desc
set('v', '<C-k>', ":<C-u>execute \"'<,'>move '<-\" . (v:count1 + 1)<cr>gv=gv", { desc = 'Move Up' })
-- Buffer navigation.
-set('n', '<S-h>', '<cmd>bprevious<cr>', { desc = 'Prev Buffer' })
-set('n', '<S-l>', '<cmd>bnext<cr>', { desc = 'Next Buffer' })
-set('n', '[b', '<cmd>bprevious<cr>', { desc = 'Prev Buffer' })
-set('n', ']b', '<cmd>bnext<cr>', { desc = 'Next Buffer' })
+set('n', '<,', '<cmd>bprevious<cr>', { desc = 'Prev Buffer' })
+set('n', '>.', '<cmd>bnext<cr>', { desc = 'Next Buffer' })
+set('n', '>b', '<cmd>bprevious<cr>', { desc = 'Prev Buffer' })
+set('n', '<b', '<cmd>bnext<cr>', { desc = 'Next Buffer' })
set('n', '<leader>bb', '<cmd>e #<cr>', { desc = 'Switch to Other Buffer' })
set('n', '<leader>`', '<cmd>e #<cr>', { desc = 'Switch to Other Buffer' })
set('n', '<leader>bd', function() Snacks.bufdelete() end, { desc = 'Delete Buffer' })
@@ -125,7 +125,6 @@ set('n', '<leader>xx', '<cmd>source %<cr>', { desc = 'Source Current File' })
set('n', '<leader>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'}, '<leader>ca', vim.lsp.buf.code_action, { desc = 'Code Action' })
set({'n', 'x'}, '<leader>cc', vim.lsp.codelens.run, { desc = 'Run Codelens' })
set('n', '<leader>cR', function() Snacks.rename.rename_file() end, { desc = 'Rename File' })
-set('n', 'leader>cr', vim.lsp.buf.rename, { desc = 'Rename' })
+set('n', '<leader>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', '<leader><space>', function() Snacks.picker.files(getSmartOpts()) end, { desc = 'Find Files (Root Dir)' })
+set('n', '<leader>ff', function() Snacks.picker.files(getSmartOpts()) end, { desc = 'Find Files (Root Dir)' })
+set('n', '<leader>fF', function() Snacks.picker.files(getSmartOpts({ root = false })) end, { desc = 'Find Files (CWD)' })
+set('n', '<leader>,', function() Snacks.picker.buffers() end, { desc = 'Buffers' })
+set('n', '<leader>fb', function() Snacks.picker.buffers() end, { desc = 'Buffers' })
+---- Grep
+set('n', '<leader>/', function() Snacks.picker.grep(getSmartOpts()) end, { desc = 'Grep (Root Dir)' })
+set('n', '<leader>sg', function() Snacks.picker.grep(getSmartOpts({ live = true} )) end, { desc = 'Grep (Root Dir)' })
+set('n', '<leader>sG', function() Snacks.picker.grep(getSmartOpts({ live = true, root = false })) end, { desc = 'Grep (CWD)' })
+set('n', '<leader>sb', function() Snacks.picker.lines() end, { desc = 'Buffer Lines' })
+set('n', '<leader>sB', function() Snacks.picker.grep_buffers() end, { desc = 'Grep Open Buffers' })
+set('n', '<leader>:', function() Snacks.picker.command_history() end, { desc = 'Command History' })
+set({'n', 'x'}, '<leader>sw', function()
+ Snacks.picker.grep_word(getSmartOpts())
+end, { desc = 'Visual selection or word (Root Dir)' })
+set({'n', 'x'}, '<leader>sW', function()
+ local opts = getSmartOpts()
+ opts.root = false
+ Snacks.picker.grep_word(opts)
+end, { desc = 'Visual selection or word (CWD)' })
+-- Search
+set('n', '<leader>sc', function() Snacks.picker.command_history() end, { desc = 'Command History' })
+set('n', '<leader>sC', function() Snacks.picker.commands() end, { desc = 'Commands' })
+set('n', '<leader>sd', function() Snacks.picker.diagnostics() end, { desc = 'Diagnostics' })
+set('n', '<leader>sD', function() Snacks.picker.diagnostics_buffer() end, { desc = 'Buffer Diagnostics' })
+set('n', '<leader>sh', function() Snacks.picker.help() end, { desc = 'Help Pages' })
+set('n', '<leader>sH', function() Snacks.picker.highlights() end, { desc = 'Highlights' })
+set('n', '<leader>si', function() Snacks.picker.icons() end, { desc = 'Icons' })
+set('n', '<leader>sj', function() Snacks.picker.jumps() end, { desc = 'Jumps' })
+set('n', '<leader>sk', function() Snacks.picker.keymaps() end, { desc = 'Keymaps' })
+set('n', '<leader>sm', function() Snacks.picker.marks() end, { desc = 'Marks' })
+set('n', '<leader>sR', function() Snacks.picker.resume() end, { desc = 'Resume' })
+set('n', '<leader>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 },
})