rooter.nvim changes the working directory to the project root when you open a file. It is inspired by vim-rooter.
This plugin also provides a telescope extension to fuzzy find recently opened project.
- β¨ Features
- π¦ Installation
- π§ Configuration
- βοΈ Basic Usage
- π Debug
- π¬ Feedback
- π Credits
- π£ Self-Promotion
- π License
- Automatic project root detection
- Caching for better performance
- Outermost directory support
- Flexible behavior for non-project files
- Optional logging support
- Callback APIs
- Command-line interface
- Telescope integration
- Picker.nvim integration
using nvim-plug
require('plug').add({
{
'wsdjeg/rooter.nvim',
config = function()
require('rooter').setup({
root_pattern = { '.git/' },
})
end,
}
})require('rooter').setup({
root_patterns = { '.git/' },
outermost = true,
enable_cache = true,
project_non_root = '', -- this can be '', 'home' or 'current'
enable_logger = true, -- enable runtime log via logger.nvim
command = 'lcd', -- cd, tcd or lcd
})This plugin also provides a telescope extension:
:Telescope project
:Picker project
key bindings for picker project:
| key binding | description |
|---|---|
<C-f> |
file project files |
<C-d> |
delete project |
<C-s> |
search text in project, require flygrep.nvim |
To add new callback function when project changed. You can use rooter.reg_callback, for example:
update c code runner based on project .clang file.
local c_runner = {
exe = 'gcc',
targetopt = '-o',
usestdin = true,
opt = { '-std=c11', '-xc', '-' },
}
require('code-runner').setup({
runners = {
c = { c_runner, '#TEMP#' },
},
})
vim.keymap.set(
'n',
'<leader>lr',
'<cmd>lua require("code-runner").open()<cr>',
{ silent = true }
)
-- make sure rooter.nvim plugin is loaded before code-runner
local function update_clang_flag()
if vim.fn.filereadable('.clang') == 1 then
local flags = vim.fn.readfile('.clang')
local opt = { '-std=c11' }
for _, v in ipairs(flags) do
table.insert(opt, v)
end
table.insert(opt, '-xc')
table.insert(opt, '-')
c_runner.opt = opt
end
end
require('rooter').reg_callback(update_clang_flag)This plugin also provides a user command :Rooter.
- switch to project root manually.
:Rooter
- clear cached projects.
:Rooter clear
- Delete all buffers for the specified project.
:Rooter kill project_name1 project_name2
You can enable logger and install logger.nvim to debug this plugin:
require('plug').add({
{
'wsdjeg/rooter.nvim',
config = function()
require('rooter').setup({
root_pattern = { '.git/' },
enable_logger = true,
})
end,
depends = {
{
'wsdjeg/logger.nvim',
config = function()
vim.keymap.set(
'n',
'<leader>hL',
'<cmd>lua require("logger").viewRuntimeLog()<cr>',
{ silent = true }
)
end,
},
},
},
})and the runtime log of rooter is:
[ rooter ] [23:22:50:576] [ Info ] start to find root for: D:/wsdjeg/rooter.nvim/lua/rooter/init.lua
[ rooter ] [23:22:50:576] [ Info ] (.git/):D:/wsdjeg/rooter.nvim/
[ rooter ] [23:22:50:576] [ Info ] switch to project:[rooter.nvim]
[ rooter ] [23:22:50:576] [ Info ] rootdir is:D:/wsdjeg/rooter.nvim/
If you encounter any bugs or have suggestions, please file an issue in the issue tracker
Like this plugin? Star the repository on GitHub.
Love this plugin? Follow me on GitHub.
Licensed under GPL-3.0.

