Notepad++ устанавливает неверный путь при запуске скрипта

У меня есть простой скрипт, который я хочу импортировать в другой с помощью require, но когда я запускаю его из Notepad++, я получаю обычную ошибку, которая выдает.

Самое смешное, что это сработало час назад, и с тех пор я не перезагружал компьютер.

Файлы находятся в одном каталоге, поэтому простое имя файла (без.lua) сработало и должно работать. (относительный путь)

Луа прекрасно запускает сценарий.

это то, что я ввел в блокноте: cmd /k lua "$(FULL_CURRENT_PATH)"

Ранее у меня также была проблема с Penlight, может быть, есть какое-то соединение, вот оно: я пытался потребовать "pl", но не смог найти модуль. (бежал от SciTE, работал превосходно) Я попробовал это в командной строке Lua, и это сработало как шарм. Попробовал еще раз в SciTE и вуаля снова заработало.

Я понятия не имею, что вызывает любой из них.

PS: с помощью модуля lfs и os.execute("cd /d ...path...") не работает

1 ответ

Lua ищет нужный вам модуль в папках LUA_PATH. В сценарии, который вы запускаете через F5, поместите этот оператор:

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

После печати "работающего" фордера (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'
Другие вопросы по тегам