π Advanced Git Search
An advanced git search extension for Telescope
and fzf-lua
.
Search your git history by commit message, content and author in Neovim
π Usage
-
π Open a picker:AdvancedGitSearch
or:AdvancedGitSearch {command}
-
π Enter a queryYour usual search experience. See the individual commands for the grep behaviour.
-
βοΈ Further search on commit author with@
The prompt is split on
@
. Everything following the@
is the pattern for the author name.
β‘οΈ Commands
1. search_log_content -- Search in repo log content
Opens a window with a list of all previous commit.
Grep behaviour: filter on added, updated or removed code (log content: -G
option in git).
Keymaps
<CR>
Opens a diff of the current file with the selected commit<C-e>
show the entire commit for all files in neovim with diff plugin<C-o>
Open the selected commit in the browser<C-y>
copy the commit hash to clipboard
2. search_log_content_file -- Search in file log content
Opens a window with a list of git commits that changed the current file (renames included).
Grep behaviour: filter on added, updated or removed code (log content: -G
option in git).
Keymaps
<CR>
Opens a diff of the current file with the selected commit<C-e>
show the entire commit for all files in neovim with diff plugin<C-o>
Open the selected commit in the browser<C-y>
copy the commit hash to clipboard
3. diff_commit_file -- Diff current file with commit
Opens a window with a list of git commits that changed the current file (renames included).
Grep behaviour: filter on commit message.
Keymaps
<CR>
Opens a diff of the current file with the selected commit<C-e>
show the entire commit for all files in neovim with diff plugin<C-o>
Open the selected commit in the browser<C-y>
copy the commit hash to clipboard
4. diff_commit_line -- Diff current file with selected line history
Opens a window with a list of previous commit logs with respect to selected lines
Grep behaviour: filter on commit message.
Use
:'<,'>AdvancedGitSearch diff_commit_line
(with a visual range).
Keymaps
<CR>
opens a diff for the current file with the corresponding file on the selected commit<C-e>
show the entire commit for all files in neovim with diff plugin<C-o>
opens a the selected commit in the browser<C-y>
copy the commit hash to clipboard
5. diff_branch_file -- Diff file with branch
Opens a window with a list of local branches
Grep behaviour: filter on branch name.
Keymaps
<CR>
opens a diff for the current file with the selected branch
6. changed_on_branch -- Changed on current branch (experimental)
Opens a window with a list of changed files on the current branch (including staged files). The fork point of the current branch is determined with the following command:
git show-branch | \
sed "s/].*//" | \
grep "*" | \
grep -v "$(git rev-parse --abbrev-ref HEAD)" | \
head -n1 | \
sed "s/^.*\\[//"
Note: this only works if there is already a commit on the current branch, otherwise the base branch can not be detected.
Grep behaviour: filter on filename.
Keymaps
<CR>
opens the selected file.
7. checkout_reflog -- Checkout from reflog
Opens a window with all reflog entries
Keymaps
<CR>
checkout the reflog entry
8. show_custom_functions
A telescope picker for all functions above.
Enable show_builtin_git_pickers
to additionally show builtin git pickers.
βοΈ Installation
Config
{
-- fugitive or diffview
diff_plugin = "fugitive",
-- customize git in previewer
-- e.g. flags such as { "--no-pager" }, or { "-c", "delta.side-by-side=false" }
git_flags = {},
-- customize git diff in previewer
-- e.g. flags such as { "--raw" }
git_diff_flags = {},
-- Show builtin git pickers when executing "show_custom_functions" or :AdvancedGitSearch
show_builtin_git_pickers = false,
-- Telescope layout setup
telescope_theme = {
function_name_1 = {
-- Theme options
},
function_name_2 = "dropdown"
-- e.g. realistic example
show_custom_functions = {
layout_config = { width = 0.4, height = 0.4 },
},
}
}
Dependencies
{
"nvim-telescope/telescope.nvim",
-- to show diff splits and open commits in browser
"tpope/vim-fugitive",
-- to open commits in browser with fugitive
"tpope/vim-rhubarb",
-- optional: to replace the diff from fugitive with diffview.nvim
-- (fugitive is still needed to open in browser)
-- "sindrets/diffview.nvim",
}
Telescope
Lazy
To complete this snippet, see [Config](#Config) and [Dependencies](#Dependencies).{
"aaronhallaert/advanced-git-search.nvim",
config = function()
-- optional: setup telescope before loading the extension
require("telescope").setup{
-- move this to the place where you call the telescope setup function
extensions = {
advanced_git_search = {
-- See Config
}
}
}
require("telescope").load_extension("advanced_git_search")
end,
dependencies = {
--- See dependencies
},
}
Packer
To complete this snippet, see Config and Dependencies.
use({
"aaronhallaert/advanced-git-search.nvim",
config = function()
-- optional: setup telescope before loading the extension
require("telescope").setup{
-- move this to the place where you call the telescope setup function
extensions = {
advanced_git_search = {
-- Insert Config here
}
}
}
require("telescope").load_extension("advanced_git_search")
end,
requires = {
-- Insert Dependencies here
},
})
Fzf-lua
Lazy
To complete this snippet, see [Config](#Config) and [Dependencies](#Dependencies).{
"aaronhallaert/advanced-git-search.nvim",
config = function()
require("advanced_git_search.fzf").setup{
-- Insert Config here
}
end,
dependencies = {
-- Insert Dependencies here
},
}
Packer
To complete this snippet, see Config and Dependencies.
use({
"aaronhallaert/advanced-git-search.nvim",
config = function()
require("advanced_git_search.fzf").setup{
-- Insert Config here
}
}
end,
requires = {
-- Insert Dependencies here
},
})
Prerequisites
- git
- vim-fugitive
- sindrets/diffview.nvim
- telescope.nvim