From d724d75bf73533a828d8974092f8572fa0cc9256 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 7 Feb 2025 20:57:27 +0100 Subject: [PATCH] nvim: Switch from telescope to fzf-lua for fuzzy picker --- nvim/.config/nvim/lazy-lock.json | 4 +- nvim/.config/nvim/lua/plugins/pickers.lua | 264 +++++++++++++++------- nvim/.config/nvim/lua/plugins/ui.lua | 1 - 3 files changed, 179 insertions(+), 90 deletions(-) diff --git a/nvim/.config/nvim/lazy-lock.json b/nvim/.config/nvim/lazy-lock.json index b4b20c5..06caa2b 100644 --- a/nvim/.config/nvim/lazy-lock.json +++ b/nvim/.config/nvim/lazy-lock.json @@ -17,6 +17,7 @@ "flash.nvim": { "branch": "main", "commit": "ec0bf2842189f65f60fd40bf3557cac1029cc932" }, "friendly-snippets": { "branch": "main", "commit": "efff286dd74c22f731cdec26a70b46e5b203c619" }, "fwatch.nvim": { "branch": "main", "commit": "a691f7349dc66285cd75a1a698dd28bca45f2bf8" }, + "fzf-lua": { "branch": "main", "commit": "1176d512b1390f992c775f08dcb155d4e0ba01cf" }, "git-conflict.nvim": { "branch": "main", "commit": "4bbfdd92d547d2862a75b4e80afaf30e73f7bbb4" }, "gitsigns.nvim": { "branch": "main", "commit": "c23bbd3ed2c7a3fdc3399e97e24f9e158f57612f" }, "glance.nvim": { "branch": "master", "commit": "1a08824835d7582457b67acbe23ca33487912a5e" }, @@ -62,14 +63,11 @@ "otter.nvim": { "branch": "main", "commit": "0e42fa795c35c7190935e3beda3791189c41bb72" }, "peek.nvim": { "branch": "master", "commit": "5820d937d5414baea5f586dc2a3d912a74636e5b" }, "plenary.nvim": { "branch": "master", "commit": "3707cdb1e43f5cea73afb6037e6494e7ce847a66" }, - "popup.nvim": { "branch": "master", "commit": "b7404d35d5d3548a82149238289fa71f7f6de4ac" }, "quarto-nvim": { "branch": "main", "commit": "abc417c7e7422033f1090c0da5f30ef3ecb0c7ca" }, "rainbow-delimiters.nvim": { "branch": "master", "commit": "dc788723f717bdd3041838b8db34cce53c9aa920" }, "render-markdown": { "branch": "main", "commit": "f2bdf9f866671456f7a6119cc94501048d9d172c" }, "smartcolumn.nvim": { "branch": "main", "commit": "d01b99355c7fab13233f48d0f28dc097e68a03f7" }, "stickybuf.nvim": { "branch": "master", "commit": "2160fcd536d81f5fa43f7167dba6634e814e3154" }, - "telescope-fzf-native.nvim": { "branch": "main", "commit": "dae2eac9d91464448b584c7949a31df8faefec56" }, - "telescope.nvim": { "branch": "master", "commit": "a0bbec21143c7bc5f8bb02e0005fa0b982edc026" }, "texpresso.vim": { "branch": "main", "commit": "907838c08bbf99ad6bed3c908f1d0551a92ab4e0" }, "todo-comments.nvim": { "branch": "main", "commit": "ae0a2afb47cf7395dc400e5dc4e05274bf4fb9e0" }, "trouble.nvim": { "branch": "main", "commit": "bac1d9a9f51eecf4424b6ca8675db5a170fe572b" }, diff --git a/nvim/.config/nvim/lua/plugins/pickers.lua b/nvim/.config/nvim/lua/plugins/pickers.lua index f10af48..fdd415c 100644 --- a/nvim/.config/nvim/lua/plugins/pickers.lua +++ b/nvim/.config/nvim/lua/plugins/pickers.lua @@ -1,4 +1,4 @@ -return { +return { -- file/item pickers and managers { "vifm/vifm.vim", config = function() @@ -8,10 +8,7 @@ return { vim.g.vifm_exec_args = '-c "set vifminfo=" -c "set statusline=" -c "only"' end, cmd = "Vifm", - keys = { - { "E", "Vifm", desc = "buffer file browser" }, - { "vc", ":Vifm " .. vim.fn.stdpath("config") .. "", desc = "open config" }, - }, + keys = { { "E", "Vifm", desc = "buffer file browser" } }, event = { "BufEnter" }, }, -- integrate file manager { @@ -49,160 +46,255 @@ return { }, }, { "MagicDuck/grug-far.nvim", opts = {}, cmd = "GrugFar" }, - -- fuzzy matching picker { - "nvim-telescope/telescope.nvim", - dependencies = { - "nvim-lua/popup.nvim", - "nvim-lua/plenary.nvim", - { "nvim-telescope/telescope-fzf-native.nvim", build = "make" }, - }, - cmd = "Telescope", - config = function() + "ibhagwan/fzf-lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + init = function() if require("core.util").is_available("which-key") then + require("which-key").add({ "v", group = "vim" }) require("which-key").add({ "f", group = "find" }) end - -- Setup up telescope fuzzy finding settings - -- - -- Makes use of optionally installed external programs to work fully: - -- rg (ripgrep) for in-text searches - -- fd for quicker directory structure searches - -- lsp for a variety of lsp queries - local trouble_mappings = {} - if require("core.util").is_available("trouble") then - trouble_mappings = { - i = { [""] = require("trouble.sources.telescope").open }, - n = { [""] = require("trouble.sources.telescope").open }, - } - end - require("telescope").setup({ - defaults = { - vimgrep_arguments = { - "rg", - "--ignore-vcs", - "--hidden", - "--color=never", - "--no-heading", - "--with-filename", - "--line-number", - "--column", - "--smart-case", - }, - generic_sorter = require("mini.fuzzy").get_telescope_sorter, - -- Appearance - prompt_prefix = "󰍉 ", - selection_caret = "󰳟 ", - color_devicons = true, - mappings = trouble_mappings or {}, - }, - pickers = { - buffers = { theme = "ivy" }, - oldfiles = { theme = "ivy" }, - find_files = { - theme = "dropdown", - -- nice minimal picker design - borderchars = { - { "─", "│", "─", "│", "┌", "┐", "┘", "└" }, - prompt = { "─", "│", " ", "│", "┌", "┐", "│", "│" }, - results = { "─", "│", "─", "│", "├", "┤", "┘", "└" }, - preview = { "─", "│", "─", "│", "┌", "┐", "┘", "└" }, - }, - width = 0.8, - previewer = false, - prompt_title = false, - }, - }, - }) - require("telescope").load_extension("fzf") end, + opts = { + fzf_opts = { ["--select-1"] = false }, + keymap = { + builtin = { + true, + [""] = "preview-page-down", + [""] = "preview-page-up", + }, + fzf = { + true, + ["ctrl-q"] = "select-all+accept", + }, + }, + previewers = { + builtin = { + extensions = { + ["png"] = { "viu" }, + ["svg"] = { "chafa", "--format=symbols", "{file}" }, + }, + }, + }, + }, -- FIXME: Does not seem to work with single result and still closes instantly? + config = function(_, opts) + opts.actions = opts.actions or { true } + opts.actions["ctrl-q"] = require("fzf-lua").actions.file_sel_to_qf + require("fzf-lua").setup(opts) + end, + cmd = "FzfLua", keys = { { "vh", function() - require("telescope.builtin").help_tags() + require("fzf-lua").helptags() end, desc = "help tags", }, { "vH", function() - require("telescope.builtin").man_pages() + require("fzf-lua").manpages() end, desc = "man pages", }, + { + "vt", + function() + require("fzf-lua").filetypes() + end, + desc = "filetype", + }, + { + "vk", + function() + require("fzf-lua").keymaps() + end, + desc = "keymaps", + }, + { + "vy", + function() + require("fzf-lua").search_history() + end, + desc = "search history", + }, + { + "vc", + function() + require("fzf-lua").command_history() + end, + desc = "command history", + }, { "vC", function() - require("telescope.builtin").colorscheme(require("telescope.themes").get_ivy()) + require("fzf-lua").colorschemes() end, desc = "colorschemes", }, + { -- exclude hidden files with in the search + "ff", + function() + require("fzf-lua").files() + end, + desc = "files", + }, { "fb", function() - require("telescope.builtin").buffers(require("telescope.themes").get_ivy()) + require("fzf-lua").buffers() end, - desc = "list buffers", + desc = "buffers", }, { "fo", function() - require("telescope.builtin").oldfiles(require("telescope.themes").get_ivy()) + require("fzf-lua").oldfiles() end, - desc = "list old files", + desc = "old files", }, { - "ff", + "fp", function() - require("telescope.builtin").find_files() + require("fzf-lua").complete_path() end, - desc = "find files", + desc = "path complete", + }, + { -- TODO: Does it work reliably in various circumstances? + "", + function() + require("fzf-lua").complete_path() + end, + mode = "i", + desc = "path complete", }, { - "fh", + "fP", function() - require("telescope.builtin").find_files({ hidden = true }) + require("fzf-lua").complete_file() end, - desc = "find hidden files", + desc = "filepath complete", }, { "fw", function() - require("telescope.builtin").live_grep() + require("fzf-lua").live_grep_native() end, - desc = "grep search", + desc = "grep", + }, + { + "fW", + function() + require("fzf-lua").live_grep_resume() + end, + desc = "grep resume", + }, + { + "fw", + function() + require("fzf-lua").grep_cword() + end, + mode = "v", + desc = "grep word", + }, + { + "fW", + function() + require("fzf-lua").grep_cWORD() + end, + mode = "v", + desc = "grep WORD", }, { "fg", function() - require("telescope.builtin").git_status() + require("fzf-lua").git_status() end, desc = "git status", }, { "fc", function() - require("telescope.builtin").git_bcommits() + require("fzf-lua").git_bcommits() end, desc = "git buffer commits", }, { "fl", function() - require("telescope.builtin").git_commits() + require("fzf-lua").git_commits() end, - desc = "git commit log", + desc = "git log", + }, + { + "fr", + function() + require("fzf-lua").registers() + end, + desc = "registers", + }, + { + "fr", + function() + require("fzf-lua").jumps() + end, + desc = "jumps", + }, + { + "fq", + function() + require("fzf-lua").quickfix() + end, + desc = "quickfix", + }, + { + "fi", + function() + require("fzf-lua").loclist() + end, + desc = "loclist", }, { "z=", function() - require("telescope.builtin").spell_suggest(require("telescope.themes").get_ivy()) + require("fzf-lua").spell_suggest() end, desc = "spell suggest", }, + { + "fR", + function() + require("fzf-lua").resume() + end, + desc = "resume last query", + }, + + { + "fs", + function() + require("fzf-lua").lsp_finder() + end, + desc = "lsp symbol", + }, + { + "fd", + function() + require("fzf-lua").diagnostics_workspace() + end, + desc = "diagnostics workspace", + }, + { + "fD", + function() + require("fzf-lua").diagnostics_document() + end, + desc = "diagnostics document", + }, }, }, + -- fuzzy matching picker { "jiaoshijie/undotree", dependencies = { diff --git a/nvim/.config/nvim/lua/plugins/ui.lua b/nvim/.config/nvim/lua/plugins/ui.lua index 4b25481..e8f1d60 100644 --- a/nvim/.config/nvim/lua/plugins/ui.lua +++ b/nvim/.config/nvim/lua/plugins/ui.lua @@ -94,7 +94,6 @@ return { }, { "OXY2DEV/helpview.nvim", - -- lazy = false, -- Recommended by dev? ft = "help", dependencies = { "nvim-treesitter/nvim-treesitter",