如何使用快捷方式重新加载用 lua 编写的 Neovim 配置?

ale*_*lex 13 lua config neovim

我想neovim只需按几次键即可重新加载配置文件,而不必重新启动应用程序。init.vim当使用以下命令时,我能够做到这一点:

nnoremap <leader>sv <cmd>source $MYVIMRC<CR>
Run Code Online (Sandbox Code Playgroud)

$MYVIMRC正确指向我的配置入口点。

问题是我改用了 using lua,现在我不能这样做。我已阅读文档并尝试了以下变体但没有成功:

nnoremap <leader>sv <cmd>source $MYVIMRC<CR>
Run Code Online (Sandbox Code Playgroud)

最后,我找到了一个解决方案:

util.nnoremap("<leader>sv", "<cmd>luafile $MYVIMRC<CR>")
Run Code Online (Sandbox Code Playgroud)

这是有问题的,感觉不对。

有什么办法可以做到这一点吗?我阅读了 中的示例vimpeccable,但我想查看其他可用选项,因为我不想安装另一个插件。

我知道其中plenary包含重新加载模块的功能,但我不明白如何使用它。一个完整的例子也很好,因为我已经plenary在我的配置中使用了。

Mei*_*lin 1

我是 Neovim 新用户,所以我想我的解决方案可能不适用于某些边缘情况。

该函数刷新当前缓冲区的模块:

local cfg = vim.fn.stdpath('config')
Flush = function()
    local s = vim.api.nvim_buf_get_name(0)
    if string.match(s, '^' .. cfg .. '*') == nil then
        return
    end
    s = string.sub(s, 6 + string.len(cfg), -5)
    local val = string.gsub(s, '%/', '.')
    package.loaded[val] = nil
end
Run Code Online (Sandbox Code Playgroud)

每当您使用此自动命令写入缓冲区时都可以调用它:

autocmd BufWrite *.lua,*vim call v:lua.Flush()
Run Code Online (Sandbox Code Playgroud)

这样,执行后:source $MYVIMRC它也会重新加载更改的 Lua 模块。

  • 我们需要重新加载整个文件夹,而不仅仅是单个文件。 (2认同)