是否可以在sublime text 2中链接键绑定命令?

时间:2012-03-10 12:50:01

标签: keyboard-shortcuts sublimetext

当我想在侧栏中显示当前文件然后浏览文件夹结构时,Sublime Text中有时会出现这种情况。

这可以使用命令reveal_in_side_barfocus_side_bar来实现,但是它们必须绑定到两个单独的键组合,所以我必须做2个键盘组合才能实现我的目标,理想情况下我喜欢只有一个(我很懒)。

有没有办法将多个命令绑定到单个组合键?例如像这样的东西:

{
  "keys": ["alt+shift+l"], 
  "commands": ["reveal_in_side_bar", "focus_side_bar"]
},

解决方案

基于@ artem-ivanyk和@d_rail的回答

1)工具→新插件

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

另存为RevealInSideBarAndFocus.py

2)Sublime Text 2→首选项→键绑定 - 用户

将它绑定到快捷方式:

{ "keys": ["alt+shift+l"], "command": "reveal_in_side_bar_and_focus" }

8 个答案:

答案 0 :(得分:34)

虽然问题是一年之久,但这可能会帮助那些仍在寻找答案的人。

最近,jisaacks开发了一个名为Chain of command的新软件包。它的主要任务是完全按照您的要求执行,一次链接多个命令。

这个包可以在这里找到: https://github.com/jisaacks/ChainOfCommand

可以在下面找到工作的一个例子。

我们假设你想要一个键绑定来复制当前文件。您可以设置此键绑定:

{
  "keys": ["super+shift+option+d"], 
  "command": "chain", 
  "args": {
    "commands": [
      ["select_all"],
      ["copy"],
      ["new_file"],
      ["paste"],
      ["save"]
    ]
  }
}

这将选择所有文本,复制它,创建新文件,粘贴文本,然后打开保存文件对话框。

来源:https://sublime.wbond.net/packages/Chain%20of%20Command

答案 1 :(得分:30)

更新@Artem Ivanyk的回答。我不知道Sublime有什么变化,但是这个解决方案对我不起作用,但是我得到了这个工作:

import sublime, sublime_plugin

class RevealInSideBarAndFocusCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.window.run_command("reveal_in_side_bar")
        self.window.run_command("focus_side_bar")

{ "keys": ["ctrl+shift+8"], "command": "reveal_in_side_bar_and_focus" }
是的,我正在使用Build 2220

答案 2 :(得分:25)

偶然发现了类似的问题。当试图记录涉及“保存”命令的宏时,控制台向我扔了“未知宏命令保存”消息。 用基本插件解决了这个问题。

1) 工具→新插件

import sublime, sublime_plugin

class MyChainedActionsCommand():
    def run(self):
        self.view.run_command("reveal_in_side_bar")
        self.view.run_command("focus_side_bar")

您需要为类名使用上部驼峰案例表示法。 ST2为命令名公开此类,删除“Command”后缀,其余部分转换为小写 - 下划线表示法。即在此示例中,MyChainedActionsCommand可以在sublime的控制台中运行:view.run_command("my_chained_actions")

2) Sublime Text 2→首选项→键绑定 - 用户

将它绑定到快捷方式:

{ "keys": ["alt+shift+l"], "command": "my_chained_actions" }

注意逗号。

答案 3 :(得分:8)

看看this gist

我一直试图在很长一段时间内实现这一点,并偶然发现了这一点。

不要忘记阅读提供的“文档”。我一直试图让这个工作,直到我重新调整我没有传递“上下文”键。

答案 4 :(得分:4)

您可以创建一个宏来执行此操作。对于Sublime Text,宏基本上只是链式命令。然后,您为该宏创建一个键绑定。你可以使用Tools > Record Macro创建一个宏,然后执行你的命令(注意宏记录键击,所以你想要使用菜单栏中的命令不引起冲突),然后{{ 1}},然后是Stop Recording。保存宏后,您可以在Sublime Text中重新打开它,以确保它只记录您想要的内容。

答案 5 :(得分:1)

Artem Ivanyk回复的基础上,这是一个与参数一起使用的ChainedActions版本。 actionsargs需要两个参数。两者都是列表,列表中的每个命令都使用相应的参数执行。这个公认的愚蠢的例子插入了两个片段:view.run_command("chained_actions", {"actions":["insert_snippet","insert_snippet"],"args":[{"contents": "($ 0)“},{”contents“:”1($ 0)“}]})`

import sublime
import sublime_plugin

class ChainedActionsCommand(sublime_plugin.TextCommand):
    def run(self, edit, actions, args):
        for i, action in enumerate(actions):
            self.view.run_command(action, args[i])

答案 6 :(得分:1)

我尝试使用相同的命令,但我最终得到一个错误,当文件的文件夹已经展开时,sublime移动了我的焦点侧边栏顶部,我可以看到打开的文件。为了改善这种行为,我写了一个新的插件,确保它会按照我的意愿行事,这里是https://github.com/miguelgraz/FocusFileOnSidebar

答案 7 :(得分:1)

我正在使用Sublime text3 build - 3083.它只是通过“在侧栏中显示”来解决问题,焦点自动生成。

我在侧边栏中添加了自定义键盘快捷键'显示'通过在Preferences-> Key Bindings-User:

下添加以下语句
[
    { "keys": ["ctrl+shift+r"], "command": "reveal_in_side_bar"}
]

选项 - '在侧边栏中显示' 图像文件类型缺失,因为右键单击鼠标时不会出现上下文菜单。在这种情况下,自定义键盘快捷键很方便。