Tip #1
Преамбула
Иногда, находясъ в какой-нибудь функции, требуется быстро перейти на предыдущую или последующую объявленную функцию в коде. Использовать для этого способ, описанный в Tip #0, мне показалось, немного накладно: для этого нужно вызвать команду my-show-functions-list, перейти в буфер *Occur* и выбрать нужную функцию. Гораздо удобнее было бы "скакать" по объявлениям функций, используя определённые клавишные комбинации, оставаясь при этом в текущем буфере.
Задача
Удобное и быстрое перемещение между функциями в текущем буфере, без использования буфера *Occur*.
Решение
Для решения задачи нам потребуются стандартные команды Emacs search-forward-regexp и search-backward-regexp. Как можно догадаться из названий, эти две команды позволяют осуществлять поиск по регулярному выражению в текущем буфере. В качестве аргумента для поиска, мы будем использовать регулярное выражение из Tip #0. Нам также потребуется создать две новые функции с названием my-jump-to-function-forward и my-jump-to-function-backward.
Функции my-jump-to-function-forward и my-jump-to-function-backward
Взяв за основу функцию my-show-functions-list из Tip #0, получаем следуюший Emacs lisp код:
(defun my-jump-to-function-forward() (interactive) (search-forward-regexp "^\t+\\(function\\|public function\\|protected function\\|private function\\|public static\\|protected static\\|private static\\|def\\)" )) (defun my-jump-to-function-backward() (interactive) (search-backward-regexp "^\t+\\(function\\|public function\\|protected function\\|private function\\|public static\\|protected static\\|private static\\|def\\)" ))
Теперь осталось назначить клавишные комбинации. Для себя я выбрал ^N и ^P.
(global-set-key [(control n)] 'my-jump-to-function-forward) (global-set-key [(control p)] 'my-jump-to-function-backward)
Всё. Можно наслаждаться быстрыми "прыжками" между функциями, оставаясь при этом в текущем буфере.
2 комментария:
Большая часть режимов для языков программирования обеспечивает реализации функций beginning-of-defun (`C-M-a') и end-of-defun (`C-M-e'), которые не имеют зависимости от конктретного языка. Это будет удобней, чем пользоваться своим кодом. Ну а клавиши переопределить - дело нехитрое :-)
что-то у меня blogspot не дает вставить заголовок поста при редактировании. посмотри - может это что-то в настройках или стилях?
Отправить комментарий