rooter.nvim
changes the working directory to the project root when you open a file. It is inspired by vim-rooter.
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
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/
Like this plugin? Star the repository on GitHub.