Какие полезные функции Emacs для разработки Rails

Какие функции (ами) Emacs, пакеты, надстройки и т.д. помогают вам в ежедневной разработке Ruby On Rails?

Ответ 1

Предыдущие версии обоих emacs-rails и Rinari (два самых популярных режима для разработки Rails) были очень функциональными, но раздутыми и громоздкими. Для поддержания небольшого, чистого, надежного, функционального и взломанного ядра Rinari будет избегать многих функций типа "колокола и свистки". Однако это не означает, что эти дополнительные лакомства могут оказаться непригодными.

Эта страница должна служить точкой маршалинга для ссылок на некоторые другие инструменты/пакеты, которые хорошо работают с Rinari и Rails в целом. Если у вас есть идеи для добавления в этот список или для новых функций Rinari, пожалуйста, сообщите нам об этом http://groups.google.com/group/emacs-on-rails.

Основные основные режимы работы с Rails

Большая часть этого материала копируется из документации Rinari. Как вы, возможно, догадались, я предпочитаю Rinary over emacs-rails. Рассматривая деятельность обоих проектов, emacs-rails не изменилась примерно на год, в то время как все еще разрабатывается rinary.

Ответ 3

Я попробовал Aptana Studio IDE (open-source), который обрабатывает проекты Rails. Я обнаружил, что в основном я использовал его для навигации по файлам проектов Rails, и так как я предпочитаю использовать Emacs для редактирования файлов в любом случае, я сейчас отложил Aptana. (Но это может пригодиться позже, когда вы выполняете отладку, поэтому я не полностью отказываюсь от нее.)

Недавно я попробовал разные расширения Emacs, чтобы помочь с разработкой Rails: ECB (Emacs Code Browser), Rinari и что-то еще, о чем я забыл, ни один из которых я не был полностью доволен или не мог работать. Однако теперь я с радостью использую projectile, о котором упомянул Божидар Бацов в комментарии выше. Это добавляет удобство поиска файлов внутри проекта и grepping внутри них. Это не относится только к проектам 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)