Neovim Lua配置异常:非配置目录启动无法导入lsp模块
问题描述
在~/.config/nvim目录下放置了init.vim和lsp.lua,init.vim中通过lua require('lsp')加载模块:
- 在
~/.config/nvim目录启动Neovim时一切正常 - 从其他目录启动时,出现模块找不到错误:
Error detected while processing /Users/mds31/.config/nvim/init.vim:
line 33:
E5108: Error executing lua [string ":lua"]:1: module 'lsp' not found:
no field package.preload['lsp']
no file './lsp.lua'
no file '/usr/local/share/luajit-2.1.0-beta3/lsp.lua'
no file '/usr/local/share/lua/5.1/lsp.lua'
no file '/usr/local/share/lua/5.1/lsp/init.lua'
no file './lsp.so'
no file '/usr/local/lib/lua/5.1/lsp.so'
no file '/usr/local/lib/lua/5.1/loadall.so'
stack traceback:
[C]: in function 'require'
[string ":lua"]:1: in main chunk
补充:执行:lua print(vim.inspect(vim.api.nvim_list_runtime_paths()))确认/Users/mds31/.config/nvim在runtime路径首位,但require('lsp')仍报错。
解决办法
方法1:规范放置Lua模块(推荐)
Neovim默认会将~/.config/nvim/lua/目录加入Lua的模块搜索路径,按规范调整文件结构即可:
- 在
~/.config/nvim下创建lua子目录:mkdir ~/.config/nvim/lua - 将
lsp.lua移动到lua目录下:mv ~/.config/nvim/lsp.lua ~/.config/nvim/lua/ - 无需修改
init.vim中的require('lsp')语句,此时无论从哪个目录启动Neovim,都能正确加载模块。
方法2:手动添加配置目录到Lua搜索路径
如果不想调整文件结构,可在init.vim中加载lsp前,先将配置目录加入Lua的package.path:
lua << EOF package.path = package.path .. ';' .. vim.fn.stdpath('config') .. '/?.lua' require('lsp') EOF
替换原来单独的lua require('lsp')语句即可。
验证方法
可在init.vim中添加临时代码查看Lua的搜索路径,确认配置是否生效:
print(vim.inspect(package.path))
内容的提问来源于stack exchange,提问作者Mike Davies

