有没有一种干净的方法可以重新加载 neovim init.lua 配置及其所有模块(使用
require()
函数)而无需重新启动 neovim?
我在另一篇文章中读到
:luafile $MYVIMRC
应该可以实现这一点,但不幸的是它不会重新加载那些缓存的文件。我希望设置一个键盘映射,就像我在之前的 init.vim
配置中那样。大致如下:
local opts = { noremap = true, silent = true }
vim.api.nvim_set_keymap("n", "<leader><CR>", ":luafile $MYVIMRC<CR>", opts)
我使用的是 nvim v0.8.0。
尝试运行此命令:
:luafile %
如果在 this reddit thread 上从 creativenull 找到答案,似乎效果很好。我最终创建了一个名为
reload.lua
: 的小模块
function _G.ReloadConfig()
for name,_ in pairs(package.loaded) do
if name:match('^user') and not name:match('nvim-tree') then
package.loaded[name] = nil
end
end
dofile(vim.env.MYVIMRC)
vim.notify("Nvim configuration reloaded!", vim.log.levels.INFO)
end
导入到
init.lua
:
require 'user.reload'
我为此添加了键盘映射:
vim.api.nvim_set_keymap("n", "<leader><CR>", "<cmd>lua ReloadConfig()<CR>", { noremap = true, silent = false })
注 1:在上面的示例中,您的 lua 文件需要包含在 user 文件夹中:
~/.config/nvim/lua/user/
。这也是reload.lua
居住的地方。
注2:我认为可以使用
not name:match('exclude-me')
正则表达式语法来排除有问题的模块。
您可以使用
:luafile <filename>
来实现此目的。
请参阅 :h :luafile
了解更多信息。
这是另一个解决方案,还包括重新加载
after/
目录中的文件:
我的
~/.config/nvim
文件夹树:
.
├── after
│ ├── ftplugin
│ └── plugin
│ ├── telescope.lua
│ └── treesitter.lua
├── init.lua
├── lua
│ └── user
│ ├── init.lua
│ ├── maps.lua
│ ├── options.lua
│ └── plugins.lua
└── plugin
└── packer_compiled.lua
我的
~/.config/nvim.init.lua
:
require('user')
--- Reload the entire configuration
function reload_config()
for name,_ in pairs(package.loaded) do
if name:match('^user') then
package.loaded[name] = nil
end
end
require('user')
-- Reload after/ directory
local glob = vim.fn.stdpath('config') .. '/after/**/*.lua'
local after_lua_filepaths = vim.fn.glob(glob, true, true)
for _, filepath in ipairs(after_lua_filepaths) do
dofile(filepath)
end
vim.notify("Nvim configuration reloaded!", vim.log.levels.INFO)
end
vim.keymap.set('n', '<leader><leader><leader>x', reload_config)
这个解决方案适用于我的 Neovim v0.7.2。
-- Add modules here
local modules = {
"user.options",
"user.keymaps",
}
-- Refresh module cache
for k, v in pairs(modules) do
package.loaded[v] = nil
require(v)
end
然后您可以配置键盘映射来刷新 $MYVIMRC,如下所示:
vim.api.nvim_set_keymap("n", "<leader><CR>", ":luafile $MYVIMRC<CR>", opts)
:source
会做到的。也可以缩写为 :so
。
请参阅
:h :source
了解更多信息。