0

我正在 Windows 8 上使用 sublime text 2 build 2221;蟒蛇2.7。

我想通过调用这样的键绑定将我当前在 st2 中处理的文件的名称传递给命令:

{ "keys": ["ctrl+shift+2"],"command": "run_me", "args":{"cmd":"$1"} }

where"$1"被当前视图中的文件名替换,即我在按下键时正在查看的文件。我该怎么办?

我的脚本run_me如下所示:

class runMeCommand(sublime_plugin.WindowCommand):
    def run(self, **kwargs):
        cmd_string = kwargs["cmd"]
        os.system("start "+cmd_string)

我在这里找到了以下参考资料这里,它们似乎在谈论这个,但我无法让它发挥作用。

链接中的相关引用:

Link 1:
...
"args": {
      "contents": "console.log('=== HEARTBEAT $TM_FILENAME [$TM_LINE_NUMBER] ===');${0}"
...

--------------------------------------------------------------------------------------------

Link 2:
$TM_FILENAME    Filename of the file being edited including extension.
4

1 回答 1

1

这似乎是这样做的方法(HT @skuroda):

class runMeCommand(sublime_plugin.WindowCommand):
    def run(self, **kwargs):
        try:
            if "$file_name" in kwargs["cmd"]:
                cur_view = self.window.active_view()
                cmd_string=kwargs["cmd"].replace("$file_name",cur_view.file_name())
                os.system("start "+cmd_string)
            else:
                os.system("start "+cmd_string)
        except TypeError:
            sublime.message_dialog("Something went wrong with the command given... \n\n\n"+traceback.format_exc())

键绑定如下所示:

{ "keys": ["alt+shift+3"],"command": "run_me", "args":{"cmd":"echo $file_name"} }

如果 runMe 类总是只得到一个参数,那么就不需要使用**kwargs

def run(self, cmd):
    try:
        if "$file_name" in cmd:
            cur_view = self.window.active_view()
            cmd_string=cmd.replace("$file_name",cur_view.file_name())
            os.system("start "+cmd_string)
        else:
            cmd_string=cmd
            os.system("start "+cmd_string)
    except TypeError:
        sublime.message_dialog("Something went wrong with the command given... \n\n\n"+traceback.format_exc())

键绑定将与上述相同。

于 2013-09-15T01:19:04.270 回答