Как заставить Notepad++ запускать скрипт на основе его имени?

Я хочу, чтобы notepad++ запускал команду «ruby {filename_here}», если текущее имя файла заканчивается на .rb, и «perl {filename_here}», если оно заканчивается на .pl. Я пытался использовать плагин NppExec, но он не может делать условные вещи, поэтому я написал летучую мышь

@echo off

if /i %~sx1 == .pl perl "%~f1"
if /i %~sx1 == .rb ruby "%~f1"
if /i %~sx1 == .php php "%~f1"

Теперь я могу использовать его из командной строки, например C:\Program Files\Notepad++>runscript "D\pl.pl", и он отлично работает. Теперь, как я могу привязать какой-либо ключ в Notepad ++ к «runscript $ (FULL_CURRENT_PATH)»? Я пытался использовать меню «Выполнить» -> «Выполнить» (F5), но, похоже, это не сработало.


person Fluffy    schedule 09.07.2009    source источник


Ответы (5)


Вам нужно поместить имя файла в конце команды. В диалоговом окне «Выполнить» (F5) попробуйте следующее:

runscript $(FULL_CURRENT_PATH)

Если вы хотите проверить это, вы можете поставить & pause в конце, просто чтобы посмотреть, работает ли это.

Вы также можете немного изменить свой сценарий, чтобы каждый файл не тестировался для каждого расширения, используя ужасную команду GOTO с метками расширения файла:

@echo off
GOTO %~sx1
:.pl
  perl "%~f1"
  GOTO end
:.rb
  ruby "%~f1"
  GOTO end
:.php
  php "%~f1"
  GOTO end
:end
person akf    schedule 03.08.2009
comment
В текущей версии Notepad++ $(FULL_CURRENT_PATH) уже содержит имя файла. - person Simon Perepelitsa; 26.09.2010
comment
Здесь есть одна ошибка, вам нужно убедиться, что вы используете сценарий запуска $(Full_CURRENT_PATH), иначе вы получите сообщение об ошибке, если ваш сценарий находится в папке, в которой есть пробелы. - person runxc1 Bret Ferrier; 01.12.2010
comment
Runscript.bat вообще не нужен - просто введите $(Full_CURRENT_PATH), и Windows должна отправить файл в правильный исполняемый файл, если ассоциации файлов и PATHEXT установлены правильно. - person dankingsbury; 01.09.2011

В notepad++ версии 6.2, работающем в Windows, просто используйте "$(FULL_CURRENT_PATH)" с кавычками, чтобы файл был открыт с помощью программы по умолчанию, связанной с файлом. Итак, убедитесь, что "редактировать с помощью notepad++" НЕ является действием по умолчанию при двойном щелчке.

person Eduardo Poço    schedule 27.11.2012

У меня были проблемы с тем, чтобы заставить его работать так, чтобы он держал окно оболочки открытым, пока я смотрю, что он сделал. Размещение "& pause" в конце не помогло, пока я не добавил cmd /c в начале:

cmd /c c:\php\php.exe -l "$(FULL_CURRENT_PATH)" & pause

Чтобы сохранить результаты команды на экране, вы можете использовать переключатель /k, как предложил Джордж: cmd /k c:\php\php.exe -l "$(FULL_CURRENT_PATH)"

Это прекрасно работает, я использую его для быстрой проверки синтаксиса в Notepad++.

person userfuser    schedule 04.11.2011
comment
Вы также можете попробовать использовать /k вместо /c, а затем избавиться от & pause. /c заканчивается там, где /k остается. - person George; 06.01.2015
comment
Это хорошо, Джордж. Похоже, человек никогда не сможет достаточно выучить свои переключатели оболочки :) - person userfuser; 16.01.2015

Вы можете попробовать npp_exec, используя следующий скрипт:

NPP_SAVE
SET Executer = execute$(EXT_PART)
NPP_EXEC "$(Executer)"

А затем используйте скрипт с именем execute.rb:

perl $(FULL_CURRENT_PATH) //or something like that

этот метод описан здесь

person Apanatshka    schedule 25.11.2010

Существует плагин под названием RunMe, который может открывать текущий файл в программе по умолчанию. Это лучшее решение, чем команда «$(FULL_CURRENT_PATH)», потому что она изменяет текущий каталог на путь к файлу, и эта команда запускает файл по пути N++.

person Greck    schedule 10.03.2013
comment
Я очистил команду быстрого доступа для mainmenu > Run и установил Shell Execute current file на F5, но это не работает. Странный. Если я вызываю функцию из меню, она работает. - person bgmCoder; 24.08.2017