如何将TextMate中的一行发送到在终端窗口中运行的irb进程?

dmn*_*mnd 3 ruby macos textmate irb

我经常使用TextMate窗口打开代码,并在与其相邻的终端窗口中进行irb处理.我希望能够在TextMate中按下一个键序列,它执行以下操作:

  1. 复制当前选择,如果没有,则复制当前行.
  2. 将其粘贴到运行irb的最顶层终端窗口中.
  3. 按下输入,以便在irb窗口中执行代码行.

我在R中编码时使用了这种交互式开发方式,发现非常方便.我很确定emacs和SLIME也让你像这样工作.Ruby和TextMate有可能吗?

ste*_*tef 6

您必须创建一个Bundle Command和一个键盘快捷键才能执行此操作.

  1. 在TextMate中,转到Bundles - > Bundle Editor
  2. 在我们自己的Bundle中创建一个新命令.称之为"在终端执行"
  3. 将"保存"设置为"无",将"输入"设置为"选定文本",将"或"设置为"线".
  4. 将"输出设置为丢弃"
  5. 在"激活"中选择您自己的快捷方式.我选择了Apple Shift U.
  6. 将下面的命令粘贴到"命令"框中(格式化导致我的麻烦)
  7. 关闭Bundle Editor,然后选择Bundles - > Bundle Editor - > Reload Bundles
  8. 创建一个包含'puts"Hello World"'行的新文档
  9. 在终端中打开IRB
  10. 选择刚刚在Textmate中编写的行,然后按键盘快捷键.
  11. 观看"Hello World"出现在IRB中.

命令:

#!/usr/bin/ruby

input = STDIN.gets

`osascript << EOF

tell application "Terminal"
  activate
end tell

delay 1

tell application "System Events"
  keystroke "#{input.gsub('"', '\"')}"
  keystroke return
end tell

EOF`
Run Code Online (Sandbox Code Playgroud)