【问题标题】:Ruby-mode in Emacs in short-cut key for compile/run?Emacs 中的 Ruby 模式在编译/运行的快捷键中?
【发布时间】:2012-01-22 01:23:39
【问题描述】:

我对 Emacs 有所了解,因为我用它在 AUCtex 中写论文。

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

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

【问题讨论】:

  • 我在这里没有看到问题。将mode-compile 绑定到一个键就像 Emacs 中的任何其他键绑定一样。 ruby-mode.rb 扩展名输入到每个文件中。它与M-x describe-mode 的所有其他模式一样记录在案。那里有大量的 Emacs 教程,可以通过您最喜欢的搜索引擎访问。
  • 请将其分解为明确的具体问题,以便单独解决。您认为缺少什么键?当您按下此键时,您希望发生什么?你为自己解决这个问题做了哪些努力?是什么阻止了你这样做?换句话说,不要让试图帮助你完成所有工作的人。
  • @evernt_jr,我对 Emacs 没有太多经验,所以我只是不知道 ruby​​-mode 是做什么的?如果是这样,它会使用'ruby -w my_program.rb'编译/运行吗?
  • @pmr,我确实提到过我用谷歌搜索过,我确实搜索了 ruby​​-mode 教程、emacs ruby​​ 教程等,然后回来问这个问题。基本上我只是要求一个指针,比如'M-describe-mode'。因为我在 ruby​​-mode 中发现,看起来没有用于编译/运行的快捷键,我是否错过了 ruby​​-mode 中的一个函数或者还有其他东西,如果 ruby​​-mode 有一个函数我错过了,我怎么知道 ruby​​-mode 可以做什么?

标签: ruby emacs


【解决方案1】:

我建议使用我维护的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

谢谢

【讨论】:

  • 谢谢,我现在正在使用 quickrun。我认为它更适合我的使用,因为它的安装/配置和使用都相对简单。它可以按我的预期工作:在我输入命令后编译/运行,无需任何额外步骤即可查看结果。
  • 感谢 syohex 的超棒软件包!
【解决方案2】:

我建议使用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 体验。

【讨论】:

  • 我正在尝试让 inf-ruby 工作。我刚刚发现 ELPA 并安装了 inf-ruby 认为,我还需要这样做吗 :;;如果您手动安装,您需要: ;; * 将文件放到加载路径的某个位置(可能是 ~/.emacs.d);; * 将以下行添加到您的 .emacs 文件中:;; (autoload 'inf-ruby "inf-ruby" "运行一个劣质的 Ruby 进程" t) ;; (自动加载 'inf-ruby-keys "inf-ruby" "" t) ;; (eval-after-load 'ruby-mode ;; '(add-hook 'ruby-mode-hook 'inf-ruby-keys)) 否则我似乎需要先使用 'C-c C-s' 来加载 inf-ruby 以便' C-c C-l'
  • 它应该在您的加载路径中,只需在暂存缓冲区中玩一下,然后查看ruby-mode-hook 等,看看您是否还需要设置一些东西。
  • IRB 的性能也会像 shell 中的 Ruby 一样好/慢还是更慢?
  • 安装了 inf-ruby,我还在测试它。似乎很奇怪,在“inf-ruby-load-file”之后,我必须执行“ruby-switch-to-inf”才能看到 irb 结果?
【解决方案3】:

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

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

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

【讨论】:

  • F12 甚至会比“M-x compile”更好,但我正在寻找类似模式编译的功能。模式编译的问题是它似乎无法维护。
  • 不好意思,刚发现F12是我自己定义的快捷键。但我的观点仍然是我希望能够运行/编译我的程序而无需键入文件名,我知道使用“M-x compile”实际上并没有那么糟糕,因为它会在大多数情况下自动完成。我问这些问题主要是为了考虑我的选择,看看其他人在使用什么,所以感谢您的意见。这确实是一个有效的观点。我可以看到这种方法的简单性。
猜你喜欢
  • 2012-09-12
  • 1970-01-01
  • 2013-08-20
  • 2012-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多