Emacs中的Ruby模式是编译/运行的快捷键吗?

时间:2012-01-22 01:23:40

标签: ruby emacs

我对Emacs有一点了解,因为我用它在AUCTex中写了我的论文。

但是,这次尝试编写一些简单的ruby程序主要是为了学习,我在Emacs中搜索Ruby并找不到我要找的东西。

根据我到目前为止所读到的内容,我知道我使用的Emacs(23.3.5)具有内置ruby模式,基本上应该支持语法高亮,自动缩进等。但是快捷键怎么样对于调试/运行,类似于Mode Compile

3 个答案:

答案 0 :(得分:3)

我建议使用inf-ruby在Emacs中获取IRB会话。然后你可以使用例如 C-c C-l 调用inf-ruby-load-file在IRB会话中加载缓冲区。

此外,您可能还希望使用Flymake不断对ruby -c的缓冲区进行语法检查。以下是我从emacs-starter-kit获取的3个函数:

(defun flymake-ruby-init ()
  (let* ((temp-file (flymake-init-create-temp-buffer-copy
                     'flymake-create-temp-inplace))
         (local-file (file-relative-name
                      temp-file
                      (file-name-directory buffer-file-name))))
    ;; Invoke ruby with '-c' to get syntax checking
    (list "ruby" (list "-c" local-file))))

(defun flymake-ruby-enable ()
  (when (and buffer-file-name
             (file-writable-p
              (file-name-directory buffer-file-name))
             (file-writable-p buffer-file-name)
             (if (fboundp 'tramp-list-remote-buffers)
                 (not (subsetp
                       (list (current-buffer))
                       (tramp-list-remote-buffers)))
               t))
    (local-set-key (kbd "C-c d")
                   'flymake-display-err-menu-for-current-line)
    (flymake-mode t)))

(eval-after-load 'ruby-mode
  '(progn
     (require 'flymake)
     (push '(".+\\.rb$" flymake-ruby-init) flymake-allowed-file-name-masks)
     (push '("Rakefile$" flymake-ruby-init) flymake-allowed-file-name-masks)
     (push '("^\\(.*\\):\\([0-9]+\\): \\(.*\\)$" 1 2 nil 3)
           flymake-err-line-patterns)
     (add-hook 'ruby-mode-hook 'flymake-ruby-enable)))

此外,我使用以下函数在点显示Flymake错误:

;; Flymake errors at point from Dave Love on gnu.emacs.help:
(defun my-flymake-show-help ()
   (when (get-char-property (point) 'flymake-overlay)
     (let ((help (get-char-property (point) 'help-echo)))
       (if help (message "%s" help)))))

(add-hook 'post-command-hook 'my-flymake-show-help)

以上所有内容共同构成了非常体面的Ruby Emacs体验。

答案 1 :(得分:3)

我建议使用由我维护的quickrun.el

quickrun.el是执行编辑缓冲区的扩展。 当然,quickrun.el支持许多编程语言和标记语言 它支持Ruby。

您可以在网址下载quickrun.el。

https://raw.github.com/syohex/emacs-quickrun/master/quickrun.el

然后将quickrun.el添加到配置文件中并对其进行评估(或重新启动Emacs)。

(add-to-list 'load-path "~/.emacs.d/elisp") ;; If you install quickrun.el to ~/.emacs.d/elisp
(require 'quickrun)

现在您可以使用以下命令执行当前缓冲区。

M-x quickrun

您可以使用编译当前缓冲区(不执行)。

M-x quickrun-compile-only

如果您经常使用quickrun命令,则应分配键绑定,如下所示。

(global-set-key (kbd "<f7>") 'quickrun)
(global-set-key (kbd "<f8>") 'quickrun-compile-only)

如果您了解有关quickrun.el的更多信息,请参阅github page

由于

答案 2 :(得分:0)

您可以从 M-x compile运行ruby程序并使用“ruby -w your_program”。

输出类似于编译输出,因此您可以单击错误转到该行。

看起来mode-compile也支持ruby-mode。