증분 검색에서 현재 일치 선택 (예 : 지역)


9

로 문자열을 검색 할 때 C-s검색 모드를 종료하기 위해 키를 눌렀 지만 여전히 일치하는 선택을 유지하고 싶습니다 . 그렇게하면 즉시 입력을 시작하고 마지막 일치 항목을 바꿀 수 있습니다.

예를 들어 다음 문서가 있다고 가정 해보십시오.

The quick brown fox jumps over the lazy dog.

"lazy"를 검색하면, emacs는 그 단어를 그렇게 선택합니다 (대괄호가 선택되고 파이프는 커서입니다) :

The quick brown fox jumps over the [lazy|] dog.

return이제을 누르면 emacs는 커서 위치를 유지하지만 "lazy"를 선택 해제합니다.

The quick brown fox jumps over the lazy| dog.

이 대신 검색 모드를 종료하지만 위의 두 번째 상태와 같이 현재 일치하는 선택을 유지하는 바로 가기가 필요합니다.


아니다 M-x query-replace당신이 찾고있는 무엇?
Nsukami _

1
@Nsukami_ 검색하기 전에 원하는 쿼리 또는 대체 할 쿼리를 항상 알 수는 없습니다. C-s검색하고 싶은 것을 맞추고 입력 한 다음 변경하려는 항목에서 백 스페이스가있는 쿼리를 0으로 변경하는 것이 훨씬 쉽습니다 . 그런 다음 정확히 바꾸고 싶은 것을 가지고 놀아요. M-%너무 "공식적"입니다.
Ben

해결책은 내가 그것을 죽일 단어를 찾은 다음 다른 곳으로 끌어 당길 때와 같이 나에게 유용합니다. query-replace이 문제를 해결하지 못합니다.
GergelyPolonkai

답변:


7

한 가지 방법이 있습니다.

(defun isearch-exit-mark-match ()
  "Exit isearch and mark the current match."
  (interactive)
  (isearch-exit)
  (push-mark isearch-other-end)
  (activate-mark))

(define-key isearch-mode-map (kbd "<C-return>") #'isearch-exit-mark-match)

이것은 다른 키 (C-return)를 바인딩하여 현재 isearch를 종료하고 마지막 일치 항목을 선택된 상태로 둡니다. 이것도 isearch-forward-regexp잘 작동 합니다.


1
"Symbol의 함수 정의가 void : bind-key입니다."라는 메시지가 나타납니다. 어디에서 bind-key오나요?
Ben

1
죄송합니다 bind-key. 다른 도서관에서 왔습니다. 내장 define-key함수를 대신 사용하도록 답변을 변경했습니다 .
glucas

4

Library Isearch +를 사용하면 쉽게 할 수 있으며, 즉시 켜고 끌 수도 있습니다.

  • non-nil 옵션 isearchp-set-region-flag은 isearch를 종료 할 때 마지막 검색 대상 주변의 영역 (선택)을 자동으로 설정합니다.

  • isearch 중에 isearchp-toggle-set-region바인드 된 명령이 M-s M-SPC옵션을 토글 isearchp-set-region-flag합니다.

  • 명령 set-region-around-search-target은 마지막 검색 대상 주변 영역을 수동으로 설정합니다. (따라서 옵션을 설정하지 않아도 자동으로 선택되지 않으면 수동으로 수행 할 수 있습니다.)


Library Replace +를 사용하면 같은 작업수행 할 수 있습니다 query-replace. 마지막 교체 항목 주변에 영역을 배치 (즉, 선택)합니다. 동일한 옵션 인을 사용하여 isearchp-set-region-flag이를 제어하며 명령 set-region-around-search-target도 동일한 효과를 갖습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.