如何列出Sublime Text 3

时间:2018-02-07 05:12:25

标签: sublimetext3

我想获得sublime text 3(内置和包中)所有可用命令的列表

我正在尝试做什么:

创建快捷方式

我正在尝试为包命令创建快捷方式,但我不知道该命令的名称。我可以找到该命令并使用alt + shift + p使用它,但是当我尝试将快捷方式添加到我的.sublime-keymap文件时,我不确定是否要加上"command": "?"位。如果我可以列出所有命令和grep来查找我正在寻找的内容然后只需将正式命令名称复制粘贴到keymap文件中,我就会很棒。

探索

我想探索所有可用的命令(内置和从包中)来理解Sublime Text功能。我不想在崇高内搜索命令或在线阅读教程,而是想问我的编辑:

  

你能做什么?

而不是

  

你能这样做吗?

1 个答案:

答案 0 :(得分:9)

Sublime中有一个相当完整的核心命令列表可通过Unofficial Docs获得,特别是command list section。但是,这并不能帮助您了解第三方软件包和插件可能添加的命令。

在你的问题中,你提到了如何获得一个命令,但不知道它可能是为了在其他地方使用它的目的。如果您知道某种方式来调用命令(键,命令调色板,菜单)并想知道该命令是什么,Sublime会让您满意。

如果使用 Ctrl +`View > Show Console打开Sublime控制台,则可以输入以下命令:

sublime.log_commands(True)

现在每当你做任何事情时,Sublime都会记录它执行控制台的命令,以及它可能需要的任何参数。例如,如果您打开日志记录并依次按下每个箭头键,控制台将显示以下内容:

command: move {"by": "lines", "forward": false}
command: move {"by": "lines", "forward": true}
command: move {"by": "characters", "forward": false}
command: move {"by": "characters", "forward": true}

使用此工具,您可以找出各种操作所采用的命令,以便您可以在其他地方使用它们。这也是一种方便的技术,用于诊断诸如键盘快捷键之类的东西,例如,它们似乎没有做你认为应该做的事情。使用False而不是True运行相同的命令(或重新启动Sublime)以关闭注销。

如果您真的对每个可能命令的细节内部细节感兴趣,可以使用以下内容。这实现了一个标记为list_all_commands的命令,当您运行它时,会将所有类型的所有可用命令列入新的暂存缓冲区。

请注意,并非所有已实现的命令都必须用于外部使用;插件有时会定义帮助程序命令供自己使用。这意味着尽管这会告诉您所有存在的命令,但并不意味着所有命令都适合您使用。

此外,虽然这大致列出了命令类上的run方法所采用的参数(这是Sublime执行命令所执行的操作),但某些命令可能包含不明确的参数列表。

import sublime
import sublime_plugin

import inspect

from sublime_plugin import application_command_classes
from sublime_plugin import window_command_classes
from sublime_plugin import text_command_classes


class ListAllCommandsCommand(sublime_plugin.WindowCommand):
    def run(self):
        self.view = self.window.new_file()
        self.view.set_scratch(True)
        self.view.set_name("Command List")

        self.list_category("Application Commands", application_command_classes)
        self.list_category("Window Commands", window_command_classes)
        self.list_category("Text Commands", text_command_classes)

    def append(self, line):
        self.view.run_command("append", {"characters": line + "\n"})

    def list_category(self, title, command_list):
        self.append(title)
        self.append(len(title)*"=")

        for command in command_list:
            self.append("{cmd} {args}".format(
                cmd=self.get_name(command),
                args=str(inspect.signature(command.run))))

        self.append("")

    def get_name(self, cls):
        clsname = cls.__name__
        name = clsname[0].lower()
        last_upper = False
        for c in clsname[1:]:
            if c.isupper() and not last_upper:
                name += '_'
                name += c.lower()
            else:
                name += c
            last_upper = c.isupper()
        if name.endswith("_command"):
            name = name[0:-8]
        return name