Tip #0
Задача
Удобное и быстрое перемещение между функциями в текущем буфере.
Решение
В Emacs есть дико полезная команда list-matching-lines. Эта команда принимает, в качестве аргумента, регулярное выражение и возвращает обратно найденые совпадения, в виде списка в отдельный буфер *Occur*. Вот её-то мы и будем использовать для решения задачи.
Подбираем регулярное выражение
Так как я в основом работаю с PHP и Python, то регулярное выражение будет составлено с учётом только этих двух языков.
^\t+\\(function\\|public function\\|protected function\\|private function\\|public static\\|protected static\\|private static\\|def\\)
Конечно, вся эта бодяга выглядет немного коряво, можно сделать гораздо изящнее. Но это было первое, что пришло мне в голову и оно работает:)
Функция my-show-functions-list
Создав и проверив регулярное выражение, можно заняться созданием специальной функции с последующим размещением её в .emacs (конфигурационный файл редактора). Функцию я обозвал my-show-functions-list. Если вы создаёте новую функцию для Еmacs, советую придумать какой-нибудь префикс (у меня это "my-") и всегда использовать его в начале имени вашей новой функции. Это позволит в дальнейшем удобно отделять ваши собственные команды от стандартных команд Еmacs.
(defun my-show-functions-list() (interactive) (list-matching-lines "^\t+\\(function\\|public function\\|protected function\\|private function\\|public static\\|protected static\\|private static\\|def\\)"))
Теперь осталось прописать комбинацию клавиш для быстрого вызова нашей новой команды. Я это дело повесил на ^F11 (Control + F11).
(global-set-key [C-f11] 'my-show-functions-list)
Вот собственно и всё. Теперь нужно перегрузить Emacs и открыть какой-нибудь *.php или *.py файл с некоторым кол-вом функций для проверки того, что у нас получилось. При нажатии ^F11 будет открыто новое окно с буфером *Occur*, в котором приведён список всех объявленных в файле функций. Перейдя в буффер *Occur* и выбрав из списка, посредством клавиши Return нужную функцию, вы, тем самым, переместите курсор на строку с объявлением той самой функции в вашем файле.
2 комментария:
Я пользуюсь prh-bufsw от Александра Соловьёва:
http://blog.piranha.org.ua/2006/09/16/emacs/
Рекомендую
Хотелось бы сделать пост для блога, как получить права? (bzek@jabber.org)
Отправить комментарий