Specific Vim config per Git repository
Posted on July 15, 2014 in ConfigPorn • 1 min read
I was looking for a way to add custom vim options on a per-repo basis. The standard way I saw for now, was adding some comments to change the Vim config on a per-file basis. There were some alternatives which were working for any project folder (and not only git repos) but they were only working if you start Vim from the root of the project, or they were exploring the tree from local folder up to root (and needed a plugin). None of them were satisfactory.
When I edit a file and need specific Vim configuration, it is usually
inside a git repo. So, it is easy to know what is the root folder, and I
just wanted to search for a Vimrc
file in this folder. No
complicated tree searching, working from anywhere inside the repo, no
per-file specific configuration.
First of all, the magic command I used to find the git root folder is
git rev-parse --show-top-level
.
Then, all I had to do is wrap it correctly in my .vimrc
:
" Git specific configuration
let git_path = system("git rev-parse --show-toplevel 2>/dev/null")
let git_vimrc = substitute(git_path, '\n', '', '') . "/.vimrc"
if !empty(glob(git_vimrc))
sandbox exec ":source " . git_vimrc
endif
Note: I use sandbox to prevent arbitrary functions from being executed.
This small code, added at the end of your .vimrc
will just
look for a .vimrc
at the root the git repository and
source it if possible. That’s exactly what I wanted :)