sublimetext3 - Sublime Text 3 中 View 的本地键绑定(bind)

标签 sublimetext3

是否可以配置仅在给定 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 值之外的其他设置,您需要在插件中实现 EventListenerViewEventListener 并处理 on_query_context 事件,它允许您创建在绑定(bind)中使用的自定义上下文。

有关这方面的更多信息,请参阅 API documentation ;您还可以在 defining custom contexts 上观看此视频以及(免责声明:我是视频的作者)

关于sublimetext3 - Sublime Text 3 中 View 的本地键绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64864907/

相关文章:

sublimetext - 无法使用国际 Mac 键盘在 Linux 上的 Sublime Text 中键入反斜杠

ubuntu - sudo subl,在没有全局菜单的情况下启动 sublime

sublimetext2 - 如何在SublimeText中使用自定义字体

keyboard-shortcuts - Sublime Text 3 中注释行的键盘快捷键

C++ sublime text插件代码导航

sublimetext2 - 如何在 Sublime Text 3 中正确格式化/缩进 HTML 和 PHP 代码

python - 用于 CSV 拆分的正则表达式,包括多个双引号

python - 使用 Python 的 Sublime Text 中的进度条

sublimetext3 - 没有这样的文件或目录 : 'jshint'

sublimetext3 - Sublime Text 3047用户界面很大