Emacs ruby模式实时求值

Nov. 16, 2015

在看John Cinnamond的 Extreme Object-Oriented Ruby的时候,注意到John在Emacs里实时运行了Ruby代码并且输出了结果。查了一下,这是通过 xmpfilter以及rcodetools、robe实现的。

要实现这个,首先我们需要xmpfilter

gem install xmpfilter

之后还需要rcodetools和robe, 可以通过el-get安 装(手动安装后load-file也可以)。

之后在配置文件中加入以下代码,在ruby-mode中加载rcodetool

(eval-after-load 'ruby-mode
  (lambda ()
    (require 'robe)
    (require 'rcodetools)))

并且绑定快捷键

(add-hook 'ruby-mode-hook
          'robe-mode
          (define-key ruby-mode-map (kbd "C-c C-c") 'xmp))

这样就完成了。

其实并没有。在实际操作中,因为我使用rvm来管理多个不同配置的ruby,直接C-c C-c会提示找不到xmp这个操作。因为我只在一个ruby环境中安装了xmpfilter,而这个 ruby环境并不是emacs默认的。

解决方法也很简单,emacs也有rvm插件,可以通过这个切换ruby环境,或者更省事的方法, 直接将安装了xmpfilter的ruby作为默认环境,或者给所有版本都安装xmpfilter即可。

Happy hacking!