我想在 Sublime Text 中创建一个快捷方式来执行以下操作:
- 如果 R 的 REPL 已打开,请将所选文本发送到此 REPL
- 否则在新窗口中打开 R REPL 并将文本发送到此 REPL。
我正在使用 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
当没有打开 REPL 时,这会引发错误“无法找到 `r` 的 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 脚本来做到这一点。
首先,从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))
不知道有没有更好的办法。但是,您可以通过 View 名称检测 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"})
我是一名优秀的程序员,十分优秀!