我想在sublime文本中创建一个执行以下操作的快捷方式:
我正在使用R-box。这个包有一个python类RboxSendTextCommand,它使用命令repl_send
external_id = self.view.scope_name(0).split(" ")[0].split(".", 1)[1]
self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd})
return
这会抛出错误"找不到`r`"的REPL没有打开REPL时。我试图在
中修改它 try:
self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd})
except:
self.view.window().run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"})
self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd})
return
else:
self.view.window().run_command("repl_send", {"external_id": external_id, "text": cmd})
return
然而,当没有REPL R窗口打开时,会发生同样的错误。你知道怎么做吗?我并不特别需要通过R-box脚本来做到这一点。
答案 0 :(得分:1)
首先,从SublimeREPL源代码,如果没有REPL R运行,它只是打印一条错误信息。它不会抛出任何错误。所以try...except...
在这里不起作用。
class ReplSend(sublime_plugin.TextCommand):
def run(self, edit, external_id, text, with_auto_postfix=True):
for rv in manager.find_repl(external_id):
...
else:
sublime.error_message("Cannot find REPL for '{}'".format(external_id))
我不知道是否有更好的方法可以做到这一点。但是,您可以通过其视图名称检测REPL R.
if App == "SublimeREPL":
external_id = self.view.scope_name(0).split(" ")[0].split(".", 1)[1]
current_window = self.view.window()
found = False
repl_name = "*REPL* [%s]" % external_id
for w in sublime.windows():
for v in w.views():
if v.name() == repl_name:
found = True
if not found:
current_window.run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"})
current_window.run_command("repl_send", {"external_id": external_id, "text": cmd})
return
在新窗口中打开REPL:
sublime.run_command("new_window")
created_window = sublime.active_window()
created_window.run_command("run_existing_window_command",{"id": "repl_r", "file": "config/R/Main.sublime-menu"})