使用 NppExec 和 Ruby 为 Notepad++ 编写新的宏功能脚本

Ass*_*him 8 script notepad++ automation ruby nppexec

我在美国和欧洲工作,在查看日志或笔记时,在月/日 (US) 和日/月 (EU) 格式之间切换会导致歧义(例如 7/8/12 7 月 8 日还是 8 月 7 日?)。

我想更改 Notepad++ 时间戳功能以使用国际格式

YYYY-MM-DD--DAY--HH:MM

2012-08-19--Sun--20:30

请注意,将一周中的哪一天拼出来会是一个很好的额外功能,并且可以避免在日历中查找它是哪一天。

目前 NPP 不具备这种灵活性。 有没有办法使用某种宏或脚本(也许使用 Ruby)来做到这一点?

Ass*_*him 6

分享如何使用 NppExec 插件和 Ruby 做到这一点。

解决方案:

方法:获取外部脚本语言(在本例中为 Ruby)以返回格式化的时间戳,并让 NppExec 接收它并将其插入到 Notepad++ 中显示的当前文件中的光标位置。

首先配置控制台:

    npe_console v+   // set console to receive output in $(OUTPUT) variable
    npe_console d+   // set current working directory to same as current file
Run Code Online (Sandbox Code Playgroud)

然后在 NppExec > 执行菜单命令中,输入以下代码片段:

    // Diary snippet (Generates timestamp YYYY-MM-DD--DAY--HH:MM for NPP++)
    npp_console disable     // turn off output displaying to console
    // this ruby one-liner does the work
    ruby -r Date -e "dt=DateTime.now; dname = Date::ABBR_DAYNAMES[dt.wday]; puts dt.strftime(\"%Y-%m-%d--#{dname}--%H:%M\");"  
    sel_settext $(OUTPUT)   // put result at cursor in current file
    npp_console enable      // restore output displaying to console
    npp_console 0           // hide the console window
Run Code Online (Sandbox Code Playgroud)

这使用 Ruby 引擎生成时间戳并将其插入到 Notepad++ 中当前文件中光标所在的位置。结果(大约有 500 毫秒的延迟)是时间戳:

    2012-08-20--Mon--20:16
Run Code Online (Sandbox Code Playgroud)

注意:虽然这确实可以完成工作,但如果有人有一个不依赖任何外部(在这种情况下是 Ruby)的解决方案,那会更好。


编辑:“生产”解决方案......(鲁棒性和便利性)

通过以下步骤,可以生产上述解决方案...

一个障碍是关闭 Notepad++ 会丢失控制台配置,因此必须在每次重新启动时进行设置。

因此,我们将控制台配置设置为每次 Notepad++ 启动时自动运行的脚本。

然后为方便起见将键盘快捷键(热键)关联到日记脚本。

第 1 步: 在 NppExec Excute... 对话框中输入日记代码:Plugins > NppExec > Execute...,为其命名(稍后您将使用该名称)

第 1 步 - 输入日记代码

第二步: 同样输入setup_console配置代码:

步骤 2 - 输入控制台配置代码

步骤3、4、5: 在中Plugins > NppExec > Advanced Options,设置setup_console在启动时运行(3),为日记代码创建一个Menu项(4),并将Menu项放入Macro菜单(5)中:

步骤 3,4,5 - 全部设置

第 6 步:将键盘热键(快捷方式)设置为日记脚本:Settings > Shortcut Mapper... > Plugins,然后向下滚动,直到找到您使用的日记脚本名称...

步骤 6 - 键盘快捷键

结果:查看Macros菜单命令下,您将看到带有键盘快捷键的新时间戳命令。

结果 - 完成

完毕!