사전 정의 된 정규식을 사용하여 isearch-forward-regexp
을 시작하는 명령을 정의하고자합니다.프로그래밍 방식으로 대화 형 regexp 검색 시작
"aaa"또는 "bbb"가 모두 나타나기를 원합니다. isearch-forward-regexp
과 대화식으로 입력 할 수있는 정규 표현식은 \\(aaa\\|bbb\\)
입니다. 대화식으로 regexp를 입력하지 않으면 어떤 방법이 있을까요? 나는이 같은 일을 시도했다 :
(defun my-search()
(interactive)
(isearch-mode t t)
(isearch-yank-string "\\(aaa\\|bbb\\)"))
하지만 isearch
에 빠지게 할 때 \\(aaa\\|bbb\\)
로 평가 이맥스에 문자열을 정의 할 수있는 방법이있을 것 같지 않기 때문에이 방법은 작동하지 않습니다.
예를 들어 "\\(aaa"
은 (aaa
으로 평가되지만, "\\\\(aaa"
은 \\\\(aaa
으로 평가됩니다. 하나의 백 슬래시로 평가할 방법이없는 것 같습니다.
내가 원하는 것을 할 수있는 방법이 있습니까? 다음, M-x foo RET
\(aaa\|bbb\) RET
를 입력 : 예를 들어
(defun foo (regexp)
(interactive (list (read-regexp "Regexp: ")))
(isearch-mode t t)
(let ((isearch-regexp nil))
(isearch-yank-string regexp)))
:
나를 위해 작동하지 않는 것 같습니다. 내가 (foo "\\\ (aaa \\ | bbb \\\)"를 실행할 때) regexp의 의미가 아니라 regexp의 리터럴 문자열을 찾습니다. 예를 들어 "aaa"는 일치하지 않지만 함수 코드에 나타나는 정규 표현식 문자열은 일치합니다. 이맥스에서 작동합니까? –
네, 이맥스에서 잘 작동합니다 - 모든 이맥스는 이맥스 20에서 최신 이맥스 26.1 사전 테스트를 거쳐 출시됩니다. 'isearch-regexp'의 let-binding을 포함 시켰는지 확인하십시오. 그렇지 않으면 행동은 당신이 묘사하는 것입니다. isearch-yank-string은 regexp 검색을한다고 생각하면 regexp 특수 문자를 인용하기 때문입니다. 'emacs -Q' (초기화 파일 없음)를 사용하여 테스트하십시오. 일단 시작되면, 검색을 반복하기 위해'C-s'을 사용해야 할 수도 있습니다. – Drew
필자는 필자의 .emac을로드하더라도 emacs를 재시작 한 후 작동이 시작되었다. 아마 나는 실수로 이맥을 특수한 상태에 놓고 그 기능을 다루지 않을 것이다. 감사. –