I use fugitive, a Git interface that operates from within [n]vim. There are many advantages to using Git from within an editor, especially as so many Git operations land you in an editor in any case; this way, you stay in your editor context, so, for example, you get completions from your other windows when composing your commit messages.
I have used vim-fugitive for years to read large and small codebases. Its blame and re-blame interface is the best I've found.
Have you used magit?
If there's a better one out there than magit's, I want to know.
`mkdir -p ~/.vim/pack/git/start`
`git clone https://github.com/tpope/vim-fugitive ~/.vim/pack/git/start/vim-fugitive`
Open a file under version control and `:Git blame`
The commit shas, author, and date appear in a window to the left. `Ctrl+w Ctrl+w` to switch windows. Both windows scroll up and down together.
Pressing `o` on a commit sha opens the full commit log and patch in a window below. Close this with `:q`
Pressing `~` on a commit sha re-blames on parent (git's ~)
Pressing `P` on a commit sha re-blames on parent (git's ^)
There's also a set of (old and a bit outdated) Vimcasts on fugitive, episodes 31-35 http://vimcasts.org/episodes/archive/