对日开发 秀丸文本编辑器 添加文本变换模块
参考资料
- 変換モジュール(JavaScript版)作成方法(.hmfjs)
- Stdioオブジェクト
目录
- 一. 秀丸的文本变换功能
- 二. 编写`自定义变换模块`
- 三. 添加之后的效果
一. 秀丸的文本变换功能
⏹如下图所示,秀丸编辑器默认提供了很多文本变换的功能。
⏹可是有些文本的变换需求,官方提供的功能无法满足。
好在秀丸编辑器提供了添加自定义变换模块的功能。
⏹秀丸编辑器支持的自定义变换模块
,共有2种类型
.hmf
或.hmf64
- 使用C语言编写
.hmf
支持32位操作系统,.hmf64
支持64位操作系统- 自秀丸
V5.00
之后就开始支持
.hmfjs
- 使用javascript语言编写
- 自秀丸
V9.25
之后开始支持 - 目前的
Ver9.48
版本仅支持ES5的语法,不支持ES6的语法
⏹自定义变换模块
中需要有2个函数,如果使用javascript语言编写的话,后缀为.hmfjs
- enumHidemaruFilter函数
- hidemaruFilterGetVersion函数
二. 编写自定义变换模块
enumHidemaruFilter
:指定变换模块的信息hidemaruFilterGetVersion
:指定变换模块的版本.stdOut.readAll(5000);
:读取外部程序返回的所有文本数据,.readAll()
中的参数是超时时间, 单位为毫秒stdio
:不显示窗口,有stdIn/stdOut
,js实例终了之后,外部程序进程也会随之终了
⏹test.hmfjs
:此处演示调用外部的Powershell的脚本代码进行文本处理后,将结果返回
function enumHidemaruFilter(){return [{exportName: "createGrepCmd",nameJapan: "Grepコマンド作成",nameUs: "createGrepCmd",accel: "M",mustLineUnit: true,flags: 0},];
}function hidemaruFilterGetVersion() { return 0.1;
}// 生成grep命令, 【hidemaruSelectedText】为秀丸编辑器选中的文本
function createGrepCmd(hidemaruSelectedText) {var shellConfig = getShellInfo();var processInfo = hidemaru.runProcess("powershell.exe" + shellConfig.param + shellConfig.path, "", "stdio", "utf8");// 获取标输入对象并传入参数var stdIn = processInfo.stdIn;stdIn.write(hidemaruSelectedText);stdIn.close();// 获取外部程序返回的结果return processInfo.stdOut.readAll(5000);
}function getShellInfo() {return {// 指定指定策略和执行时隐藏窗口param: " -NoProfile -ExecutionPolicy RemoteSigned -WindowStyle Hidden -File ",// 指定脚本的路径path: "E:\\My_Project\\PowerShellStudy\\09-技巧\\18-秀丸.ps1"};
}
⏹18-秀丸.ps1
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
- 指定输入数据的文字编码为
utf-8
- 不指定的话,输入的汉字会乱码
- 指定输入数据的文字编码为
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
- 指定输出数据的文字编码为
utf-8
- 不指定的话,输出的汉字会乱码
- 指定输出数据的文字编码为
# 设置输入和输出的编码
[Console]::InputEncoding = [System.Text.Encoding]::UTF8
[Console]::OutputEncoding = [System.Text.Encoding]::UTF8# 读取秀丸编辑器传入的数据
[string]$transferData = [Console]::In.ReadToEnd()# 创建字符串拼接对象
$sb = New-Object System.Text.StringBuilder$transferData -split "`r`n" | ForEach-Object {# 跳过空字符串if ([string]::IsNullOrWhiteSpace($_)) {return;}# 处理外部插入的数据$sb.Append("grep -a ^$($_) /路径1/パス2`r`n") | Out-Null
}return $sb.ToString()