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