From 70ff57b80040df7abdcdb126c79ba6bf221f6576 Mon Sep 17 00:00:00 2001 From: Joshua Finch Date: Tue, 2 Apr 2024 08:13:03 -0500 Subject: [PATCH] Adding a keymapping for a global find and replaced based off of file grep via telescope, which feeds into the quickfix list and uses cdo to apply substitute commands to each file and specific word instance chosen. --- nvim/lua/keymappings.lua | 4 ++-- nvim/lua/plugins/telescope.lua | 43 +++++++++++++++++++++++++++++++++- 2 files changed, 44 insertions(+), 3 deletions(-) diff --git a/nvim/lua/keymappings.lua b/nvim/lua/keymappings.lua index 5cf6d52..7fbe5be 100644 --- a/nvim/lua/keymappings.lua +++ b/nvim/lua/keymappings.lua @@ -34,7 +34,7 @@ vim.keymap.set('n', 'J', 'mzJ`z') -- Switch or close buffers in the window vim.keymap.set('n', 'n', ':bn', options) vim.keymap.set('n', 'p', ':bp', options) -vim.keymap.set('n', 'd', ':bp|bd #', options) +vim.keymap.set('n', 'x', ':bp|bd #', options) -- Toggle spellcheck vim.keymap.set('n', 's', ':set spell!', options) @@ -56,6 +56,6 @@ vim.keymap.set('n', 'em', function() cf.execute('benchmark') end) vim.keymap.set('n', 'eo', ':Lexplore', options) -vim.keymap.set('n', 'rn', ':%s///g', options) +-- vim.keymap.set('n', 'rn', ':%s///g', options) vim.keymap.set('n', 'l', ':Lazy', options) diff --git a/nvim/lua/plugins/telescope.lua b/nvim/lua/plugins/telescope.lua index 65899e3..a600f8e 100644 --- a/nvim/lua/plugins/telescope.lua +++ b/nvim/lua/plugins/telescope.lua @@ -3,8 +3,31 @@ return { config = function(_, opts) local telescope = require('telescope') local actions = require('telescope.actions') + local action_state = require('telescope.actions.state') local fb_actions = telescope.extensions.file_browser.actions + local custom_actions = {} + + function custom_actions.grep_multi_select(prompt_bufnr) + local function get_table_size(t) + local count = 0 + for _ in pairs(t) do + count = count + 1 + end + return count + end + + local picker = action_state.get_current_picker(prompt_bufnr) + local num_selections = get_table_size(picker:get_multi_selection()) + + if num_selections > 1 then + actions.send_selected_to_qflist(prompt_bufnr) + actions.open_qflist() + else + actions.file_edit(prompt_bufnr) + end + end + opts.defaults = { file_ignore_patterns = { '.png$', @@ -19,8 +42,12 @@ return { layout_config = { prompt_position = 'top' }, layout_strategy = 'horizontal', mappings = { + n = { + [''] = custom_actions.grep_multi_select, + }, i = { - [''] = actions.close + [''] = actions.close, + [''] = custom_actions.grep_multi_select, }, }, prompt_prefix = '  ', @@ -38,6 +65,9 @@ return { preview_cutoff = 9999, }, }, + grep_string = { + initial_mode = 'normal', + }, } opts.extensions = { @@ -59,6 +89,7 @@ return { dependencies = { 'nvim-lua/plenary.nvim', 'nvim-telescope/telescope-file-browser.nvim', + 'kevinhwang91/nvim-bqf', }, keys = { { @@ -122,6 +153,16 @@ return { require('telescope.builtin').lsp_dynamic_workspace_symbols() end }, + { + ';g', + function() + require('telescope.builtin').grep_string({ search = vim.fn.input('Grep For > ')}) + end + }, + { + 'rn', + -- custom_actions.grep_multi_select + }, { 'sf', function()