是否可以配置仅在给定 View 中有效的键绑定(bind)?来自插件?除了所选 View 之外,它在所有其他 View 中都应该处于非事件状态。
最佳答案
这可以通过键绑定(bind)中的 context
来实现,该上下文使绑定(bind)仅在非常特定的情况下才处于事件状态,并且根据您的需要,您甚至不需要特殊的插件来执行此操作(尽管听起来就像你的情况一样)。
作为简要概述,键绑定(bind)可以选择包含 1 个或多个上下文
,用于确定绑定(bind)是否应处于事件状态。如果多个上下文应用于同一个键,则在绑定(bind)激活之前必须满足所有上下文。可以将相同的按键序列绑定(bind)到多个命令(或同一命令的变体),只要它们具有消除歧义的上下文
即可。
如果有多个键绑定(bind)到同一个键,则按顺序考虑它们(从最后定义的绑定(bind)开始并向上移动),直到看到具有应用它的上下文的键,或看到没有上下文的键。因此,绑定(bind)的顺序可能很重要;将最具体的内容放在文件中的后面,将最不具体的内容放在较早的位置。
例如,给定此键绑定(bind):
{ "keys": ["ctrl+shift+h"],
"command": "echo",
"args": {"msg": "Key binding triggered"},
"context": [
{ "key": "setting._my_setting", "operator": "equal", "operand": true },
],
},
此绑定(bind)仅在设置 _my_setting
的 bool 值为 true
的地方有效;如果值为 false
或未设置该设置,则绑定(bind)不活动。
因此,最初,绑定(bind)不会处于事件状态,按下该键将触发绑定(bind)到该键序列的任何其他命令。
但是,如果您要打开控制台并运行:
view.settings().set("_my_setting", True)
现在,绑定(bind)在您执行此操作时所关注的任何文件中都处于事件状态,但在其他地方都被禁用。
除了这个上下文(内置于 Sublime 中)只能用于 bool 设置之外,设置的名称或其交互方式没有什么神奇之处。因此,它特别遵循设置的层次结构,您可以在以下一个或多个位置添加设置:
Preferences.sublime-settings
使绑定(bind)在任何地方都处于事件/非事件状态- 项目特定设置,以使特定窗口中包含的文件中的绑定(bind)处于事件/非事件状态
- 用于使绑定(bind)在特定类型的文件中处于事件/非事件状态的特定语法设置
- 在 View 设置中(如上面插件中的示例),使绑定(bind)在特定 View 中处于事件/非事件状态。
列表中更靠下的项目会更快地覆盖项目(因此 View
设置胜过一切,语法设置胜过项目和默认设置等)。
要进行更细粒度的控制或使用 bool 值之外的其他设置,您需要在插件中实现 EventListener
或 ViewEventListener
并处理 on_query_context
事件,它允许您创建在绑定(bind)中使用的自定义上下文。
有关这方面的更多信息,请参阅 API documentation ;您还可以在 defining custom contexts 上观看此视频以及(免责声明:我是视频的作者)
关于sublimetext3 - Sublime Text 3 中 View 的本地键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64864907/