Преамбула
Точнее, конечно же, просто запуск стороннего компилятора, причем любого, имеющего поддержку командной строки (а они почти все такие, кроме совсем уж редких). Пока малому приятелю помогал написать Hello World на ассемблере, задолбался переключаться между редактором Far’а и батниками для сборки. MultiEdit или любимый FOTON, к которым можно привинтить компилятор, под Win7 не работают, но возможность запускать сторонние компиляторы оказалась у Notepad++
Установка плагина NppExec
Современные версии Notepad++ позволяют установить плагин из самого редактора.
Заходим в Плагины —> Управление Плагинами… и в появившемся окне вбиваем в строку поиска NppExec
. Ставим напротив него галочку, и нажимаем ставшей активной кнопку Установить.
Notepad++ попросит перезагрузиться, скачает плагин и установит его.
После чего, в меню Плагины появится новое подменю NppExec.
В данном меню надо снять галочки напротив всех пунктов, выделенных по умолчанию, а поставить напротив пункта Follow $(CURRENT_DIRECTORY).
Написание скрипта
Осталось написать нужный скрипт для вызова компилятора и линковщика, покажу на примере TASM32.
Нажимаем F6 или в меню Плагины —> NppExec —> Execute NppExec Script…
Попадаем в пустое окно, где можно вводить команды скрипта:
Синтаксис скрипта мало отличается от BAT/CMD, за исключением того, что доступны внутренние команды Notepad++ и специальные внутренние переменные.
Для простейшего случая понадобится одна внутренняя команда и две специальных переменных. Сначала приведу пример скрипта, а потом опишу, что он делает.
npp_save
cd "$(CURRENT_DIRECTORY)"
N:\TASM\BIN\tasm32.exe /ml $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
N:\TASM\BIN\tlink32 /Tpe /aa $(NAME_PART).obj,,,"N:\TASM\LIB\IMPORT32.LIB"
:exit
Скрипт выполняет компиляцию ассемблером TASM32 и линковку без запуска получившейся программы.
npp_save
— внутренняя команда Notepad++, сохранить текущий файл.
Примечание: Для нового файла появится окно сохранения.
Примечание #2: Стоит сохранять несохраненный файл под именем, содержащим только латиницу, а также выбрав нужный тип файла в окне сохранения. В противном случае могут быть глюки, зависящие от совокупности глюков плагина и компилятора.
cd
— аналогично команде BAT/CMD, перейти в указанную директорию.
"$(CURRENT_DIRECTORY)"
— внутренняя переменная с текущей директорией. Текущей директорией считается та, где сохранен файл, открытый в активной вкладке редактора (т.е. файл, который редактируем).
N:\TASM\BIN\tasm32.exe /ml $(FILE_NAME)
— вызов компилятора с нужными параметрами.
$(FILE_NAME)
— полное имя файла без пути, например, hello.asm
, если этот файл открыт на активной вкладке редактора.
if $(EXITCODE) !=0 goto exit
Команды if
и goto
работают почти также, как и в BAT-файлах. Некоторое различие в оформлении условий.
$(EXITCODE)
— внутренняя переменная, получающая код возврата ранее вызванного приложения. Аналог %ERRORLEVEL%
в BAT/CMD. Вызванные внешние компиляторы TASM/TASM32 завершаются с кодом 0
, если компиляция прошла успешно.
Далее вызывается линковщик:
N:\TASM\BIN\tlink32 /Tpe /aa $(NAME_PART).obj,,,"N:\TASM\LIB\IMPORT32.LIB"
$(NAME_PART)
— внутренняя переменная, содержащая имя файла без расширения и точки. Например, если на активной вкладке открыт файл hello.asm
, переменная $(NAME_PART)
содержит значение hello
.
В конце скрипта ставим метку :exit
— метка начинается с двоеточия (:
).
Чтобы пользоваться скриптом постоянно, нужно его сохранить (кнопка Save…) и ввести имя, например TASM COMPILE
:
Скрипт можно модифицировать так, чтобы после компиляции и линковки сразу выполнять программу:
npp_save
cd "$(CURRENT_DIRECTORY)"
N:\TASM\BIN\tasm32.exe /ml $(FILE_NAME)
if $(EXITCODE) !=0 goto exit
N:\TASM\BIN\tlink32 /Tpe /aa $(NAME_PART).obj,,,"N:\TASM\LIB\IMPORT32.LIB"
if $(EXITCODE) !=0 goto exit
$(NAME_PART).exe
:exit
Можно сохранить модифицированный скрипт под другим именем, например, TASM COMPILE AND RUN
.
При запуске плагин запоминает последний выполненный скрипт, и при новом запуске по F6 он уже будет открыт в окне NppExec, что, конечно же, удобно.
При выполнении скрипта откроется окно консоли, в котором можно наблюдать за ходом его выполнения:
NPP_SAVE: N:\SimpleAsm\hello.asm
CD: N:\SimpleAsm
Current directory: N:\SimpleAsm
N:\TASM\BIN\tasm32.exe /ml hello.asm
Process started (PID=7964) >>>
Turbo Assembler Version 5.0 Copyright (c) 1988, 1996 Borland International
Assembling file: hello.asm
Error messages: None
Warning messages: None
Passes: 1
<<< Process finished (PID=7964). (Exit code 0)
IF: $(EXITCODE) !=0 goto exit
N:\TASM\BIN\tlink32 /Tpe /aa hello.obj,,,"N:\TASM\LIB\IMPORT32.LIB"
Process started (PID=2784) >>>
Turbo Link Version 1.6.71.0 Copyright (c) 1993,1996 Borland International
<<< Process finished (PID=2784). (Exit code 0)
IF: $(EXITCODE) !=0 goto exit
hello.exe
Process started (PID=6360) >>>
<<< Process finished (PID=6360). (Exit code 0)
================ READY ================
Бэкап скриптов
NppExec хранит скрипты в каталоге
C:\Users\<username>\Application Data\Notepad++\plugins\config\
где:
<username>
— ваше имя пользователя.
В файлах:
npes_last.txt
— хранится последний использованный скрипт.
npes_saved.txt
— хранятся все скрипты, его можно забэкапить.
Источник
Компиляция программ с помощью Notepad++ — большая и несколько сумбурная статья на Habr.