@@ -308,6 +308,40 @@ require('telescope').setup {
308308-- Enable telescope fzf native, if installed
309309pcall (require (' telescope' ).load_extension , ' fzf' )
310310
311+ -- Telescope live_grep in git root
312+ -- Function to find the git root directory based on the current buffer's path
313+ local function find_git_root ()
314+ -- Use the current buffer's path as the starting point for the git search
315+ local current_file = vim .api .nvim_buf_get_name (0 )
316+ -- If the buffer is not associated with a file, return nil
317+ if current_file == " " then
318+ print (" Buffer is not associated with a file" )
319+ return nil
320+ end
321+ -- Extract the directory from the current file's path
322+ local current_dir = vim .fn .fnamemodify (current_file , " :h" )
323+ -- Find the Git root directory from the current file's path
324+ print (" git -C " .. vim .fn .escape (current_dir , " " ) .. " rev-parse --show-toplevel" )
325+ local git_root = vim .fn .systemlist (" git -C " .. vim .fn .escape (current_dir , " " ) .. " rev-parse --show-toplevel" )[1 ]
326+ if vim .v .shell_error ~= 0 then
327+ print (" Not a git repository" )
328+ return nil
329+ end
330+ return git_root
331+ end
332+
333+ -- Custom live_grep function to search in git root
334+ local function live_grep_git_root ()
335+ local git_root = find_git_root ()
336+ if git_root then
337+ require (' telescope.builtin' ).live_grep ({
338+ search_dirs = {git_root },
339+ })
340+ end
341+ end
342+
343+ vim .api .nvim_create_user_command (' LiveGrepGitRoot' , live_grep_git_root , {})
344+
311345-- See `:help telescope.builtin`
312346vim .keymap .set (' n' , ' <leader>?' , require (' telescope.builtin' ).oldfiles , { desc = ' [?] Find recently opened files' })
313347vim .keymap .set (' n' , ' <leader><space>' , require (' telescope.builtin' ).buffers , { desc = ' [ ] Find existing buffers' })
@@ -323,7 +357,8 @@ vim.keymap.set('n', '<leader>gf', require('telescope.builtin').git_files, { desc
323357vim .keymap .set (' n' , ' <leader>sf' , require (' telescope.builtin' ).find_files , { desc = ' [S]earch [F]iles' })
324358vim .keymap .set (' n' , ' <leader>sh' , require (' telescope.builtin' ).help_tags , { desc = ' [S]earch [H]elp' })
325359vim .keymap .set (' n' , ' <leader>sw' , require (' telescope.builtin' ).grep_string , { desc = ' [S]earch current [W]ord' })
326- vim .keymap .set (' n' , ' <leader>sg' , require (' telescope.builtin' ).live_grep , { desc = ' [S]earch by [G]rep' })
360+ vim .keymap .set (' n' , ' <leader>sG' , require (' telescope.builtin' ).live_grep , { desc = ' [S]earch by [G]rep' })
361+ vim .keymap .set (' n' , ' <leader>sg' , ' :LiveGrepGitRoot<cr>' , { desc = ' [S]earch by [G]rep on Git Root' })
327362vim .keymap .set (' n' , ' <leader>sd' , require (' telescope.builtin' ).diagnostics , { desc = ' [S]earch [D]iagnostics' })
328363vim .keymap .set (' n' , ' <leader>sr' , require (' telescope.builtin' ).resume , { desc = ' [S]earch [R]esume' })
329364
0 commit comments