return { 'nvim-telescope/telescope.nvim', event = 'VimEnter', branch = '0.1.x', dependencies = { 'nvim-lua/plenary.nvim', { -- If encountering errors, see telescope-fzf-native README for installation instructions 'nvim-telescope/telescope-fzf-native.nvim', -- `build` is used to run some command when the plugin is installed/updated. -- This is only run then, not every time Neovim starts up. build = 'make', -- `cond` is a condition used to determine whether this plugin should be -- installed and loaded. cond = function() return vim.fn.executable 'make' == 1 end, }, { 'nvim-telescope/telescope-ui-select.nvim' }, -- Useful for getting pretty icons, but requires a Nerd Font. { 'nvim-tree/nvim-web-devicons', enabled = vim.g.have_nerd_font }, }, config = function() -- Telescope is a fuzzy finder that comes with a lot of different things that -- it can fuzzy find! It's more than just a "file finder", it can search -- many different aspects of Neovim, your workspace, LSP, and more! -- -- The easiest way to use Telescope, is to start by doing something like: -- :Telescope help_tags -- -- After running this command, a window will open up and you're able to -- type in the prompt window. You'll see a list of `help_tags` options and -- a corresponding preview of the help. -- -- Two important keymaps to use while in Telescope are: -- - Insert mode: -- - Normal mode: ? -- -- This opens a window that shows you all of the keymaps for the current -- Telescope picker. This is really useful to discover what Telescope can -- do as well as how to actually do it! -- [[ Configure Telescope ]] -- See `:help telescope` and `:help telescope.setup()` require('telescope').setup { -- You can put your default mappings / updates / etc. in here -- All the info you're looking for is in `:help telescope.setup()` defaults = { mappings = { i = { [''] = require('telescope.actions').move_selection_previous, -- move to prev result [''] = require('telescope.actions').move_selection_next, -- move to next result [''] = require('telescope.actions').select_default, -- open file }, }, }, pickers = { find_files = { file_ignore_patterns = { 'node_modules', '.git', '.venv' }, hidden = true, }, }, live_grep = { file_ignore_patterns = { 'node_modules', '.git', '.venv' }, additional_args = function(_) return { '--hidden' } end, }, extensions = { ['ui-select'] = { require('telescope.themes').get_dropdown(), }, }, } -- Enable Telescope extensions if they are installed pcall(require('telescope').load_extension, 'fzf') pcall(require('telescope').load_extension, 'ui-select') -- See `:help telescope.builtin` local builtin = require 'telescope.builtin' vim.keymap.set('n', 'sh', builtin.help_tags, { desc = '[S]earch [H]elp' }) vim.keymap.set('n', 'sk', builtin.keymaps, { desc = '[S]earch [K]eymaps' }) vim.keymap.set('n', 'sf', builtin.find_files, { desc = '[S]earch [F]iles' }) vim.keymap.set('n', 'ss', builtin.builtin, { desc = '[S]earch [S]elect Telescope' }) vim.keymap.set('n', 'sw', builtin.grep_string, { desc = '[S]earch current [W]ord' }) vim.keymap.set('n', 'sd', builtin.diagnostics, { desc = '[S]earch [D]iagnostics' }) vim.keymap.set('n', 'sr', builtin.resume, { desc = '[S]earch [R]esume' }) vim.keymap.set('n', 's.', builtin.oldfiles, { desc = '[S]earch Recent Files ("." for repeat)' }) vim.keymap.set('n', '', builtin.buffers, { desc = '[ ] Find existing buffers' }) -- Slightly advanced example of overriding default behavior and theme vim.keymap.set('n', '/', function() -- You can pass additional configuration to Telescope to change the theme, layout, etc. builtin.current_buffer_fuzzy_find(require('telescope.themes').get_dropdown { winblend = 10, previewer = false, }) end, { desc = '[/] Fuzzily search in current buffer' }) -- It's also possible to pass additional configuration options. -- See `:help telescope.builtin.live_grep()` for information about particular keys vim.keymap.set('n', 's/', function() builtin.live_grep { grep_open_files = true, prompt_title = 'Live Grep in Open Files', } end, { desc = '[S]earch [/] in Open Files' }) vim.keymap.set('n', 'sg', function(opts) local pickers = require "telescope.pickers" local finders = require "telescope.finders" local make_entry = require "telescope.make_entry" local conf = require "telescope.config".values opts = opts or {} opts.cwd = opts.cwd or vim.uv.cwd() local finder = finders.new_async_job { command_generator = function(prompt) if not prompt or prompt == '' then return nil end local pieces = vim.split(prompt, ' ') local args = { 'rg' } if pieces[1] then table.insert(args, '-e') table.insert(args, pieces[1]) end if pieces[2] then table.insert(args, '-g') table.insert(args, pieces[2]) end ---@diagnostic disable-next-line: deprecated return vim.tbl_flatten { args, { '--color=never', '--no-heading', '--with-filename', '--line-number', '--column', '--smart-case' }, } end, entry_maker = make_entry.gen_from_vimgrep(opts), cwd = opts.cwd, } pickers .new(opts, { debounce = 100, prompt_title = 'Multi Grep', finder = finder, previewer = conf.grep_previewer(opts), sorter = require('telescope.sorters').empty(), }) :find() end, { desc = '[S]earch by [G]rep' }) end, }