我想获得sublime text 3(内置和包中)所有可用命令的列表
我正在尝试做什么:
我正在尝试为包命令创建快捷方式,但我不知道该命令的名称。我可以找到该命令并使用alt + shift + p
使用它,但是当我尝试将快捷方式添加到我的.sublime-keymap
文件时,我不确定是否要加上"command": "?"
位。如果我可以列出所有命令和grep来查找我正在寻找的内容然后只需将正式命令名称复制粘贴到keymap文件中,我就会很棒。
我想探索所有可用的命令(内置和从包中)来理解Sublime Text功能。我不想在崇高内搜索命令或在线阅读教程,而是想问我的编辑:
你能做什么?
而不是
你能这样做吗?
答案 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