Для контекста, я новичок в Emacs. Я не использовал его очень долго, но использую его все больше и больше (мне это очень нравится). Также я чувствую себя комфортно с lisp, но не очень хорошо знаком с elisp.
Что мне нужно сделать, так это связать регулярное выражение с комбинацией клавиш, потому что я так часто использую это регулярное выражение.
Что я делал:
M-C-s ^.*Table\(\(.*\n\)*?GO\)
Обратите внимание, я использовал новую строку выше, но я обнаружил, что для isearch-forward-regexp
вам действительно нужно заменить \n
в регулярном выражении на результат C-q Q-j . При этом вставляется буквальный символ новой строки (без завершения команды), что позволяет мне вставить новую строку в выражение и сопоставить ее между строками.
Как я могу связать это с комбинацией клавиш?
Я смутно понимаю, что мне нужно создать функцию elisp, которая выполняет isearch-forward-regexp
с выражением, но я не совсем уверен в деталях. Я искал в Google и обнаружил, что большая часть документации немного сбивает с толку.
Как связать регулярное выражение с комбинацией клавиш в emacs?
У Майка Стоуна был лучший ответ на данный момент - не точно , что я искал, но он работал для того, что мне было нужно
Редактировать - это сработало, но после сохранения макроса, когда я вернулся, чтобы использовать его позже, я не смог использовать его с C-x e . (то есть, если я перезагружаю emacs, а затем набираю Mx macro-name , а затем Cx e , я получаю сообщение в минибуфере вроде «no last kbd macro» или что-то подобное)
@ Майк Стоун - Спасибо за информацию. Я попытался создать макрос так:
C-x( M-C-s ^.*Table\(\(.*C-q C-J\)*?GO\) C-x)
Это создало мой макрос, но когда я выполнил свой макрос, я не получил ту же подсветку, которую обычно получаю при использовании isearch-forward-regexp
. Вместо этого он просто перескочил в конец следующего совпадения выражения. Так что это на самом деле не работает для того, что мне нужно. Есть идеи?
Редактировать: Похоже, я могу использовать макросы, чтобы делать то, что я хочу, я просто должен думать вне рамок isearch-forward-regexp
. Я попробую то, что вы предложили.