diff --git a/lua/lazyvim/config/options.lua b/lua/lazyvim/config/options.lua index b82a763a..d2f8e24a 100644 --- a/lua/lazyvim/config/options.lua +++ b/lua/lazyvim/config/options.lua @@ -5,6 +5,12 @@ vim.g.maplocalleader = "\\" -- LazyVim auto format vim.g.autoformat = true +-- LazyVim picker to use. +-- Can be one of: telescope, fzf +-- Leave it to "auto" to automatically use the picker +-- enabled with `:LazyExtras` +vim.g.lazyvim_picker = "auto" + -- LazyVim root dir detection -- Each entry can be: -- * the name of a detector function like `lsp` or `cwd` diff --git a/lua/lazyvim/plugins/editor.lua b/lua/lazyvim/plugins/editor.lua index 180539a5..05fe5c25 100644 --- a/lua/lazyvim/plugins/editor.lua +++ b/lua/lazyvim/plugins/editor.lua @@ -301,13 +301,13 @@ return { { import = "lazyvim.plugins.extras.editor.fzf", enabled = function() - return LazyVim.has_extra("editor.fzf") + return LazyVim.pick.want() == "fzf" end, }, { import = "lazyvim.plugins.extras.editor.telescope", enabled = function() - return not LazyVim.has_extra("editor.fzf") + return LazyVim.pick.want() == "telescope" end, }, } diff --git a/lua/lazyvim/plugins/extras/editor/fzf.lua b/lua/lazyvim/plugins/extras/editor/fzf.lua index 38e2c0f1..06765407 100644 --- a/lua/lazyvim/plugins/extras/editor/fzf.lua +++ b/lua/lazyvim/plugins/extras/editor/fzf.lua @@ -1,3 +1,9 @@ +if lazyvim_docs then + -- In case you don't want to use `:LazyExtras`, + -- then you need to set the option below. + vim.g.lazyvim_picker = "fzf" +end + ---@class FzfLuaOpts: lazyvim.util.pick.Opts ---@field cmd string? diff --git a/lua/lazyvim/plugins/extras/editor/telescope.lua b/lua/lazyvim/plugins/extras/editor/telescope.lua index 52335fa7..faeb16b9 100644 --- a/lua/lazyvim/plugins/extras/editor/telescope.lua +++ b/lua/lazyvim/plugins/extras/editor/telescope.lua @@ -1,3 +1,9 @@ +if lazyvim_docs then + -- In case you don't want to use `:LazyExtras`, + -- then you need to set the option below. + vim.g.lazyvim_picker = "telescope" +end + local have_make = vim.fn.executable("make") == 1 local have_cmake = vim.fn.executable("cmake") == 1 @@ -49,6 +55,9 @@ return { { "nvim-telescope/telescope.nvim", cmd = "Telescope", + enabled = function() + return LazyVim.pick.want() == "telescope" + end, version = false, -- telescope did only one release, so use HEAD for now dependencies = { { @@ -228,6 +237,9 @@ return { { "stevearc/dressing.nvim", lazy = true, + enabled = function() + return LazyVim.pick.want() == "telescope" + end, init = function() ---@diagnostic disable-next-line: duplicate-set-field vim.ui.select = function(...) @@ -245,6 +257,9 @@ return { { "neovim/nvim-lspconfig", opts = function() + if LazyVim.pick.want() ~= "telescope" then + return + end local Keys = require("lazyvim.plugins.lsp.keymaps").get() -- stylua: ignore vim.list_extend(Keys, { diff --git a/lua/lazyvim/util/pick.lua b/lua/lazyvim/util/pick.lua index aa3c20ea..e8b08e93 100644 --- a/lua/lazyvim/util/pick.lua +++ b/lua/lazyvim/util/pick.lua @@ -32,6 +32,11 @@ function M.register(picker) if vim.v.vim_did_enter == 1 then return true end + + if M.picker and M.picker.name ~= M.want() then + M.picker = nil + end + if M.picker and M.picker.name ~= picker.name then LazyVim.warn( "`LazyVim.pick`: picker already set to `" .. M.picker.name .. "`,\nignoring new picker `" .. picker.name .. "`" @@ -42,6 +47,14 @@ function M.register(picker) return true end +function M.want() + vim.g.lazyvim_picker = vim.g.lazyvim_picker or "auto" + if vim.g.lazyvim_picker == "auto" then + return LazyVim.has_extra("editor.fzf") and "fzf" or "telescope" + end + return vim.g.lazyvim_picker +end + ---@param command? string ---@param opts? lazyvim.util.pick.Opts function M.open(command, opts)