参考资料
- 【サクラエディタ】特定のキーワードを含む行を強調する方法
- サクラエディタでお手軽プログラミング!強調キーワードで色分けを設定しよう
- サクラエディタのマクロ(JavaScript)で繰り返し業務を少し改善
- 【サクラエディタ】行に印をつけるブックマーク機能の使い方
- なでしこ3用サクラエディタのシンタックスハイライト及び各種定義ファイル
- さくらエディタでなでしこさんを使いたい! その2、シンタックスハイライト
- エクスプローラの右クリックメニューに、『SAKURAでGrep』を追加する
- インストーラで「SAKURA EditorでGrep」メニューの追加 にショートカットがない
- タイプ別設定 『スクリーン』プロパティ
- サクラエディタの便利機能紹介
一. 简介
⏹开源,免费的日本人开发的文本编辑器
- 官网:https://sakura-editor.github.io/
- GitHub:https://github.com/sakura-editor/sakura
⏹特色
- 支持指定文本高亮,方便查看日志
- 支持宏,能满足基本的使用
- 支持
javascript
宏 - 功能有限,远不如秀丸编辑器的宏强大
- 支持
- 支持矩形选中内容,但是不支持同时选中检索到的多行
二. 外观
2.1 语言设置
⏹仅支持英语和日语
2.2 横向滚动条
⏹设置显示水平滚动条,并且设置按下【Shift】+ 滚动鼠标滚轮时,横向水平滚动条滚动。
2.3 迷你地图
⏹显示迷你地图
2.4 Tab标签模式显示多个文档
⏹在【設定】菜单栏中可指定使用Tab标签
⏹还可以在【共通設定】→【タブバー】中进行如下设定
- 每个Tab标签都显示图标
- 每个Tab标签都显示关闭按钮
- 开启鼠标侧面滚轮按钮切换Tab标签
2.5 自定义菜单与工具栏
⏹自定义菜单
⏹自定义工具栏
三. 文字显示
3.1 空格显示
⏹将TAB空格的样式修改为长箭头
⏹TAB空格和全校空格的颜色显示设置与显示效果
3.2 控制文字显示
⏹在此处进行可进行控制文字的颜色显示设置,并且将光标置于控制文字的左侧,右下角会显示文字的编码字符。
3.3 自定义强调文字
3.3.1 添加自定义强调文字集合
⏹点击【セット追加】,追加自定义的强调文字【セット】
⏹可根据需求追加多组自定义的强调文字【セット】
- 可以给设定的多组强调文字【セット】设定不同的【強調キーワード】
- 不同的【強調キーワード】颜色可以自定义修改,保证不同的强调词汇显示不同的颜色,便于区分
3.3.2 使用正则表达式
⏹在【タイプ別設定】→【正規表現キーワード】选项卡中添加正则表达式
- 可选择该正则表达式对应的文字颜色
- 当添加完成之后,一定要按下【追加】按钮之后才会反映到【正規表現キーワード】一览之中
- 还可以在【カラー】选项卡中进行对应的【強調キーワード】颜色设定
3.4 csv文件显示
⏹追加指定csv文件的显示方式
⏹显示效果如下
四. 检索
4.1 Grep检索
⏹如下图所示,在菜单栏和工具栏上都有Grep的检索入口,通过Grep功能可以从文件夹中的所有文本文件中检索内容。
4.2 右键菜单添加Grep功能
⏹在安装新版本的SAKURA编辑器的时候,会提示是否将Grep功能添加到右键菜单栏上
⏹如果使用的是旧版本的SAKURA或者在安装的时候,忘记勾选将Grep添加到菜单栏上的情况下,可以通过修改注册表的方式进行手动添加。
-
打开注册表,然后找到下面的路径
HKEY_CLASSES_ROOT\Folder\shell
-
然后如下图所示新建SAKURA的Grep的项目,然后添加图标路径和grep命令
-
Grep命令的相关参数:
"C:\soft\sakura\sakura.exe" -GREPDLG -GREPMODE -GFOLDER="%1" -GFILE="*.*" -GOPT="S"
⏹然后就可以在通过右键菜单看到我们自定义的SAKURA的Grep了
五. 编辑
5.1 删除重复行
⏹选中范围内的重复行会被删除
- 需要先通过【選択行の昇順/降順ソート】进行排序
- 重复行的内容排列在一起时,才能删除重复行
5.2 插入控制字符
六. 显示文本大纲
⏹例如我们有如下文本
■grep -a 11111111111
2323 SRART aaa
2323 SEQIN mmm isuuePayId=5768awe uuid=woenoo; jmw_state=success method=paypay info=ppp
2323 SEQOUT COST=45726
▼grep -a 22222222222
2325 SRART bbb
2345 SEQIN mmm isuuePayId=34895ry uuid=;ljkler jmw_state=faile method=alipay info=ddd
2345 SEQOUT COST=34855
■grep -a 33333333333
2326 SRART ccc
2346 SEQIN mmm isuuePayId=34esrta uuid=iyuhl jmw_state=success method=alipay info=ccc
2346 SEQOUT COST=56743
▼grep -a 44444444444
2327 SRART ddd
2347 SEQIN mmm isuuePayId=68jikhe uuid=jkhud jmw_state=faile method=paypay info=oiio
2347 SEQOUT COST=895335
6.1 基本使用
⏹在【共通設定】的【書式】选项卡中,Sakura编辑器为我们默认提供了一些会被识别为标题的记号,
我们在普通文本中使用这些记号进行记录时,配合【アウトライン解析】功能,记号对应的内容会被识别为大纲
⏹在【タイプ別】设定的【スクリーン】选项卡中,可以通过【アウトプット解析方法】来指定对文本的解析方式
- 如果是代码文本的话,可以选择对应的编程语言
- 如果是服务器日志或者普通的文本,则使用普通的【テキスト】
⏹然后在工具栏上点击【アウトライン解析】按钮,就可以将文本的大纲显示出来
- 注意:
■
和▼
必须放在行的开头位置 - 并不是所有的内容都会被解析,只有【共通設定】的【書式】选项卡中包含的记号才会被识别为大纲
6.2 自定义普通大纲
⏹我们还可以通过自定义解析文件来制作大纲
- 左侧是大纲的标题
///
用来分隔,两侧一定要有一个空格- 右侧是对大纲的说明,起到注释作用
2323 SRART /// 测试1
▼grep /// 测试2
⏹如下图所示,我们通过自定义的规则解析文件成功的对文本进行了解析,并生成了大纲。
6.3 正则表达式模式的大纲
⏹Sakura编辑器在2.1.0.0
之后的版本新增了正規表現モード
- 需要在解析文件的开头指定:
;Mode=Regex
;RegexOption=i
:正则表达式忽略大小写;Title=标题名称
:给当前的大纲指定标题,便于区分
;Mode=Regex
;Title=加盟店タイトル
// 正则表达式 /// 组名,组等级
^.*SRART /// グループ,Lv=1
^.*SEQIN /// グループ,Lv=2
^.*SEQOUT\sCOST.* /// グループ,Lv=2
⏹效果如下
6.4 正则表达式替换模式的大纲
⏹Sakura编辑器在2.2.0.0
之后的版本新增了正規表現置換モード
- 将正则表达式匹配到的内容,替换为其他自定义内容,更加方便查看
- 需要在解析文件的开头指定:
;Mode=RegexReplace
;Mode=RegexReplace
;Title=加盟店タイトル1
^.*SRART /// リクエストグループ /// グループ,Lv1
^.*SEQIN /// 終了。。。 /// グループ,Lv2
^.*SEQOUT\sCOST=(.*) /// 消耗時間は【$1】 /// グループ,Lv3
⏹效果如下
九. 宏功能
⏹此处写一个简单的demo脚本
- Sakura编辑器中还有其他类型的宏,此处仅举一个js宏的例子
- 相关的宏函数的用例可以在官网找到
Editor
是Sakura宏的全局对象,可省略。
// 创建一个菜单
var menuNum = Editor.CreateMenu( 0, "[C]チェック項目(&A),[S]サブメニュー(&B),サブメニュー1, [E]サブメニュー2,-,[D]非活性" )
// 消息弹出框
MessageBox("用户选择的项目: " + menuNum, 0x0);
// 文本输入框
var iptContent = Editor.InputBox("Hello world", "你好 世界", 10);
// js的原生函数
var dt = new Date();
var year = dt.getFullYear();
var month = ("00" + (dt.getMonth()+1)).slice(-2);
var day = ("00" + (dt.getDate())).slice(-2);
var week = dt.getDay();
var weekString = ["日","月","火","水","木","金","土"][week];
var today = year + "年" + month + "月" + day + "日" + "(" + weekString + ")";
// 将内容插入到当前的文本中
Editor.InsText("お疲れ様です。XXXです。\n");
Editor.InsText("本日の作業報告を致します。\n");
Editor.InsText("\n");
Editor.InsText(today + "\n");
Editor.InsText("作業A:" + iptContent + "\n");
9.1 指定宏脚本执行
9.2 登录宏脚本
⏹如下图所示,可以将宏脚本登录到【マクロ一覧】中
- 一定要按下【設定】按钮之后,才能登录到一览中
- 登录完成之后,可以在【登録済みマクロ】中,快速执行脚本
9.3 宏脚本执行效果展示
十. 宏案例
⏹js宏内部需要调用的powershell脚本
06-获取本机已保存的所有wifi密码.ps1
# 获取出所有的wifi名称
$wifi_name_list = netsh wlan show profiles | Select-String "所有用户配置文件" | ForEach-Object {
# 过滤出所有wifi名称(将wifi名之外的部分替换为空字符串)
$_ -replace ".*:\s+", ""
}
# 获取wifi名称的总数量
$wifi_list_count = ($wifi_name_list | Measure-Object).Count
# 存放wifi信息的数组
$wifi_object_array = @()
# 根基wifi名称获取wifi信息
for ($i = 0; $i -le $wifi_list_count; $i++) {
# 创建一个Powershell自定义对象,并添加到数组中
$wifi_object_array += [PSCustomObject]@{
wifi名称 = $wifi_name_list[$i]
# 根据wifi名称获取wifi密码
wifi密码 = netsh wlan show profile name="$($wifi_name_list[$i])" key=clear | Select-String "关键内容" | ForEach-Object { $_ -replace ".*:\s+", "" }
}
}
# 将wifi名称保存到桌面上
$desktop_path = [System.Environment]::GetFolderPath("Desktop")
Set-Content -Path "$($desktop_path)\测试文件4.txt" -Encoding UTF8 -Value $($wifi_object_array.wifi名称) -Force
exit 1
⏹读取文件,插入数据,并调用外部脚本的js宏
new ActiveXObject("ADODB.Stream")
:用来创建读取utf-8的文件对象new ActiveXObject("WScript.Shell")
:创建shell对象Editor.FileOpenDialog
:打开文件选择框.Run()
:运行外部程序
// 使用 ADODB.Stream 来读取utf-8文件
var aDODBStream = new ActiveXObject("ADODB.Stream");
/*
Type
1: 二进制文件
2: 文本文件
*/
aDODBStream.Type = 2;
// 指定文件的字符集
aDODBStream.charset = "utf-8";
// 打开 ADODB.Stream 对象
aDODBStream.Open();
// 文件夹路径
var folderPath = "C:\\Users\\Admin\\Desktop";
/*
打开文件选择窗口,从执行的文件夹中选取执行类型的文件。
返回值: 被选中的文件的全路径
*/
var filePath = Editor.FileOpenDialog(folderPath, "*.txt");
// 将文件加载到 ADODB.Stream 对象中
aDODBStream.LoadFromFile(filePath);
/*
ReadText参数
-1: 读取整个文件
-2: 按行读取
*/
var fileContent = aDODBStream.ReadText(-1);
aDODBStream.Close();
// 将读取到的内容插入到当前的文本中
Editor.InsText(fileContent);
// 外部Powershell脚本的路径
var psShellPath = "\"C:\\Users\\Admin\\Desktop\\新建文件夹\\06-获取本机已保存的所有wifi密码.ps1\"";
var psShellParam = " param1 param2";
// 创建shell对象
var shell = new ActiveXObject("WScript.Shell");
/*
执行外部脚本
参数1
外部脚本路径
参数2
0: 隐藏窗口,执行powershell的时候,不显示运行窗口
1: 正常窗口(默认大小)
2: 最小化窗口
3: 最大化窗口
7: 最小化窗口但激活
10: 默认显示方式
参数3
true:同步执行,即等待脚本完成才继续执行下一行代码
false:异步执行, 即使脚本没有执行完毕也继续向下执行代码
.Run()
只能获取执行状态码,无法获取返回值
但可以在外部脚本将返回值放到外部文件中,然后在js宏中进行读取
.Exec()
Exec() 适合用来获取脚本的输出内容(标准输出、标准错误),但不能控制窗口样式(它会默认在后台运行)
返回的是一个 WshScriptExec 对象
.StdOut:脚本的标准输出流
.StdErr:错误输出流
.ExitCode:退出码(等脚本结束后才有效)
.Status:执行状态(0=正在运行,1=已结束)
*/
var returnCode = shell.Run("powershell.exe " + psShellPath + psShellParam, 0, true);
/*
returnCode
在powershell脚本中进行设置
exit 1
程序执行成功
exit 0
程序执行失败
*/
if (returnCode === 1) {
// 弹窗提示
shell.Popup("任务执行成功", 0, "标题1", 0);
} else {
// 弹窗提示
shell.Popup("任务执行失败", 0, "标题2", 0);
}