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

问题描述 投票:0回答:7

有没有一种干净的方法可以重新加载 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
7个回答
17
投票

尝试运行此命令:

:luafile %

7
投票

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


5
投票

您可以使用

:luafile <filename>
来实现此目的。 请参阅
:h :luafile
了解更多信息。


1
投票

这是另一个解决方案,还包括重新加载

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)

0
投票

我还不确定。我正在使用映射:w | so % 获取当前文件 采购文件键盘映射

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

喜欢这个希望有帮助


0
投票

这个解决方案适用于我的 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)

0
投票

:source
会做到的。也可以缩写为
:so

请参阅

:h :source
了解更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.