Smart Text Replacer
一个强大的VSCode插件,支持基于规则的智能文本替换和代码模板展开。
🚀 核心特性
智能匹配系统
- 🎯 多种匹配模式: 支持13种匹配模式,从基础文本到复杂自定义规则
- 📋 匹配策略: 支持局部替换(local)和整体替换(whole)两种策略模式
- 🔄 匹配顺序: 支持从左到右(ltr)和从右到左(rtl)的参数匹配顺序
- 🚫 字符处理策略: 不匹配字符可选择保留(retain)或删除(remove)
- 🔗 链式替换策略: 支持重新匹配(rematch)、覆盖(cover)、填充(fillin)三种链式处理方式
- 📍 匹配前缀: 支持自定义匹配前缀,实现精确的参数定位
- 🔄 自定义处理器: 支持JavaScript处理器和正则表达式处理器的自定义匹配逻辑
- 📏 参数数量控制: 支持最大/最小参数数量限制,确保匹配精度
- 🎨 大小写控制: 可配置匹配时是否忽略大小写,适应不同编程规范
配置系统
- 🔧 三级配置覆盖: 全局 → 语言 → 规则的层级配置系统
- 🌐 多配置管理: 支持本地、远程URL和新建多种配置文件来源,配置文件的版本管理和回滚功能
- ⚡ 配置缓存: 智能配置缓存和预加载机制
处理引擎
- 🔒 JavaScript沙箱: 基于vm2的安全JavaScript处理器,支持复杂逻辑
- 📝 模板系统: 支持$1、$-1、${n:default}等参数引用和$cursor光标定位
- 🎨 多光标支持: 支持多光标位置的同时编辑
- 🔄 参数处理: 支持参数数量限制、匹配顺序控制等高级功能
📦 安装
从VSCode扩展市场安装
- 打开VSCode
- 按
Ctrl+Shift+X 打开扩展面板
- 搜索 "Smart Text Replacer"
- 点击安装并重启VSCode
从VSIX文件安装
code --install-extension smart-text-replacer-1.0.0.vsix
🎯 快速开始
基本使用流程
- 在支持的语言文件中输入触发文本
- 按
Ctrl+Tab 触发智能替换
- 插件自动匹配规则并展开文本
使用效果展示示例
// 基础容器声明(支持不同的入参)
// 输入: int cache.map
// 输入: string int word_count.map
// 按 Ctrl+Tab
// 展开为:
std::unordered_map<int, int> cache;
std::unordered_map<string, int> word_count;
// for循环生成(支持指定光标位置)
// 输入: i 10.for
// 按 Ctrl+Tab
// 展开为:
for (int i = 0; i < 10; ++i) {
// 光标在这里
}
// 链式替换
// 输入: str1 str2.strcmp.if
// 按 Ctrl+Tab
// 展开为:
if (strcmp(str1, str2) == 0) {
// 光标在这里
}
⚙️ 配置系统
类型定义详解
匹配模式 (MatchMode)
| 模式 |
说明 |
示例 |
word |
提取单词(字母数字下划线) |
hello world → ["hello", "world"] |
total |
整个字符串作为一个参数 |
hello world → ["hello world"] |
number |
提取所有数字 |
abc123def456 → ["123", "456"] |
punctuation |
提取标点符号 |
hello, world! → [",", "!"] |
nonSpaceString |
按空格分割 |
a b c → ["a", "b", "c"] |
char |
提取所有字符 |
abc → ["a", "b", "c"] |
numberChar |
提取所有数字字符 |
1 23 → ["1", "2", "3"] |
nonSpaceChar |
提取所有非空白字符 |
a b c → ["a", "b", "c"] |
sentence |
提取句子 |
Hello. World! → ["Hello.", "World!"] |
url |
提取URL链接 |
Visit https://example.com → ["https://example.com"] |
englishChar |
提取英文字符 |
Hello世界 → ["H", "e", "l", "l", "o"] |
chineseChar |
提取中文字符 |
Hello世界 → ["世", "界"] |
email |
提取邮箱地址 |
Contact user@example.com → ["user@example.com"] |
phone |
提取电话号码 |
Call 123-456-7890 → ["123-456-7890"] |
custom |
自定义正则或JS处理器 |
用户定义 |
匹配策略 (MatchStrategy)
| 策略 |
说明 |
应用场景 |
local |
局部替换,每个匹配参数单独处理 |
需要对每个参数分别应用替换规则 |
whole |
整体替换,所有参数作为一组处理 |
需要综合考虑所有参数的替换逻辑 |
匹配顺序 (MatchOrder)
| 顺序 |
说明 |
使用场景 |
ltr |
从左到右匹配参数 |
按参数出现顺序处理 |
rtl |
从右到左匹配参数 |
优先处理后出现的参数 |
不匹配字符处理策略 (MismatchCharStrategy)
| 策略 |
说明 |
效果 |
retain |
保留不匹配的字符 |
保持原文本中不符合匹配模式的部分 |
remove |
删除不匹配的字符 |
移除不符合匹配模式的字符 |
链式替换策略 (ChainReplaceStrategy)
| 策略 |
说明 |
处理方式 |
rematch |
重新匹配 |
使用替换结果重新进行规则匹配 |
cover |
覆盖模式 |
将前一次替换结果作为单一参数 |
fillin |
填充模式 |
在原有参数基础上填充新的替换结果 |
触发模式 (TriggerMode) 待实现
| 模式 |
说明 |
激活方式 |
manual |
手动触发 |
需要按快捷键或执行命令触发 |
auto |
自动触发 |
输入触发符号后自动激活 |
模板语法
$1, $2, ...: 正向参数引用(从左到右)
$-1, $-2, ...: 反向参数引用(从右到左)
${n:default}: 带默认值的参数引用
$cursor: 光标位置标记(支持多个)
高级配置选项
参数控制
rules:
- name: "example"
match_order: "rtl" # 匹配顺序:ltr/rtl
max_match_params: 3 # 最大参数数量
min_match_params: 1 # 最小参数数量
匹配策略
rules:
- name: "example"
match_strategy: "local" # local: 局部替换, whole: 整体替换
match_prefix: "@" # 匹配前缀
mismatch_char_strategy: "retain" # retain: 保留, remove: 删除
链式替换
rules:
- name: "example"
chain_replace_strategy: "rematch" # rematch/cover/fillin
🤝 贡献指南
欢迎提交Issue和Pull Request!
提交Issue
- 使用清晰的标题描述问题
- 提供复现步骤和环境信息
- 附上相关的配置文件和日志
提交PR
- Fork项目并创建功能分支
- 确保所有测试通过
- 添加必要的测试用例
- 更新相关文档
开发规范
- 使用TypeScript严格模式
- 遵循ESLint规则
- 添加适当的JSDoc注释
- 保持代码覆盖率
🙌 敬请期待
- 多语言混合: 支持在同一规则中混合多种编程语言
- 智能提示: 输入时显示可用规则的智能提示,基于用户使用历史,自动调整规则优先级和推荐
- 高亮显示: 突出显示匹配的文本和替换结果
- 拼写纠错: 支持匹配错误时的弹窗纠正拼写问题,根据规则文本相似度
- 触发模式: 支持trigger_mode字段手动触发(manual)和自动触发(auto)两种工作模式
- 配置同步: 跨设备配置同步(云端存储),团队成员间的规则共享和同步
- 统计面板: 显示使用统计、效率提升等数据
- 语义匹配: 使用NLP技术理解代码语义,而不仅仅是字符串匹配
- 文档生成: 自动生成规则文档和使用说明
- 社区规则库: 用户可以分享和下载社区创建的规则,强大的规则和模板搜索功能
- 标签系统: 规则和模板的标签分类系统
- 多IDE支持: 扩展到IntelliJ IDEA、Sublime Text等其他编辑器
🔗 相关链接
享受智能文本替换带来的高效编程体验! 🚀
| |