首页 > 其他分享 >[转载]在notepad++中使用NppExec编译代码

[转载]在notepad++中使用NppExec编译代码

时间:2023-05-01 20:32:02浏览次数:48  
标签:脚本 文件 run ++ notepad 编译 NppExec nppExec


作者:凌烟阁_天策


   作为一个notepad++的使用者,你是否想过,在一步简单的操作中,就可以利用关联的编译器来编译代码?
你或者已经利用nppExec扩展来编译文件,但是如果要自动执行又该如何?如果你想用tcc编译c文件,用g++编译cpp文件,用gawk自动解释awk文件,而不用调用编译器或者解释器,又将如何?这些都可能吗?
    是的,nppExec已经足够你做到这些。你只需要一点想象力和简单的几步。我将在下面说明什么是需要做的。
让我们以一些理论问题作为开始。
    首先,nppExec如何从你目前的文档中看出哪个编译器或者解释器是你需要的?nppExec不是一个编译器,它从你的文件中得不到任何信息,因此并不知道如何处理它。更重要的是,Notepad++自身不是一个像Visual C++ 或者Dev C++的IDE,它不包含任何编译器,不知道如何处理你的文件。
因此,在Notepad++(在这里是nppExec)中利用相应编译器编译文件的唯一方法是告诉它使用哪个编译器以及如何使用。
    这也许是你已经使用的方法——明确使用含有这些代码的编译器/解释器。例如,你可能想用tcc编译和运行你的c文件,一个简单的nppExec脚本如下:
    "C:toolstcctcc.exe" "$(FULL_CURRENT_PATH)" –run
    完整的路径"C:toolstcctcc.exe"是所需要编译器的路径。notepad++的环境变量"$(FULL_CURRENT_PATH)" 是你目前源文件的完整路径。tcc的命令行“-run”意为“运行编译的代码”。完整的路径一般通过引用的方式给出,因为一般情况下,里面会含有空格。
现在,我们来看nppExec的脚本。它假定脚本已经创建,并且保存的名字可以确认是哪一种脚本。如果你不确定nppExec的脚本生成保存过程,那么请往下看。
    我们按照以下步骤来创建和保存nppExec脚本:
   

   在“Execute”窗口中输入你的脚本。例如: "C:toolstcctcc.exe" "$(FULL_CURRENT_PATH)" -run
保存脚本。按下“Save”按钮,输入文件名(比如“[email protected]”)并按下“Save”
    现在你可以在notepad++中编译和运行单个c文件。按下F6(“Execute”窗口的默认快捷键),选择组合框中的"[email protected]”,然后按下“确定”。
    你也可以使用Ctrl+F6组合键重新执行脚本而不显示“Execute”窗口。
可以看到,现在我们使用“[email protected]”明确地编译和运行c代码。因此,要编译运行其他语言(cpp,asm,php,lua...)的代码,你必须使用相关联的脚本。(最后一句假定你已经为使用的编程语言创建了独立的nppExec脚本。)
    但是,我们不想明确地使用需要的脚本。我们希望nppExec为c文件使用“[email protected]”文件,而为其他的编程语言自动使用相应不同的脚本。
    问题是:怎样才能实现这个功能?
    解决方案的第一部分是编程语言的扩展。用notepad++打开的文件中,有这样一个环境变量$(EXT_PART)包含了源代码的扩展。
    解决方案的第二部分是nppExec的内部命令NPP_EXEC。你可能已经知道,这个命令期望得到已经存在的脚本名称或者脚本文件名称作为它的第一个变量。这个命令的目的是执行特定的脚本。
因此,如果你使用NPP_EXEC命令,它的第一个变量(要执行的脚本)取决于目前文件的扩展,你可以在一个脚本中调用不同的脚本。
    下面我们在细节上检验一下。
    我们接下来将要创建一个脚本,这个脚本允许我们为不同编程语言的文件调用不同的脚本(取决于编程语言的扩展)。换句话说,我们使用NPP_EXEC命令调用需要的脚本,脚本名字取决于目前语言的扩展。上面脚本“[email protected]”包含两部分,第一部分“run@”和扩展“.c”。文件的扩展名可以从notepad++中得到,脚本的一般形式如下:“run@$(EXT_PART)”。
    不难理解当使用cpp源代码时,脚本名字变为“[email protected]”,使用lua时,脚本名字编程“[email protected]”.
现在让我们来创建一个通用的编译/运行脚本,它可以编译和运行任何语言的文件。
     

// construct the script name to be called
          SET Compiler = run@$(EXT_PART)
          // call the script
          NPP_EXEC "$(Compiler)"


    保存上述脚本,名为“compile_or_run”。现在它是你的启动脚本,可以编译任何语言的文件。按下F6,选择“compile_or_run”并确定。但是,不要忘记对所有你希望编译的脚本,这个启动脚本需要已经存在的脚本。因此,“[email protected]”必须存在来编译一个cpp文件,“[email protected]”必须来编译一个php文件,诸如此类。
可以看一下的例子:
   

// [email protected]
         "C:toolstcctcc.exe" "$(FULL_CURRENT_PATH)" -run
  
         // [email protected]
          SET g++ = C:Dev-Cppbing++.exe
         SET obj = $(CURRENT_DIRECTORY)$(NAME_PART)
         "$(g++)" -c "$(FULL_CURRENT_PATH)" -o "$(obj).o"
         "$(g++)" "$(obj).o" -o "$(obj).exe"
         NPP_RUN "$(obj).exe"
         UNSET obj
         UNSET g++
  
          // [email protected]


        

        对于任何.c,.cpp,.awk文件,这些脚本在选择“compile_or_run”时都会自动执行。你可以创建更多“run@...”脚本来编译任何你需要的文件。
    现在让我们返回“compile_or_run”脚本。它使用NPP_EXEC命令来把读取的文件名作为第一个变量。这意味着什么?这说明你是从文件中执行NPP_EXEC脚本。
    你也可以看到,“compile_or_run”脚本的实现需要很多额外的“run@...”脚本,它们可能和你明确调用的脚本存在一起。与此同时,你不会明确调用“run@...”。因此,“run@...”脚本在NPP_EXEC的执行组合框里也许已经不再需要。
    因此,你需要修改脚本,使得可以调用不同的文件而非内部的脚本。例如:
       

// compile_or_run
         SET Compiler = C:toolsNppExec Scriptsrun@$(EXT_PART).txt
         NPP_EXEC "$(Compiler)"


 
    现在你必须创建一个目录“C:toolsNppExec Scripts”,它包含了下列文件:“[email protected]”,“[email protected]”或者“[email protected]”。这些文件的文本必须同脚本“[email protected]”、"[email protected]”、“[email protected]”一致。比如文件"C:toolsNppExec [email protected]"必须包含 "C:toolsgawkgawk.exe" -f "$(FULL_CURRENT_PATH)"。
    关于NPP_EXEC命令的更多信息,在notepad++打开NppExec's Console,输入
help npp_exec
    要得到NppExec的帮助信息,仅仅需要输入help即可。
 
下面是perl在notepad++中的设置,可以作为参考。

* Type F6 to open the execute window
* write the following commands:
      o npp_save <-- Saves the current document
      o CD $(CURRENT_DIRECTORY) <-- Moves to the current directory
      o perl.exe -c -w "$(FILE_NAME)" <-- executes the command perl.exe -c -w <filename>, example: perl.exe -c -w test.pl (-c = compile -w = warnings) 
* Click on Save
* Type a name to save the script (ie Perl Compile)
* Go to Menu Plugins -> Nppexec -> advanced options -> Menu Item
* In the combobox select the script recently created and click ok -> ok
* Restart Notepad
* Go to Menu Settings -> Shortcut mappter -> Plugins -> search for the script name
* Select the shortcut to use (ie ctrl + 1), click ok
* Verify that you can now run the script created with the shortcut selected

UPDATE 2010-07-08:

共享一下我的lua和python配置脚本

Lua:

npp_save
CD $(CURRENT_DIRECTORY)
C:Program FilesLua5.1lua.exe 

python

npp_save
CD $(CURRENT_DIRECTORY)
C:Python31python.exe 

标签:脚本,文件,run,++,notepad,编译,NppExec,nppExec
From: https://blog.51cto.com/u_130277/6239340

相关文章

  • C++杂谈:STL
    五一快乐。终于有时间整理一点东西了,笔者这个五一过得是相当初生。大部分人都玩去了,只有我还在赶ddl的世界达成了qwq。不过我觉得还是做了自己想做的事情的。稍微记录一些前段时间OOP遇到的STL里面乱七八糟的东西。STL的一些底层实现vector这个谁都知道,是一个堆上分配的数组,......
  • c++ 调用函数,编译器查找函数过程
    假设此处调用函数 inta=1;floatb=1.0;func(a,b);//调用函数若func为非模板函数,编译器查找所有的名称为func的函数,然后检查函数入参的数量,再然后检查每个入参是否都可以转换到目标类型。(此处注意,如果参数类型为类对象,若该类支持隐式转换,那么会出现如下情况:classT......
  • c++回调函数
    回调函数本质上也是普通函数,只是调用机制有所区别——首先通过传参的形式将该函数的地址传递给其他函数,然后在其他函数中通过函数指针调用该函数。在其他函数中通过函数指针调用该函数的过程称为回调,而作为被调用的该函数则被称为回调函数。为什么需要回调函数?满足接口兼容性回......
  • 10分钟搞定!C++类中构造函数和析构函数的完全指南
    一、初步认识构造函数1.什么是构造函数?要了解构造函数就要先了解一下,类的6个默认成员函数,如下图:构造函数:构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,以保证每个数据成员都有一个合适的初始值,并且在对象整个生命周期内只调用一次。通俗一点来......
  • 【c++】libtorch和qt和opencv部署
    https://blog.csdn.net/rglkt/article/details/125508634opencv和libtorch的兼容问题,只需要下载(cxx11ABI)即可关于slot报错问题:引入torch文件时使用这种办法#undefslots#include<torch/torch.h>#include<torch/script.h>#defineslotsQ_SLOTS命名空间的问题参......
  • 用C/C++在Linux和Android NDK中获取设备的IP地址
    C/C++开发的获取设备IP地址的代码,下面链接中的版本是在Linuxx86-64环境中编译(Centos7.5)的,也可在其它版本的Linux中或者AndroidNDK('armeabi-v7a','arm64-v8a','x86','x86_64'等版本)中编译。下载地址(此版本须在Linuxx86-64环境中运行):金山文档https://kdocs.cn/l/cd4VM3e......
  • C/C++《程序设计基础II》[2023-04-30]
    C/C++《程序设计基础II》[2023-04-30]2022级计算机专业《程序设计基础II》小组项目作业作业要求:1.分小组完成,2-4人一组(每个题目后面有人数要求,见附件1);2.任课老师按小组分配任务;3.作业时长为1周;4.提交内容为:WORD文档,内容包括:题目内容、算法分析、代码实现(要求加注释)、运行结......
  • C++11完美转发及实现方法详解
    C++11标准为C++引入右值引用语法的同时,还解决了一个C++98/03标准长期存在的短板,即使用简单的方式即可在函数模板中实现参数的完美转发。那么,什么是完美转发?它为什么是C++98/03标准存在的一个短板?C++11标准又是如何为C++弥补这一短板的?别急,本节将就这些问题给读者做一一......
  • c++11:std::forward,完美转发
    目录1、不完美转发2、完美转发2.1、引用折叠2.2、std::forward1、不完美转发所谓完美转发,是指在函数模板中,完全按照模板的参数的类型,将参数传递给函数模板中调用的另一个函数。比如:template<typenameT>voidIamForwording(Tt){IrunCodeActually(t);}上面的例子中,IamF......
  • C++ 基础语法
    C++基础语法基本输入输出#include<iostream>usingnamespacestd;intmain(){cout<<"xtloveac"<<endl;return0;}头文件#include<cstdio>包含printf(输出),scanf(输入)#include<iostream>包含cin(读入),cout(输出)usi......