Emacs中哪些特性对于Rails开发是有用的?

11

Emacs的哪些功能、包、插件等帮助你日常进行Ruby On Rails开发?


2
逗号太多了。正确的命名应该是C-x C-c。 - Peter Miehle
3个回答

7
以前的emacs-rails模式和Rinari(Rails开发中最流行的两种模式)都非常功能丰富,但是过于臃肿和繁琐。为了保持一个小巧、干净、可靠、实用和可定制的核心,Rinari将避免许多“花里胡哨”的功能。然而,并不是说这些额外的好处可能没有用处。
此页面应作为链接到一些其他与Rinari和Rails一般良好配合的工具/软件包的汇集点。如果您有任何想要添加到此列表或新的Rinari功能的想法,请告诉我们http://groups.google.com/group/emacs-on-rails
使用Rails的基本主要模式 大部分内容都是从 Rinari 的文档中复制来的。你可能已经猜到了,我更喜欢 Rinari 而不是 emacs-rails。看看这两个项目的活动情况 - emacs-rails 已经有一年没有更新了,而 Rinari 仍在继续开发。

根据其描述,Rinari听起来就像我正在寻找的东西,但是托管在Github上的当前版本已经损坏,正如我在此评论中所指出的那样。 - Teemu Leisti
我个人在 Rails 开发中使用 Emacs Prelude。它捆绑的 projectile 扩展为我提供了所需的项目导航功能,而且我并不太关心 Rinari 的其余功能。 - Bozhidar Batsov
我添加了一个关于“projectile”的答案。顺便说一句,你太谦虚了,没有提到这是你的作品。 :) - Teemu Leisti

4

那是YASnippet,而不是yas-snippet。 - Alexey Romanov

0

我尝试了开源的Aptana Studio IDE,它可以处理Rails项目。我发现我主要用它来在Rails项目文件之间导航,而且由于我更喜欢使用Emacs编辑文件,所以我暂时放弃了Aptana。(但是当进行调试时,它可能会派上用场,所以我并没有完全排除它。)

最近,我尝试了不同的Emacs扩展来帮助Rails开发:ECB(Emacs Code Browser)、Rinari和其他一些我忘记了的东西,但我对它们都不是很满意,或者无法让它们正常工作。然而,我现在很高兴地使用projectile,这是Bozhidar Batsov在上面的评论中提到的。它方便了在项目中查找文件和在其中进行grep。它也不仅限于Rails项目。

我最近发现的另一个非常有用的Emacs插件是tabbar扩展,它的工作方式有点像浏览器的选项卡栏。我将打开选项卡之间的导航绑定到我的M-leftarrow和M-rightarrow键上,这使得在缓冲区之间切换比以前更加方便。

继续使用Emcas,还有bubble-buffer(下面的代码),我可以只按一下键(在我的情况下是F5)即可将缓冲区内容切换到最近访问的文件--虽然tabbar使这有点多余。我还包括了立即使用C-DEL杀死缓冲区的代码,以及一些不错的小函数,使得在保持点不离开屏幕的情况下向上或向下滚动缓冲区成为可能;这里的代码将它们绑定到数字键盘的*/。(这些都不是我自己的工作。)

;; Use F5 to switch between buffers.  Use C-DEL to remove the current buffer
;; from the stack and retrieve the next buffer.  The most-frequented buffers are
;; always on the top of the stack.  (Copied, with changes and a bugfix, from
;; http://geosoft.no/development/emacs.html.)
(defvar LIMIT 1)
(defvar time 0)
(defvar mylist nil)
(defun time-now ()
  (car (cdr (current-time))))
(defun bubble-buffer ()
  (interactive)
  (if (or (> (- (time-now) time) LIMIT) (null mylist))
      (progn (setq mylist (copy-alist (buffer-list)))
             (delq (get-buffer " *Minibuf-0*") mylist)
             (delq (get-buffer " *Minibuf-1*") mylist)))
  (bury-buffer (car mylist))
  (setq mylist (cdr mylist))
  (setq newtop (car mylist))
  (switch-to-buffer (car mylist))
  (setq rest (cdr (copy-alist mylist)))
  (while rest
    (bury-buffer (car rest))
    (setq rest (cdr rest)))
  (setq time (time-now)))
(global-set-key [f5] 'bubble-buffer)
 (defun kill-buffer-without-questions ()
  ;; Kill default buffer without the extra emacs questions
  (interactive)
  (kill-buffer (buffer-name)))
(global-set-key [C-delete] 'kill-buffer-without-questions)

;; Scroll up and down without moving the cursor by pressing the numeric keypad's
;; "/" and "*" keys.
(defun scroll-down-keep-cursor ()
  ;; Scroll the text one line down while keeping the cursor
  (interactive)
  (scroll-down 1))
(defun scroll-up-keep-cursor ()
  ;; Scroll the text one line up while keeping the cursor
  (interactive)
  (scroll-up 1))
(global-set-key [kp-divide] 'scroll-down-keep-cursor)
(global-set-key [kp-multiply] 'scroll-up-keep-cursor)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接