add-plugin: fzf-lua

- add `which-key` groups, with additional `which-key` config.
- solve keymap conflict with `conform.nvim`.
This commit is contained in:
Abdulrahman Sheikho 2026-03-19 22:38:13 +03:00
parent fb6969fdd9
commit 7535dda26f
3 changed files with 122 additions and 1 deletions

View File

@ -5,7 +5,7 @@ return {
cmd = { 'ConformInfo' }, cmd = { 'ConformInfo' },
keys = { keys = {
{ {
'<leader>f', '<leader>F',
function() function()
require('conform').format { async = true, lsp_format = 'fallback' } require('conform').format { async = true, lsp_format = 'fallback' }
end, end,

112
lua/plugins/fzf-lua.lua Normal file
View File

@ -0,0 +1,112 @@
return {
'ibhagwan/fzf-lua',
-- optional for icon support
dependencies = {
'nvim-mini/mini.nvim', -- for mini.icons
'nvim-treesitter/nvim-treesitter',
},
config = function()
local fl = require 'fzf-lua'
fl.setup {
lsp = {
symbols = {
symbol_icons = Glyphs.kinds,
},
},
}
-- fuzzy-find specific
vim.keymap.set('n', '<leader>fl', fl.blines, { desc = 'Find line - current buf' })
vim.keymap.set('n', '<leader>fL', fl.lines, { desc = 'Find line - open buffers' })
vim.keymap.set('n', '<leader>ff', fl.files, { desc = 'Find files' })
vim.keymap.set('n', '<leader>o', fl.buffers, { desc = '[O]pen buffers' })
vim.keymap.set('n', '<leader>fR', fl.history, { desc = 'Recent files & buffers' })
vim.keymap.set('n', '<leader>fr', fl.oldfiles, { desc = 'Recent files' })
vim.keymap.set('n', '<leader>ft', fl.treesitter, { desc = 'Treesiter objects' })
vim.keymap.set('n', '<leader>fn', function()
fl.files { cwd = '~/.config/nvim/' }
end, { desc = 'Neovim config files' })
vim.keymap.set('n', '<leader>fN', function()
fl.files { cwd = '~/.local/share/nvim/lazy/' }
end, { desc = 'Neovim plugins src' })
-- grep specific
vim.keymap.set('n', '<leader>gb', fl.grep_curbuf, { desc = 'Grep current buffer' })
vim.keymap.set('n', '<leader>gG', fl.grep_project, { desc = 'Grep project' })
vim.keymap.set('n', '<leader>gg', fl.live_grep, { desc = 'Grep a pattern' })
vim.keymap.set({ 'n', 'v' }, '<leader>gv', fl.grep_visual, { desc = 'Grep with visual selection' })
vim.keymap.set('n', '<leader>gw', fl.grep_cword, { desc = 'Grep word under cursor' })
vim.keymap.set('n', '<leader>gW', fl.grep_cWORD, { desc = 'Grep WORD under cursor' })
vim.keymap.set('n', '<leader>g.', function()
fl.grep { resume = true }
end, { desc = 'Resume last grep' })
vim.keymap.set('n', '<leader>gN', function()
fl.live_grep { cwd = '~/.local/share/nvim/lazy/' }
end, { desc = 'Grep Neovim plugins src' })
-- Git specific
vim.keymap.set('n', '<leader>GC', fl.git_bcommits, { desc = 'Git: commits - current buf' })
vim.keymap.set('n', '<leader>GS', fl.git_stash, { desc = 'Git: stash' })
vim.keymap.set('n', '<leader>Gb', fl.git_branches, { desc = 'Git: branches' })
vim.keymap.set('n', '<leader>Gc', fl.git_commits, { desc = 'Git: commits' })
vim.keymap.set('n', '<leader>Gd', fl.git_diff, { desc = 'Git: diff' })
vim.keymap.set('n', '<leader>Gf', fl.git_files, { desc = 'Git: files' })
vim.keymap.set('n', '<leader>Gh', fl.git_hunks, { desc = 'Git: hunks' })
vim.keymap.set('n', '<leader>Gs', fl.git_status, { desc = 'Git: status' })
vim.keymap.set('n', '<leader>Gw', fl.git_worktrees, { desc = 'Git: worktrees' })
-- LSP specific
vim.keymap.set({ 'n', 'v' }, '<leader>la', fl.lsp_code_actions, { desc = 'LSP: code actions' })
vim.keymap.set({ 'n', 'v' }, '<leader>lD', fl.lsp_declarations, { desc = 'LSP: declaration' })
vim.keymap.set({ 'n', 'v' }, '<leader>ld', fl.lsp_definitions, { desc = 'LSP: definition' })
vim.keymap.set({ 'n', 'v' }, '<leader>li', fl.lsp_implementations, { desc = 'LSP: implementations' })
vim.keymap.set({ 'n', 'v' }, '<leader>lI', fl.lsp_incoming_calls, { desc = 'LSP: incoming calls' })
vim.keymap.set({ 'n', 'v' }, '<leader>lO', fl.lsp_outgoing_calls, { desc = 'LSP: outgoing calls' })
vim.keymap.set({ 'n', 'v' }, '<leader>lr', fl.lsp_references, { desc = 'LSP: references' })
vim.keymap.set('n', '<leader>ls', fl.lsp_document_symbols, { desc = 'LSP: symbols - current buf' })
vim.keymap.set('n', '<leader>lw', fl.lsp_workspace_symbols, { desc = 'LSP: symbols - workspace' })
vim.keymap.set({ 'n', 'v' }, '<leader>lt', fl.lsp_typedefs, { desc = 'LSP: type definition' })
-- Diagnostic specific
vim.keymap.set('n', '<leader>dd', fl.diagnostics_document, { desc = 'List diagnostics - current buf' })
vim.keymap.set('n', '<leader>dw', fl.diagnostics_workspace, { desc = 'List diagnostics - workspace' })
vim.keymap.set('n', '<leader>dz', fl.spellcheck, { desc = 'Spelling mistakes' })
-- misc specific
vim.keymap.set('n', "<leader>f'", fl.marks, { desc = 'Marks' })
vim.keymap.set('n', '<leader>f:', fl.command_history, { desc = 'Command history' })
vim.keymap.set('n', '<leader>f"', fl.registers, { desc = 'Registers' })
vim.keymap.set('n', '<leader>f/', fl.search_history, { desc = 'Search history' })
vim.keymap.set('n', '<leader>f;', fl.jumps, { desc = 'Jump list' })
vim.keymap.set('n', '<leader>f.', fl.resume, { desc = 'Resume last command/query' }) -- conflict
vim.keymap.set('n', '<leader>fh', fl.helptags, { desc = 'Help-Pages' })
vim.keymap.set('n', '<leader>fk', fl.keymaps, { desc = 'Keymaps' })
vim.keymap.set('n', '<leader>fm', fl.manpages, { desc = 'Man-Pages' })
vim.keymap.set('n', '<leader>fb', fl.builtin, { desc = 'Builtin pickers' })
-- TODO: I should implement _clipboard history_ in fzf-lua
-- vim.keymap.set('n', '<leader>fy', _I need to implement it_, { desc = 'Clipboard history' })
-- use fzf-lua for spelling suggestion
vim.keymap.set('i', '<C-z>', function()
fl.spell_suggest {
winopts = {
height = 0.4,
width = 30,
relative = 'cursor',
},
}
end, { desc = 'Spelling suggestions' })
vim.keymap.set('n', 'z=', function()
fl.spell_suggest {
winopts = {
height = 0.4,
width = 30,
relative = 'cursor',
},
}
end, { desc = 'Spelling suggestions' })
-- application specific
vim.keymap.set('n', '<leader>fZ', fl.zoxide, { desc = 'Zoxide directories' })
end,
}

View File

@ -11,10 +11,19 @@ return {
-- delay between pressing a key and opening which-key (milliseconds) -- delay between pressing a key and opening which-key (milliseconds)
delay = 0, delay = 0,
icons = { mappings = false }, icons = { mappings = false },
sort = { 'local', 'order', 'group', 'desc', 'case', 'alphanum', 'mod' },
plugins = {
spelling = { enabled = false },
},
-- Document existing key chains -- Document existing key chains
spec = { spec = {
{ '<leader>s', group = '[S]earch', mode = { 'n', 'v' } }, { '<leader>s', group = '[S]earch', mode = { 'n', 'v' } },
{ '<leader>f', group = '[F]uzzy-find', mode = { 'n', 'v' } },
{ '<leader>g', group = '[G]rep', mode = { 'n', 'v' } },
{ '<leader>G', group = '[G]it', mode = { 'n', 'v' } },
{ '<leader>l', group = '[L]SP', mode = { 'n', 'v' } },
{ '<leader>t', group = '[T]oggle' }, { '<leader>t', group = '[T]oggle' },
{ '<leader>d', group = '[D]iangostic' }, { '<leader>d', group = '[D]iangostic' },
{ '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } }, { '<leader>h', group = 'Git [H]unk', mode = { 'n', 'v' } },