此教程主要是针对Notepad++的NppExec插件的使用命令进行对Java语言中package包名称的自动识别并编译运行。因为对Java语言处于初学阶段,故目前实现的功能是对当前文件所在文件夹中的所有文件进行编译(javac指令),之后识别以package关键字开头的行,并提取其中包的名称,再运行。
对控制台中javac和java以及Notepad++的NppExec插件的控制台指令有基础的可以直接看NppExec的宏指令。
编译指令:
NPP_SAVEALL
cd $(CURRENT_DIRECTORY)
javac -encoding UTF-8 -d . *.java
exit
- 1
- 2
- 3
- 4
运行指令:
cd $(CURRENT_DIRECTORY)
cmd /c findstr "^package" $(NAME_PART).java>a.txt
cmd /c for /f "tokens=2 delims=; " %i in (a.txt) do set aa=%i&del a.txt&cmd /c start /b java %aa%.$(NAME_PART)
- 1
- 2
- 3
编译并运行指令
NPP_SAVEALL
cd $(CURRENT_DIRECTORY)
javac -encoding UTF-8 -d . *.java
if $(LAST_CMD_RESULT)==1 then
cmd /c findstr "^package" $(NAME_PART).java>a.txt
cmd /c for /f "tokens=2 delims=; " %i in (a.txt) do set aa=%i&del a.txt&cmd /c start /b java %aa%.$(NAME_PART)
else
exit
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
接下来说明其原理和每条命令的含义
这个涉及到批处理指令和NppExec指令,批处理指令可以自行百度打基础,后者通过在NppExec控制台中使用 help 或 help 指令名 的形式来获取帮助信息。
首先我们需要明白其原理,NppExec插件的控制台与cmd类似但不是一个东西,我的理解时NppExec的控制台是Notepad++与cmd之间连接的一个控制台程序,它有大多控制台命令但对cmd的某些命令格式并不支持,例如在cmd中有指令del可以删除文件,但NppExec控制台中却没有这个指令,无法识别。所以在我看来,NppExec控制台与cmd控制台不是一个体系,这两者指令集不同,同时变量集之间也不能共用。
NppExec插件最好用的是它的默认变量集,通过 $(名称) 来使用,它会在将命令送往控制台之前将这些默认变量集全部换成其变量的值,例如在编译指令中的
cd $(CURRENT_DIRECTORY)
他会先将变量$(CURRENT_DIRECTORY)替换成当前文件所在目录的路径名称,并使用cd指令进入到这个目录,以便之后的指令进行。
编译指令
NPP_SAVEALL
//NppExec指令集,用于保存当前所有用Notepad++打开的文件
·
cd $(CURRENT_DIRECTORY)
//进入当前目录
·
javac -encoding UTF-8 -d . .java
//使用javac指令编译当前目录下所有后缀名是java的文件(以UTF-8的编码格式)
//注意此javac指令有两个选项: -encoding(指名编码格式)和-d选项
//javac -d 选项使用格式(详细参考在cmd中输入javac --help获取帮助信息): javac -d 目录名 文件名 此处使用“."(英文句号)作为目录名,指当前目录,.java 指名文件名,指所有以.java结尾的文件名
·
exit
//NppExec指令,可以不加,只是用于退出当前控制台进程
运行指令:
cd $(CURRENT_DIRECTORY)
//进入当前目录
·
cmd /c findstr “^package” $(NAME_PART).java>a.txt
//cmd /c 是将之后的指令传递到cmd中执行,但不显示cmd窗口,而是将输出结果继续显示到NppExec控制台中,由于NppExec控制台没有findstr指令,所以要放到cmd中执行
//findstr 是cmd指令,使用格式find 字符串 文件名 ,这里”^package"是要寻找的字符串,符号^是行开头的意思, $(NAME_PART)是当前文件文件名(不含后缀)
//此指令是使用findstr指令在当前选定的java文件中搜索以package开头的行并将那一行的信息导入到当前目录下的\a.txt文件中
·
cmd /c for /f "tokens=2 delims=; " %i in (a.txt) do set aa=%i&del a.txt&cmd /c start /b java %aa%.$(NAME_PART)
//此命令分三部分
//控制台for指令用于在上一步生成的\a.txt文件中提取出包名称
//del 删除a.txt文件,减小不必要的空间占用
//java命令运行java程序
另外切记,由于NppExec插件是逐行读取指令,所以即使使用了&字符也要将命令放在同一行,不能随意换行!!
至于NppExec如何将命令导入和设置快捷键请自行百度“NppExec使用”即可,此处不再讲解。
</div>