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.

I haven't, but I don't use emacs. Crash course:

`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/