【问题标题】:How to source init.lua without restarting neovim如何在不重新启动 neovim 的情况下获取 init.lua
【发布时间】:2022-07-04 22:20:19
【问题描述】:

有没有一种干净的方法来重新加载 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。

【问题讨论】:

    标签: lua config neovim


    【解决方案1】:

    尝试运行这个命令:

    :luafile %
    

    【讨论】:

    • 感谢您的加入。% 不是针对活动缓冲区吗?我正在尝试分配一个键盘映射来从任何位置获取我的 init.lua 文件(包括模块)。
    【解决方案2】:

    谢谢!

    答:

    您可以为此使用:luafile &lt;filename&gt;。 请参阅:h :luafile 了解更多信息。

    【讨论】:

    • 对,我面临的问题是模块在使用 require() 导入时被缓存,并且简单地执行 :luafile 命令不会重新加载这些模块。将更新我的帖子以澄清这一点。
    【解决方案3】:

    如果在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') 正则表达式语法来排除有问题的模块。

    【讨论】:

      【解决方案4】:

      我还不确定。我正在使用映射:w | so % 获取当前文件 sourcing file keymap

      --更新-- 这仅适用于配置文件

      喜欢这个希望对你有帮助

      【讨论】:

      • 正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center
      【解决方案5】:

      这个solution 在 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-05-09
        • 1970-01-01
        • 2020-01-03
        • 2021-10-06
        • 2020-12-23
        • 2011-10-22
        • 1970-01-01
        • 2011-07-10
        相关资源
        最近更新 更多