2

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

cmd /D "%windir%/system32" /K ""$(CURRENT_WORD)""

Есть ли команда для открытия текущей строки без выделения текста в этой строке вручную?

1 ответ1

1

Ни в разделе Как запустить внешнюю программу из Notepad++, ни в документации к плагину NppExec не упоминается переменная окружения, содержащая текущую строку.

Точно так же макросы могут только обрабатывать сообщения Scintilla (список), искать и заменять записи и некоторые определенные в Notepad++ команды (недокументированные?), Так что это невозможно сделать с помощью макросов.

Помимо написания собственного плагина, единственный способ, которым я знаю, как это сделать, - использовать внешнюю программу. Скрипт AutoHotkey будет делать то, что вы хотите.

Скрипт AutoHotkey:

^F5::
WinGetActiveTitle, Title
if RegExMatch(Title, "- Notepad\+\+$")
{
    SendPlay {Home}+{End}{F5}
    SendPlay cmd /D "%windir%/system32" /K "$(CURRENT_WORD)"
    SendPlay {Enter}
}
else
    SendPlay ^{F5}
return

Что оно делает:

  • Если Notepad++ является активным окном, комбинация клавиш Ctrl + F5 выберет текущую строку и выполнит внешнюю команду

    cmd /D "% windir% /system32" /K "" $(CURRENT_WORD)""

    $(CURRENT_WORD) теперь содержит всю строку, так как она была выбрана. Единственным недостатком является то, что вы потеряете текущую позицию курсора, так как скрипт оставит текущую выбранную строку.

  • Если Notepad++ не является активным окном, комбинация клавиш Ctrl + F5 будет вести себя нормально.

Как пользоваться:

  1. Загрузите и установите последнюю версию.

  2. Сохраните приведенный выше скрипт как npp_runline.ahk , используя ваш любимый текстовый редактор.

  3. Дважды щелкните файл, чтобы запустить скрипт.

  4. При желании скопируйте скрипт (или ссылку на него) в папку « Startup ».

Как это устроено:

  • ^F5:: указывает используемую горячую клавишу (Ctrl + F5).

  • WinGetActiveTitle, Title хранит заголовок активного окна в переменной Title .

  • RegExMatch(Title, "- Notepad\+\+$") возвращает позицию крайнего левого вхождения регулярного выражения - Notepad\+\+$ (где \+ - литерал + и $ в конце строки) в Title или ноль, если совпадений нет.

    • Если есть совпадение, блок после if... выполняется:

      • SendPlay {Home}+{End}{F5} имитирует нажатие Home и Shift + End (выбор текущей строки без пробела), а затем F5 (открытие диалога Run...).

      • SendPlay cmd /D "%windir%/system32" /K "$(CURRENT_WORD)" вводит именно это в диалог " Run... .

      • SendPlay {Enter} имитирует нажатие Enter (завершение диалога Run...).

    • Если совпадения нет, то блок , следующий else запускается на выполнение:

      • SendPlay ^{F5} имитирует нажатие клавиш Ctrl + F5 (отступление, если нам нужен ярлык вне Notepad ++).
  • return прекращает выполнение скрипта в текущей точке.


Смотрите также:

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .