如何实现仅在Monaco建议小部件可见时启用空格退出快捷键
完全可行!实现方法如下
你的需求完全可以实现,核心思路就是监听Monaco编辑器建议小部件的显示/隐藏状态,动态切换上下文键的激活状态,这样就能让空格键快捷键仅在建议小部件可见时生效,平时正常输入空格。
完整实现代码
// 创建上下文键,初始值设为false(建议小部件默认处于隐藏状态) const hideSuggestions = editor.createContextKey('hideSuggestions', false); // 添加空格键触发隐藏建议的命令,仅当hideSuggestions上下文键为true时生效 editor.addCommand( monaco.KeyCode.Space, () => { editor.trigger('', 'hideSuggestWidget', null); }, 'hideSuggestions' ); // 监听建议小部件的显示事件,显示时激活上下文键 editor.onDidShowSuggestWidget(() => { hideSuggestions.set(true); }); // 监听建议小部件的隐藏事件,隐藏时关闭上下文键 editor.onDidHideSuggestWidget(() => { hideSuggestions.set(false); });
关键逻辑说明
- 上下文键的初始状态:把
hideSuggestions的初始值设为false,因为编辑器默认不会显示建议小部件,这样初始状态下空格键可以正常输入空格。 - 监听小部件状态变化:利用Monaco提供的
onDidShowSuggestWidget和onDidHideSuggestWidget事件,精准捕捉建议小部件的显示/隐藏动作,实时更新上下文键的值。 - 命令的激活条件:只有当
hideSuggestions为true时,绑定的空格键命令才会生效,完美实现“仅在建议可见时触发隐藏”的需求。
如果需要额外验证小部件的当前状态,也可以通过editor.getContribution('editor.contrib.suggestController')?.isSuggestWidgetVisible()方法直接查询,但监听事件的方式更高效且能保证状态同步。
内容的提问来源于stack exchange,提问作者Laureen
相关产品推荐
相关产品推荐

