MujicaUI

Terminal & Code · #329

FindWidget 浅色主题渲染快照
浅色 · 渲染快照
FindWidget 深色主题渲染快照
深色 · 渲染快照

329 FindWidget · 查找替换

用途

在文本中查找与替换:区分大小写、整词、正则表达式,显示匹配数并上下跳转。

最小示例

text := "the seal and the seal"
state := code.FindState{Query: "seal", Replacement: "signet", ShowReplace: true}
view := func(c *ui.Context) {
	core.Use(c, core.Settings{})
	if code.FindWidget(c, &text, &state, code.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, Replacementstring""查找与替换文字;正则模式下替换支持 $1 分组。
MatchCase, WholeWord, Regexboolfalse区分大小写、整词、正则。
ShowReplaceboolfalse展开替换行。
Currentint0当前匹配。
ReadOnlyboolfalse隐藏替换。
Disabledboolfalse不能输入与替换。

状态

选项按钮按下状态、匹配计数、无匹配、正则错误(Danger 文字说明具体错误)、替换按钮在无匹配时禁用、禁用。

事件

Moved:查询、选项或当前匹配变化;Replaced:本帧替换的数量。

键盘操作

  • Enter / Shift+Enter:下一项 / 上一项;macOS Cmd+G,其他平台 F3。
  • 替换输入框中 Enter:替换当前项。
  • Tab 依次到达展开按钮、查找框、上下按钮、三个选项与替换控件。

限制

  • 使用 Go 的 RE2 正则语法,不支持回溯引用。
  • 不在编辑器中绘制高亮,调用方用 Matches() 自行标记。