【问题标题】:How can I reload my Neovim config written in lua with a shortcut?如何使用快捷方式重新加载用 lua 编写的 Neovim 配置?
【发布时间】:2021-09-25 15:07:18
【问题描述】:

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

nnoremap <leader>sv <cmd>source $MYVIMRC<CR>

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

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

util.nnoremap("<leader>sv", "<cmd>luafile $MYVIMRC<CR>")

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

function load(name)
    local path = vim.fn.stdpath('config') .. '/lua/' .. name .. '.lua'
    dofile(path)
end

load('plugins')
load('config/mapping')
load('lsp/init')

这是错误的,感觉不对。

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

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

【问题讨论】:

    标签: lua config neovim


    【解决方案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
    

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

    autocmd BufWrite *.lua,*vim call v:lua.Flush()
    

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

    【讨论】:

    • 我们需要重新加载整个文件夹,而不仅仅是单个文件。
    猜你喜欢
    • 2023-02-26
    • 2021-11-02
    • 1970-01-01
    • 2011-01-13
    • 2014-02-27
    • 1970-01-01
    • 2021-10-27
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多