一款用于快速输入的软件,参考 espanso 等项目。
初衷是因为工作需要输入大量中文模板。
因为非英文用户,如 snippet 数量大,如何思考缩写语,及处理缩写语冲突,带来的心智负担较大。
所以放弃了热字串缩写形式,采用搜索框方式.
序号 | 关键字 | 来源于哪一个文件 | 别名 |
---|---|---|---|
1 | test alias | base | ta |
-
根据 windows 系统选择软件版本,解压后使用
- 32位, snippets_x86.zip
- 64位, snippets_x64.zip
-
建议1920*1080分辨率, 因为界面是按这个分辨率布局的
-
github地址: https://github.com/tyoul29/snippets
-
在
match/base.json
中设置 snippet 片段- 每条 snippet 格式为
"key": {"value": "replace text"},
- 例如:
"test placeholder":{"value":"abc"},
- 如果 snippet 过多,可以设置多个 json 文件
- 每条 snippet 格式为
-
按下
Ctrl+i
, 弹出搜索框, 输入关键词 -
选中:
- DOWN/UP Shift+Down/UP Ctrl+n/p 上、下移动选中
- Shift+Left/Right Alt+k/j 上、下翻页
- 输入框末尾输入 ;+数字 也能选中
-
选中输入:
- Enter 或 Ctrl+j 或 shift+Enter 或 鼠标:
- 用Enter选中可能出现一些问题,即中文输入法下Enter上屏英文时可能自动上屏选中
- Ctrl+Enter 选中右边预览框中文本
- 预览窗内文本可修改,使用tab可在 搜索框 和 预览框 跳转
- Enter 或 Ctrl+j 或 shift+Enter 或 鼠标:
-
在
_match/base.json
中设置 snippet 片段- 每条 snippet 格式为
"key": {"value": "replace text"},
- 例如:
"test placeholder":{"value":"abc"},
- 每条 snippet 格式为
-
可以使用别名(alias)的方式, 增加匹配灵活度
- 如下, 搜索
test alias
或ta
, 都会匹配"test alias":{"value":"something", "alias": "ta"},
- 如下, 搜索
-
设置多个 json 文件, 便于管理
-
文件名如
base.json
,base
会当成 标签(tag) 被搜索, 并出现在 搜索列表 第3列 -
无论是 placeholder 或 snippet 方式,都不支持 win11 下的 记事本,同时 backend 的 inject 也不支持
-
默认为
〓
, 可以设置emoji, 如: 😊⏩■▬▮▶▷〓- 按下
zwf
后 再按TAB
- 按下
-
由于不支持转义, 所以设置的占位符不能在要替换的文本内出现, 这通常要设置为不常用的特殊字符
-
由于是为大部分窗口适用, 选择移动光标的方法, 而由于每个编辑器的 换行自动缩进/不能获取位置 等诸多问题 , 所以存在很多局限
- 换行自动缩进的窗口, 不要在替换文本中使用换行
- 因为无法获取光标位置,所以跳转只能向前,无法跳回
- 用鼠标或按键改变光标位置后,跳转也会出现混乱, 可能造成误删
- 如果改变光标位置, 手动移到上次位置
- 尽管可以使用emoji,但因为部分窗口emoji长度为2, 但backspace数为1
- 因为其他复杂情况,所以任何非〓占位符,其实是被替换为〓计算位置的, 所以即使占位符不是〓, 替换的文本内出现〓也是会被计算的
-
格式为:
"test snippet":{"value":"just ${1:have} ${2}${3:fun}.${0}"},
-
snippet,片段
- 只支持 ${数字} 或 ${数字:文本}, 暂不支持 $数字
- $后面的数字只是一个标识,并不代表顺序,只往前跳
- 最后一个${0}, 尽量不包含text,不然jump_snippet_end最后会选中文本
- 如想行尾加文本,尽量 ${数字:文本}${0}
-
由于是为大部分窗口适用, 选择移动光标的方法, 而由于每个编辑器的 换行自动缩进/不能获取位置 等诸多问题 , 所以存在很多局限
- 因为无法获取光标位置,所以跳转只能向前,无法跳回
- 用鼠标或按键改变光标位置后,跳转也会出现混乱, 可能造成误删
- 如果改变光标位置, 手动移到上次位置
- 部分编辑器内, 选中文本按 右键(right ->) 会多移动一个字符, 这也会造成错误
- 换行自动缩进的窗口, 不要在替换文本中使用换行
- 因为无法获取光标位置,所以跳转只能向前,无法跳回
{
"key_start": {"value": "^i", "tooltip": "显示 snippet 界面"},
"pinyin": {"value": 0, "tooltip": "是否使用拼音首字母用于搜索"},
"max_count": {"value": 500, "tooltip": "搜索结果显示最大数量,太大可能出现搜索太慢, 以上仅在default.json中设置"},
"snippet_method":{"value": "snippet",
"tooltip": "以下 default.json 及 非default.json 都可设置, default.json 必须设置,
设置后为所有非指定窗口使用的默认规则. snippet/placeholder 默认使用当前窗口规则,
只有在没有设置当前窗口时使用all的config"},
"backend":{"value": "clipboard",
"tooltip":"clipboard/inject,部分窗口禁止粘贴用inject,同时clipboard使用剪贴板
,如果你使用多重剪贴板的话会被污染"},
"must_caret": {"value": 0,
"tooltip": "0/1, 是否必须有光标才启动,注意WPS是无法发现光标的,所以WPS必须设为0"},
"insert_caret": {"value": 0,
"tooltip": "0/1,部分元素默认选中时无法发现光标,
且回到原窗口不自动聚集编辑区,需发送一个字符后删除"},
"activate_caret": {"value": 0,
"tooltip": "0/1,部分界面重激活后不会激活光标,确定是否鼠标点击"},
"IME":{"value": 2,
"tooltip": "0/1/2,0不切换,1切换输入法中英文(但微软输入法不支持),2切换大小写"},
"placeholder": {"value": "〓",
"tooltip": "😊⏩■▬▮▶▷〓,尽管可以使用emoji,但因为部分窗口emoji长度为2, 但backspace数为1。
因为其他复杂情况,所以任何非〓占位符,其实是被替换为〓计算位置的,
所以即使占位符不是〓, 替换的文本内出现〓也是会被计算的,相当于两个占位符。
因为中文字符的特殊性,无法监控输入字符数,所以跳转只能向前,无法跳回,
且用鼠标或按键改变光标位置后,跳转也会出现混乱,
如果改变光标位置,手动移到上次位置。没有提供占位符转义。"},
"transparent": {"value": "180", "tooltip": "透明度"},
"listview_font_size": {"value": 13},
"listview_font_type": {"value": "黑体"},
"listview_background_color": {"value": "FFDD99", "tooltip": "ListView背景色"},
"listview_foreground_color": {"value": "FF0000", "tooltip": "ListView字体色"},
"listview_select_background_color": {"value": "FF3300"},
"listview_select_foreground_color": {"value": "FFFFFF"},
"preview_edit_font_size": {"value": 12},
"preview_edit_font_type": {"value": "黑体"},
"preview_edit_background_color": {"value": "FFDD99", "tooltip": "preview_edit背景色"},
"preview_edit_foreground_color": {"value": "FF0000", "tooltip": "preview_edit字体色"},
}
{
"includes":{"value": ["_notepad1", "_notepad2"],
"tooltip": "_match/_*.json 的文件名, 文件名开始必须为下划线 `_`, 其内的 snippet 只在指定窗口中使用"},
"filter_title":{"value": "", "tooltip": "匹配窗口的名称, 在激活窗口按下快捷键 `CapLock+1`, 会显示窗口信息"},
"filter_class":{"value": "Notepad", "tooltip": "匹配窗口所属的类"},
"filter_exe":{"value": "", "tooltip": "匹配窗口的程序名"},
"exclude_title":{"value": "", "tooltip": "排除名称出现 exclude_title 的窗口"},
"exclude_class":{"value": "", "tooltip": "排除类名称含 exclude_class 的窗口"},
"exclude_exe":{"value": "", "tooltip": "排除程序名含 exclude_exe 的窗口, 以上仅在非default.json中设置"},
"snippet_method":{"value": "placeholder",
"tooltip": "以下 default.json 及 非default.json 都可设置, 如果 非default.json 设置, 为指定窗口的规则"},
"backend":{"value": "clipboard"},
"must_caret": {"value": 0},
"insert_caret": {"value": 0},
"activate_caret": {"value": 0},
"IME":{"value": 1},
"placeholder": {"value": "〓"},
"transparent": {"value": "200"},
"listview_font_size": {"value": 13},
"listview_font_type": {"value": "黑体"},
"listview_background_color": {"value": "FFDD99"},
"listview_foreground_color": {"value": "FF0000"},
"listview_select_background_color": {"value": "FF3300"},
"listview_select_foreground_color": {"value": "FFFFFF"},
"preview_edit_font_size": {"value": 12},
"preview_edit_font_type": {"value": "黑体"},
"preview_edit_background_color": {"value": "FFDD99"},
"preview_edit_foreground_color": {"value": "000000"}
}
-
Ctrl+i 启动,输入后自动匹配结果,自动选中第一个,按键说明:
-
选中:
- 如果聚焦搜索框 Down/UP 上、下选中
- Shift+Down/UP Ctrl+n/p 上、下移动选中
- Shift+Left/Right Alt+k/j 上、下翻页
- 输入框末尾输入
;数字
也能选中
-
输入:
- Ctrl+j 或 鼠标:
- 用Enter选中可能出现一些问题,即中文输入法下Enter上屏英文时可能自动上屏选中
- 解决方法是,中文状态下不用Enter上屏英文,用Shift上屏,或手动切换
- Ctrl+Enter 选中右边预览框中文本
- 预览窗内文本可修改,使用tab可在 搜索框 和 预览框 跳转
- Ctrl+j 或 鼠标:
-
离开界面:
- 点击其他窗口
- Ctrl+[
- Esc
-
输入文本后,跳转,用于snippet 或者 placeholder
- Ctrl+; 跳转到下一光标占位
- Ctrl+' 跳转到结尾
-
在打开界面后
- f1 打开 match
- f2 打开 config
- f3 打开 README.md
-
搜索框内操作:
- Ctrl+a/e 移动到行首/行尾
- ctrl+b/f 左右移动
- ctrl+d/h 左右删除一个字节
- Alt+b/f 左右移动一个单词位置
- Ctrl+w/Alt+d 左右删除一个单词
- Ctrl+u 清空搜索栏
-
-
搜索 match 和 config 下json文件的文本, 便于了解配置
- Ctrl+Shift+q 搜索 match
- Alt+Shift+q 搜索 config
- 以行为单位, 支持正则
- 搜索结果以一个编辑框显示, 编辑框不支持高亮关键字, 也不支持再次搜索
-
文本配置的好处,更便于配置、迁移、同步
-
除双引号内的内容,其他都为英文符号
-
双引号内不能出现英文双引号
-
同一窗口类型, 关键字不能重复
-
如配置错误,可在网站校验配置文件 snippets.json
- 如: bejson
-
空格分割搜索框文本, 不需要输完全部,如:
- 输入
ab ef
,即可匹配abcdef
- 输入
-
为快捷输入,进入界面后自动打开大写,可手动切换输入中文,可在配置中关闭
-
窗口名支持正则
- 也就是说可以 窗口名1|窗口名2|窗口名3
- 几个窗口合用一个配置
-
替换的文本内,\r 或 \n 相当于换行
-
可使用一些特殊字符或字母组合作为标志, 以达到类似于 tag 效果,用以分类,方便筛选
-
关键字不建议太长,因为多音字缘故,可能让长度数量级增长,如太长建议用空格分隔
-
支持非界面选择的 占位符及snippet,操作
- 结合热键或热字串
- hotstring_snippet(str)
- hotstring_place_replace(str)
-
热字串占用一定心智负担,增加界面及预览一定程度增加可视性、直观性
- 尤其是面对几百上千条以后
-
热字串只能使用英文,其他语种使用时需考虑使用什么样的缩写
-
快速筛选可能少按几个键
-
有些内容相似的时候,是不是觉得 触发关键字 如何选比较困难
-
可支持跳转,但不能往后跳转
-
对五笔用户友好,五笔四码自动上屏,常造成热字串替换时将前面的字符删除
- 启动界面,和选中操作,可能需要增加额外按键
-
两者同用并不矛盾,可以不同场景的
- 热字串适合短的,容易记忆的,更高频的
- snippets适合长的,可以快速查看筛选预览,减少键入失误带来热字串失效问题
-
hotstring是确定的、直接的、难记忆的、尽量不要输错的、不支持中文等其他语种的
-
snippets是不确定的、可筛选的、可预览的、可临时修改的、可多种字符作为关键字的
-
增加日志功能
-
增加 package 以提供额外功能
- 文本键归一化
- 热字串 hotstring
- 执行代码?
-
增加 suggest 功能?
-
暂时不准备用 webview 作为 GUI
-
暂时不准备支持 高亮关键字, 因为和预处理关键字相冲突
-
暂时不准备每个窗口指定不同启动键
-
暂时不准备指定哪些窗口禁用 snippet
-
不准备支持 图片/执行代码/富文本/html等, 只专注于文本
-
用 UIA 支持 snippet method