gv.vim: a focused Git commit browser for Vim
A git commit browser in Vim
At a glance
- What is it?
- gv.vim adds a commit-oriented Vim workflow for inspecting Git history, narrowing results, and viewing commit contents or ranges. It is aimed at Vim users who work with large repositories and already depend on Fugitive.
- Who is it for?
- Adopt gv.vim if your daily work includes navigating large Git histories inside Vim and Fugitive is already part of your setup. Do not treat it as a standalone Git client or as a replacement for repository hosting and branch-management tools.
- Can I use it commercially?
- Not without permission. GitHub finds no licence file in the repository, and without a licence all rights are reserved by default: you may read the code but not reuse it. Check the README, or ask the authors, before using it.
- Is it still maintained?
- Yes. The repository last received commits 157 days ago.
- What is it written in?
- Mainly Vim Script, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
gv.vim's commit-focused Vim workflow
gv.vim is a Vim plugin for browsing Git commits without leaving the editor. Its intended users are developers who want to inspect commit history while working in Vim, especially in repositories containing thousands of commits. The README presents gv.vim as a faster and possibly simpler alternative to gitv, but it does not provide benchmark data or a formal feature comparison.
The plugin is not a general Git graph viewer or a replacement for command-line Git. Its documented scope is the commit browser opened through the GV commands, with navigation and inspection controls attached to the resulting commit list. This narrow scope may appeal to users who already prefer Vim commands and mappings, but it also means the project depends on a surrounding Git workflow. Fugitive is required, and the available commands focus on log output and commit inspection.
The repository description calls gv.vim “A git commit browser.” Based on the repository layout, the implementation is organized into plugin, syntax, and test directories. The README does not describe a server component, background service, database, or separate configuration system. It presents a client-side Vim plugin that opens commit views and delegates Git history work to Git-related Vim commands, with Fugitive named as its prerequisite.
Opening and filtering Git history in gv.vim
The main entry point is :GV, which opens the commit browser. The README says that Git log options can be passed directly to the command. Its example uses a pickaxe search for the term foobar and restricts the result to the plugins path. Users can therefore combine gv.vim with familiar Git filtering rather than relying on a separate query language.
There are two narrower commands. :GV! lists only commits that affected the current file. :GV? fills the location list with revisions of the current file. Both commands can be used in visual mode to track changes in selected lines. These modes address a specific engineering need: reviewing the history of a file or a selected region without manually reconstructing the relevant log arguments.
The README does not document a configuration file for default filters, saved views, or custom columns. It also does not state that every Git log option is accepted. It gives one concrete pass-through example, so that is the documented behavior that can be relied upon without adding assumptions. The practical model is to construct a commit list, select a commit or range, and open its content or diff through the mappings.
The documentation also does not explain whether commit search results are cached or rendered incrementally. That omission matters for very large repositories. The author identifies projects with thousands of commits as the target use case, but the README supplies no timing figures, memory limits, or tested repository sizes.
Commit inspection, range diffs, and Vim mappings
Once the browser is open, the README assigns several keys to the commit view. Pressing o or <cr> on a commit displays that commit's content. On commits, pressing o or <cr> displays the diff in the range. The distinction matters because the same key can serve either a single-commit inspection action or a range inspection action depending on the selection context.
O opens the result in a new tab instead of using the current view. gb invokes :GBrowse, which provides a path toward the related Fugitive browsing workflow. The keys ]] and [[ move between commits. The . mapping starts a command-line command of the form :Git [CURSOR] SHA, following the Fugitive style described by the README. That mapping gives Vim users a direct route from a selected commit to a Git command.
The view can be closed with q or gq. The documented interaction model is keyboard-oriented, but the README does not describe configurable mappings, mouse behavior, or alternative key layouts. A user who expects a full web-style commit dashboard should note that gv.vim's interface is a Vim view with mappings, not a standalone graphical history application.
The README also does not document a separate command for renaming, rewriting, or manipulating commits. Its actions focus on reading history. That makes the plugin suitable for investigation and review, while leaving write operations to the Git and Fugitive commands available in the editor.
Installing gv.vim with vim-plug and Fugitive
The README requires Fugitive and gives a vim-plug installation example. Add both plugin declarations to the Vim configuration, then load them through the normal Vim-plug workflow. The project does not provide a separate release package or versioned installation command in the README.
The documented configuration is:
Plug 'tpope/vim-fugitive'
Plug 'junegunn/gv.vim'The first declaration installs Fugitive, which the README identifies as a requirement. The second installs gv.vim through vim-plug. After the plugin is available, open a Git repository in Vim and run :GV. The expected result is the commit browser described in the README. The documentation does not specify an exact Vim-plug command for reloading the configuration, so no such command is added here.
If a repository has no Git history, or if the current directory is not a Git working tree, the README does not explain the behavior. That is an operational boundary worth checking during adoption because the documented commands are inherently Git-specific. It also does not document Neovim setup, package-manager support other than vim-plug, or a fallback installation method.
A first gv.vim review session
A practical first use starts inside a repository that contains enough history to make filtering useful. Open the file under investigation in Vim, then run :GV to inspect the repository-wide commit browser. The README gives the following example for narrowing the list to commits matching a term and path:
:GV -S foobar -- pluginsAfter reviewing that list, select a commit and press o or <cr> to display its content. Select commits as a range and use the same documented keys to inspect the range diff. The README does not document an alternative key for making that selection, so users should follow its mapping table rather than assume a gitv-style interface.
For file-specific work, run :GV! when only commits affecting the current file matter. Use :GV? when the location list is the desired destination. In visual mode, the README says these commands can track changes in selected lines. The exact display format for visual selections is not specified, so the first use should be limited to verifying that the selected lines and resulting history are understood correctly.
Where gv.vim is limited
The clearest limitation is dependence on Fugitive and Vim. gv.vim does not document installation or usage for Neovim specifically, terminal interfaces outside Vim, editors other than Vim, or a standalone executable. The repository layout identifies a Vim plugin, and the README only documents Vim commands and mappings. Users outside that environment should verify compatibility before adopting it.
The project is also intentionally narrow. The README covers opening commit history, filtering it, navigating commits, viewing content or diffs, opening a new tab, browsing through :GBrowse, and closing the view. It does not document commit creation, branching, merging, staging, remotes, conflict resolution, or repository administration. Calling it a Git client would therefore overstate its scope.
The author describes the plugin as intended for projects with thousands of commits, but the README contains no measured startup time, rendering result, or comparison against gitv. The design goal is documented; the performance claim is not quantified. Teams with very large repositories should test actual rendering and navigation in their own working tree. The repository is not archived, and its last push was on 2026-05-19. That indicates recent repository activity, but it does not establish a release cadence or compatibility policy.
gitv, plain Git, and project licensing
The README names gitv as an alternative. The stated difference is approach and preference: the gv.vim author wanted a faster and possibly simpler commit browser for a project with thousands of commits. The README does not describe gitv's commands, rendering architecture, or feature set in enough detail to make a complete comparison. The concrete difference available here is that gv.vim provides its own Vim-oriented GV commands and mappings, while gitv is identified only as the project the author considered before choosing this approach.
For users who do not want a Vim plugin, plain Git remains the direct alternative for repository history because the README explicitly centers its filtering on git log options. That choice lacks gv.vim's commit-list mappings, but it does not require Vim, Fugitive, or a vim-plug installation. The README does not claim that either approach is better for every repository.
Maintenance information is limited. The repository has no GitHub releases, so there is no documented release channel or upgrade policy. The license is listed as unknown. Users should confirm licensing terms for their intended use before redistribution or organizational adoption rather than inferring terms from the absence of a stated identifier. The last push was on 2026-05-19, but the README does not describe an upgrade procedure.
Editorial conclusion
Adopt gv.vim if your daily work includes navigating large Git histories inside Vim and Fugitive is already part of your setup. Do not treat it as a standalone Git client or as a replacement for repository hosting and branch-management tools. Verify first that Vim can load the plugin, that Fugitive is available, and that the Git log options your team relies on work through :GV.
Frequently asked questions
How do I install gv.vim in Vim?
The README requires Fugitive and shows vim-plug declarations for `tpope/vim-fugitive` and `junegunn/gv.vim`. It does not document a separate installer or a version-specific installation command.
What does :GV do in gv.vim?
:GV opens the Git commit browser. The README also says that Git log options can be passed to it, with an example using `-S foobar -- plugins`.
Can gv.vim browse only the current file?
Yes. The README documents `:GV!` for commits that affected the current file and `:GV?` for filling the location list with revisions of that file. It also states that these commands can track changes in selected lines when used in visual mode.
What can I do with a commit in gv.vim?
Press `o` or `<cr>` to display the selected commit's content. Pressing the same keys on commits displays the diff in the selected range. Other documented mappings include `O` for a new tab, `]]` and `[[` for navigation, `.` for a Git command, `gb` for `:GBrowse`, and `q` or `gq` to close the view.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/junegunn-gv-vim)Was this useful?