如何在不重新启动 neovim 的情况下获取 init.lua

mdu*_*ule 14 lua config neovim

有没有一种干净的方法可以重新加载 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)
Run Code Online (Sandbox Code Playgroud)

我使用的是 nvim v0.8.0。

小智 16

尝试运行此命令:

:luafile %
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的插话。“%”不是针对活动缓冲区吗?我正在尝试分配一个键盘映射以从任何位置获取我的 init.lua 文件(包括模块)。 (5认同)

mdu*_*ule 6

如果在这个 reddit 线程上找到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
Run Code Online (Sandbox Code Playgroud)

导入到init.lua

require 'user.reload'
Run Code Online (Sandbox Code Playgroud)

我为此添加了一个键盘映射:

vim.api.nvim_set_keymap("n", "<leader><CR>", "<cmd>lua ReloadConfig()<CR>", { noremap = true, silent = false })
Run Code Online (Sandbox Code Playgroud)

注意 1:在上面的示例中,您的 lua 文件需要包含在用户文件夹中:~/.config/nvim/lua/user/. 那也是reload.lua住的地方。

注2:我认为可以使用not name:match('exclude-me')正则表达式语法来排除有问题的模块。