#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. нам нужна перезагрузка для всей папки, а не только для одного файла.