我想在保存文件(CTRL-S)时对源代码运行 linter。保存文件时是否可以对文件运行外部命令?
答案1
据我所知,严格来说,没有直接选项可以在保存后直接运行程序。也就是说,按以下步骤按Ctrl+键可能会得到(功能上)类似的行为...S
使用 Ctrl + S 保存并执行
安装 NppExec
通常情况下,常规 Notepad++ 宏与来自跑步菜单可能是实现所需行为的最简单途径。但是,跑步菜单目前似乎默认不允许作为宏操作。
为了绕过这个问题,我们需要一个名为 的插件NppExec
。这个插件允许我们编写适度改进的宏(命令脚本)来运行 Notepad++ 中的程序。特别是,它允许我们将保存文档和运行程序结合起来(如上所述,这通常是不可能的)。
要安装 NppExec:
打开插件管理器(插件→插件管理器→显示插件管理器)。
NppExec
在插件列表中找到并标记它。点击
Install
。
安装后,您需要根据提示重新启动 Notepad++。
创建命令脚本
Notepad++ 重新启动后,打开插件→执行→执行...窗口(F6)。在文本字段中,将要执行的命令(按顺序)放在单独的行上:
NPP_SAVE
# ... Another command here ...
# ... Another command here ...
顺便说一下,我不太清楚你想对该文件做什么(关于你的 linting 过程),所以很抱歉上面的例子不够完整。
请注意,每个都# ... Another command here ...
只是此示例的占位符。重要的是,#
符号实际上并不代表 NppExec 中的注释……这只是我的简写。=)
可用命令
假设我们知道我们希望首先保存,我们可以用来NPP_SAVE
启动命令脚本。NPP_SAVE
是一个NppExec
特定的命令,它告诉 Notepad++ 保存当前文档。
一般来说,对于剩余的命令,您可能会直接调用这些命令(假设它们是NppExec
在命令行上注册的命令或项目,其输出并不重要)或使用 eg NPP_RUN cmd /k somecommand.exe
(或其他变体NPP_RUN cmd
)来生成一个新cmd
窗口(这通常是更好的选择)。
任何可以从命令行运行的东西(包括批处理文件和脚本)都可能是您的命令的可行选项。 Notepad++ 环境变量也可用。您可能使用的最常见变量是$(FULL_CURRENT_PATH)
(最好用双引号引用,即"$(FULL_CURRENT_PATH)"
),它提供当前文档的已保存版本的完整 Windows 路径。
值得一提的是,与Run
正常情况类似跑步...对话框OK
中执行...window 将立即执行您的命令。这样您可以在保存命令之前测试它们的功能。同样,该Command(s)
字段在运行之间是持久的。
对命令脚本满意后,您将需要选择Save...
,为脚本指定一个合适的名称,然后Save
再次选择以保存以供日后使用。关闭执行...完成后窗口。
将命令脚本添加到菜单
我们现在可以将NppExec
命令脚本添加到 Notepad++ 菜单中,以便为其分配快捷方式:
去插件→执行→高级选项...。
Associated script:
在左下角的下拉菜单中选择命令脚本。单击
Add/Modify
即可将其添加到Menu items
上方的字段。或者,勾选旁边的复选框,
Place to the Macros submenu
将命令脚本添加到主宏菜单。否则,它将作为选项出现在插件→执行。单击
OK
完成。
按照提示重新启动 Notepad++,并验证命令脚本现在是否作为菜单项出现在宏菜单或插件→执行。
向命令脚本添加热键
最后,重新分配Ctrl+ S:
打开设置→快捷方式映射器...。
在主菜单选项卡,突出显示“保存”条目。单击
Clear
窗口底部的 可清除该项目的热键设置 ( Ctrl+ S)。选择插件命令选项卡。向下滚动并突出显示命令脚本的条目
NppExec
(按名称标识)。它很可能是条目块中的最后一项NppExec.dll
。单击
Modify
并设置适当的热键选项(标记Ctrl
并S
从下拉菜单中选择)。单击
OK
保存新的快捷方式设置Close
和快捷方式映射器...。
Ctrl您的命令脚本现在应该由+触发S(无需重新启动)。
您应该注意,无论您指定哪种热键组合,的正常版本Save
仍将与文件 → 保存菜单项和工具栏图标(单个蓝色软盘)相关联。
答案2
我的记事本++棉绒每个Ctrl+保存两个额外的文件S。
它使得最小化文件(假设源文件是 CSS、JS 或 HTML 文件)以及该最小化文件中预压缩的 Brotli 文件——全部一次性完成。
这本实用指南让我开始了……
- 创建批处理文件
制造脚本
if not exist %1 (
echo file does not exist %1
goto :eof
)
set run_lint=0
set ext=%~x1
set nam=%~n1
set fullpath=%~dp1
set full_min=%fullpath%%nam%.min%ext%
set full_br=%fullpath%%nam%%ext%.br
if "%ext%"==".js" (
set run_lint=1
)
if "%ext%"==".css" (
set run_lint=1
)
if "%ext%"==".html" (
set run_lint=1
)
if %run_lint%==1 (
if "%ext%"==".js" (
npx google-closure-compiler --js="%fullpath%%nam%%ext%" --js_output_file="%full_min%"
) else (
npm exec --no -- html-minifier "%fullpath%%nam%%ext%" -o "%full_min%" -c "C:\Windows\System32\node_modules\html-minifier\html-cli-config-file.conf"
)
IF EXIST "%full_br%" DEL /F "%full_br%"
"C:\Program Files\PeaZip\res\bin\brotli\brotli.exe" --quality=11 --large_window=27 "%full_min%" -o "%full_br%"
) else (
echo This is not a file to minify: %1
)
- 将该 mfy.bat 文件保存在位于以下位置的 Notepad++ 用户文件夹中:%APPDATA%\Notepad++
- 下载并安装Node.js。
- 打开CMD窗口并运行:npm 安装 html-minifier -g
在发现github.com/kangax/html-minifier并
html-cli-config-file.conf
根据您的喜好进行配置。 - 安装npm install --save google-closure-compiler最小化您的 JS 文件。我不得不使用这个,因为它支持逻辑
<
并>
在我的 JS 文件中。它还有利于检查您的 JS 代码是否存在错误。 - 在 Notepad++ 中添加插件 NppExec(插件 -> 插件管理 -> NppExec)
- 转到(插件 -> NppExec -> 执行 NppExec 脚本...)并添加
NPP_SAVE
到第一行,然后$(SYS.APPDATA)\Notepad++\mfy.bat "$(FULL_CURRENT_PATH)"
单击节省 ...将脚本保存为“Minify”。
- 进入(插件 -> NppExec -> 高级选项)添加“最小化”菜单项。选择关联脚本下的最小化,按添加/修改按钮。选择“放入宏菜单”。
- 重新启动 Notepad++
- 安装豌豆压缩作为应用程序(或者使用
npm install brotli
,C:\Program Files\PeaZip\res\bin\brotli\brotli.exe
如果您没有安装 PeaZip 应用程序,请在 mfy.bat 文件中进行相应调整。) - 最后,为了让它在按Ctrl+时正常工作,S我按照@Anaksunaman指示。
我希望这可以帮助别人。