如何通过trigger方法在Monaco中打开带指定内容的查找部件?
Monaco编辑器:trigger方法设置查找框内容失效的原因及解决方案
问题现象
调用editor.trigger("find", "editor.actions.findWithArgs", { searchString: "test" })能成功打开查找部件,但无法将searchString的内容填充到查找输入框中;而通过editor.getContribution("editor.contrib.findController").setSearchString("test")可以正常设置查找内容。
失效原因
Monaco编辑器的editor.actions.findWithArgs命令在部分版本中存在参数处理逻辑缺陷:
- 该命令的核心逻辑优先处理"打开查找部件"的动作,打开后会立即聚焦查找输入框,导致预设的
searchString参数被覆盖; - 早期版本的命令实现未完整支持
searchString参数的传递路径,参数无法同步到查找输入控件的状态中。
解决方案
方案1:结合trigger与controller(兼容全版本)
先通过trigger打开查找部件,延迟一小段时间确保部件初始化完成,再用controller设置搜索内容:
editor.trigger("find", "editor.actions.findWithArgs"); setTimeout(() => { const findController = editor.getContribution("editor.contrib.findController"); findController.setSearchString("test"); }, 100);
方案2:使用正确的参数结构(适配新版本)
部分较新的Monaco版本中,findWithArgs需要通过query对象传递搜索参数,而非直接传searchString:
editor.trigger("find", "editor.actions.findWithArgs", { query: { searchString: "test", isRegex: false, isCaseSensitive: false } });
内容的提问来源于stack exchange,提问作者KTibow
相关产品推荐
相关产品推荐

