Как я могу перезагрузить свою конфигурацию Neovim, написанную на lua, с помощью ярлыка?

#lua #config #neovim

Вопрос:

Я хочу перезагрузить свои 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 его в своей конфигурации.

Ответ №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.

Комментарии:

1. нам нужна перезагрузка для всей папки, а не только для одного файла.