当运行脚本时,Notepad++会设置错误的路径。

我有一个简单的脚本,想要在另一个脚本中用require导入,但是当我在Notepad++中运行它时,出现了require导致的常见错误。

有趣的是,它一个小时前还能工作,而在那之后我没有重新启动计算机。

这些文件在同一个目录中,所以简单的文件名(没有.lua)能够工作并且应该仍然能够工作。(相对路径)

Lua可以正常运行脚本。

这是我在Notepad中输入的内容: cmd /k lua "$(FULL_CURRENT_PATH)"

我之前还遇到了Penlight的问题,或许有些联系,所以在这里提一下: 我试图require"pl",但是它无法找到这个模块。(在SciTE中运行失败,先前可行) 在Lua命令行中试了一下,直接成功了。 再次在SciTE中尝试,竟然又能成功了。

我不知道是什么导致这些问题。

附:使用lfs模块和os.execute("cd /d ...path...")都没有起作用。

点赞
用户869951
用户869951

Lua 正在 LUA_PATH 文件夹中查找你所需的模块。在你通过 F5 运行的脚本中,加入这条语句:

print('current path is:')
os.execute('cd')
require 'someModuleThatDoesntExist'

打印出 "working" 文件夹(Program Files/Notepad++)后,它会尝试查找所需的模块并失败。回溯显示 Lua 查找了许多不同的文件夹,但没有包含 FULL_CURRENT_PATH 的那个,所以无法找到模块。

你有几个选择:

  1. 将你的脚本放在列出的路径之一中。
  2. 在环境中设置 LUA_PATH 来包含你的脚本所在的文件夹名称。
  3. 从你的脚本中更改 package.path,以便它知道在哪里查找其他模块。你可以通过以下方式之一来实现:
    • 在 F5 中包含一个额外的参数,即 CURRENT_DIRECTORY,并使你的脚本将其作为第一个命令行参数(CURRENT_DIRECTORY)添加到 package.path 中。
    • 当你的脚本启动时解析 arg[0],以获取包含脚本的文件夹,并扩展 package.path。

例如,在 #3 的第一个选项中,你可以使用

cmd /k lua "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)"

在 Notepad++ 中,在你的 Lua 模块中,你可以使用

thisModuleDir = arg[1]
package.path = thisModuleDir .. ";" .. package.path
require 'yourmodule'
2013-12-07 13:28:32