52 lines
1.8 KiB
Markdown
52 lines
1.8 KiB
Markdown
# 329 FindWidget · 查找替换
|
|
|
|
## 用途
|
|
|
|
在文本中查找与替换:区分大小写、整词、正则表达式,显示匹配数并上下跳转。
|
|
|
|
## 最小示例
|
|
|
|
```go
|
|
text := "the seal and the seal"
|
|
state := mujica.FindState{Query: "seal", Replacement: "signet", ShowReplace: true}
|
|
view := func(c *ui.Context) {
|
|
mujica.Use(c, mujica.Settings{})
|
|
if mujica.FindWidget(c, &text, &state, mujica.FindWidgetOptions{}).Replaced > 0 {
|
|
fmt.Println(text)
|
|
}
|
|
}
|
|
ui.Render(view, 400, 300, 1)
|
|
```
|
|
|
|
## 参数
|
|
|
|
`func FindWidget(c *ui.Context, text *string, s *FindState, opts FindWidgetOptions) FindWidgetResult`。匹配在文本、查询或选项变化时重算;`s.Matches()` 返回各匹配的字节范围。替换直接修改 `*text`。
|
|
|
|
| 字段 | 类型 | 默认值 | 含义 |
|
|
| --- | --- | --- | --- |
|
|
| `FindState.Query`, `Replacement` | `string` | "" | 查找与替换文字;正则模式下替换支持 `$1` 分组。 |
|
|
| `MatchCase`, `WholeWord`, `Regex` | `bool` | false | 区分大小写、整词、正则。 |
|
|
| `ShowReplace` | `bool` | false | 展开替换行。 |
|
|
| `Current` | `int` | 0 | 当前匹配。 |
|
|
| `ReadOnly` | `bool` | false | 隐藏替换。 |
|
|
| `Disabled` | `bool` | false | 不能输入与替换。 |
|
|
|
|
## 状态
|
|
|
|
选项按钮按下状态、匹配计数、无匹配、正则错误(Danger 文字说明具体错误)、替换按钮在无匹配时禁用、禁用。
|
|
|
|
## 事件
|
|
|
|
`Moved`:查询、选项或当前匹配变化;`Replaced`:本帧替换的数量。
|
|
|
|
## 键盘操作
|
|
|
|
- Enter / Shift+Enter:下一项 / 上一项;macOS Cmd+G,其他平台 F3。
|
|
- 替换输入框中 Enter:替换当前项。
|
|
- Tab 依次到达展开按钮、查找框、上下按钮、三个选项与替换控件。
|
|
|
|
## 限制
|
|
|
|
- 使用 Go 的 RE2 正则语法,不支持回溯引用。
|
|
- 不在编辑器中绘制高亮,调用方用 `Matches()` 自行标记。
|