Neovim after/plugin目录文件require及Lua模块调用问题咨询
解决Neovim中require after/plugin目录文件的问题
核心原因
Neovim的require函数基于package.path中的路径查找Lua模块,而after/plugin目录默认不在这个搜索路径里;同时require接受的是模块名而非直接的文件路径(不能带.lua后缀),这就是你之前尝试方法无效的原因。
另外,启动时vim.fn.expand('%:h')会返回空值(此时没有打开任何文件),只有重新加载init.lua时,当前编辑文件是该脚本,才会返回正确路径,因此启动时报错。
一、require after/plugin/lsp/settings下的配置文件
方法1:使用dofile直接加载文件路径
dofile可以直接传入绝对文件路径执行脚本,无需依赖模块搜索路径:
dofile(vim.fn.stdpath("config") .. "/after/plugin/lsp/settings/sumneko_lua.lua")
注意:dofile不会缓存模块内容,每次调用都会重新执行脚本,适合一次性加载的配置文件。
方法2:将目标目录加入package.path后用require
在after/plugin/lsp/init.lua开头添加路径配置,之后就可以用模块名加载:
local lsp_root = vim.fn.stdpath("config") .. "/after/plugin/lsp" -- 将lsp目录及其子目录加入模块搜索路径 package.path = package.path .. ";" .. lsp_root .. "/?.lua;" .. lsp_root .. "/?/init.lua" -- 现在可以直接require设置文件 require("settings.sumneko_lua")
方法3:更规范的目录结构(推荐)
将LSP配置文件移到~/.config/nvim/lua/lsp/settings目录下(不存在则创建),lua目录是Neovim默认的模块搜索路径,直接用模块名加载即可:
-- 在after/plugin/lsp/init.lua中 require("lsp.settings.sumneko_lua")
这种方式符合Neovim配置的标准规范,避免路径相关的问题。
二、访问同目录shared.lua中的greet函数
方法1:用dofile加载
local shared = dofile(vim.fn.stdpath("config") .. "/after/plugin/lsp/shared.lua") shared.greet()
方法2:添加路径后用require
local lsp_root = vim.fn.stdpath("config") .. "/after/plugin/lsp" package.path = package.path .. ";" .. lsp_root .. "/?.lua" local shared = require("shared") shared.greet()
方法3:迁移到lua目录(推荐)
将shared.lua移到~/.config/nvim/lua/lsp/shared.lua,之后直接:
require("lsp.shared").greet()
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

