采购 nvim.init 未采购所需的 Lua 文件

Sourcing nvim.init does not source required Lua files

我有 neovim 0.7.0 运行ning 我的 .vimrc 在 ~/.config/nvim/init.vim

我还有以下文件:~/.config/nvim/lua/statusline.lua 一行代码: print('message from statusline.lua')

里面init.vim我有:

echo 'from init.vim'
lua require('statusline')

当我启动 nvim 时,我打印了两条消息('from init.vim' 和 'message from statusline.lua'),这正是我所期望的。

当我 运行 :source $MYVIMRC 我只看到 'from init.vim'。我希望其他消息 ('message from statusline.lua') 也会出现。

我认为这意味着我在 statusline.lua 中所做的任何更改都不会在我 运行 :source $MYVIMRC 中生效。我应该如何在不关闭和重新启动 neovim 的情况下获取我的 init.vim 文件及其所需的任何文件?

这取决于您的 statusline.lua 设计和对 Lua 模块加载器系统的了解。
看起来,因为我不得不猜谜 statusline.lua,所以它没什么 returns.
因为 return 进入 package.loaded 并且同一会话中的相同要求首先在那里查找 statusline
所以请尝试以下...

-- statusline.lua
print('message from statusline.lua')
return 'message from package.loaded.statusline'

我在上面测试过...

$ lua -i
Lua 5.4.4  Copyright (C) 1994-2022 Lua.org, PUC-Rio
> require('statusline')
message from statusline.lua
message from package.loaded.statusline  ./lua/statusline.lua
> require('statusline')
message from package.loaded.statusline
> require('statusline')
message from package.loaded.statusline

编辑
另一种有用的设计...

-- ~.config/nvim/init.vim
lua print("init.vim")
lua dump = require("dump")

还有...

-- ~/.config/nvim/lua/dump.lua
local dump = function(tab)
for key, value in pairs(tab) do
 print(key, '=>', value)
end
end

return dump

你有一个 table 查看器,你可以看到函数和 table 的来源...

  1. :lua dump(_G) -- 全局环境table
  2. :lua dump(vim) -- nvim 的东西(又名模块)
  3. :lua dump(vim.api) -- nvim API 函数(又名库)
  4. :lua dump(jit) -- 即时编译器 ;-)
  5. :lua dump([Table Name]) -- 任何看起来有趣的table
  6. :lua dump(package.loaded) -- 需要的东西
    无需先定义 dump 即可执行上述函数::lua require('dump')(_G)
    所以:首先需要将 dump.lua 加载到 package.loaded.dump 中并 returning 并且每个进一步需要 returning: package.loaded.dump
    如果您有敏锐的眼光而不是看看 _G.dump 那只是对 package.loaded.dump.
  7. 的参考 (pointer/link)

编辑2
准备 dump.lua 以便与 vim.api.nvim_input()

一起使用
-- ~/.config/nvim/lua/dump.lua
local dump = function(tab)
local tmp = ''
for key, value in pairs(tab) do
 tmp = tmp .. ('%s %s %s\n'):format(key, '=>', value)
end
return tmp
end

return dump

现在转储函数 returning 字符串和输出可以加载到 nvim 中::lua vim.api.nvim_input('i') vim.api.nvim_input(dump(vim.api))

因为许多 nvim API 函数 returning a table 转储函数变得很方便...

通过将 return false 附加到模块末尾来使缓存条目无效。

或者根本不使用 require,因为您既不需要缓存也不需要路径搜索。例如

for k, v in ipairs(vim.fn.glob("~/.config/nvim/init.d/*.lua", false, true)) do
    dofile(v)
end

P.S。 Lua 不是“配置工具”。它是一种 full-featured 编程语言。如果您不喜欢通过正确学习(即阅读书籍和教程)来浪费时间,强烈建议您改用 VimScript。它有自己的一些“暗角”,但它更适合编写配置。