采购 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 的来源...
:lua dump(_G)
-- 全局环境table
:lua dump(vim)
-- nvim 的东西(又名模块)
:lua dump(vim.api)
-- nvim API 函数(又名库)
:lua dump(jit)
-- 即时编译器 ;-)
:lua dump([Table Name])
-- 任何看起来有趣的table
:lua dump(package.loaded)
-- 需要的东西
无需先定义 dump
即可执行上述函数::lua require('dump')(_G)
所以:首先需要将 dump.lua 加载到 package.loaded.dump 中并 returning 并且每个进一步需要 returning: package.loaded.dump
如果您有敏锐的眼光而不是看看 _G.dump
那只是对 package.loaded.dump. 的参考 (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。它有自己的一些“暗角”,但它更适合编写配置。
我有 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 的来源...
:lua dump(_G)
-- 全局环境table:lua dump(vim)
-- nvim 的东西(又名模块):lua dump(vim.api)
-- nvim API 函数(又名库):lua dump(jit)
-- 即时编译器 ;-):lua dump([Table Name])
-- 任何看起来有趣的table:lua dump(package.loaded)
-- 需要的东西
无需先定义dump
即可执行上述函数::lua require('dump')(_G)
所以:首先需要将 dump.lua 加载到 package.loaded.dump 中并 returning 并且每个进一步需要 returning:package.loaded.dump
如果您有敏锐的眼光而不是看看_G.dump
那只是对 package.loaded.dump. 的参考 (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。它有自己的一些“暗角”,但它更适合编写配置。