Navigating files with Vim is cumbersome. The default settings and the inbuilt file browser netrw are not convenient.
I use vim-picker to navigate in a project.
vim-picker is a fuzzy file picker for NeoVim and Vim:
To use vim-picker you need a program that can traverse your project with a fuzzy text selector.
vim-picker will search the current working directory. That’s the folder in which you’ve opened Vim.
You need to open Vim in the project root directory (most often the Git project root), so that you can use fuzzy file and text searching.
But if you want to use file auto-completion relative to the opened file, the system fails you. Now you’ll get auto-completion relative to the project root.
Vim should use the project root folder as working directory. For me, that’s almost always a Git project.
When I insert text into a file, I want to switch the current working directory to the folder of the file. That way, auto-completion of file names work (via
I found this solution on superuser.com, but adjusted it to my needs.
The original resource uses
autochdir, which doesn’t play well with fuzzy searching. I use
lcd instead. The command sets the current directory for the Vim window.
Add this to your Vim/NeoVim configuration:
augroup working_directory autocmd! " set current directory on insert mode autocmd InsertEnter * let save_cwd = getcwd() | silent! lcd %:p:h " switch back to previous directory when leaving insert mode autocmd InsertLeave * silent | execute 'lcd' fnameescape(save_cwd) augroup END
If you prefer to set the project root to the Git folder, take a look at the blog post Sane Vim Working Directories by Jonathan Lehman.
- superuser: Vim file name completion relative to current file
- Vim Wiki: Set working directory to the current file
- Sane Vim Working Directories by Jonathan Lehman
- Navigating project files with Vim by Arjan van der Gaad
- Vim: you don’t need NERDtree or (maybe) netrw by George Ornbo