아 예. Isearch는 입력 한 키를 읽고 검색 한 다음 현재 버퍼에서isearch-mode-map
호출합니다 .
Isearch는 모양에도 불구하고 미니 버퍼를 사용하지 않습니다 . 에코 영역을 사용합니다. 즉, 입력 한 문자의 에코를 포함하여 실제로 출력 메시지가 있습니다.
이것은 당신이 요구하는 것을해야합니다 :
(defun mydelete ()
"Delete the failed portion of the search string, or the last char if successful."
(interactive)
(with-isearch-suspended
(setq isearch-new-string
(substring
isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
isearch-new-message
(mapconcat 'isearch-text-char-description isearch-new-string ""))))
(define-key isearch-mode-map (kbd "DEL") 'mydelete)
(BTW, 귀하의 질문에 delete
문자가 있지만 DEL
백 스페이스 문자 인 을 썼습니다 .)
@Malabarba가 주석에서 지적한 것처럼 새 검색 문자열을 ""
(빈 문자열) with-isearch-suspended
로 설정하면 빈 검색 문자열로 시작하는 대신 마지막 검색 문자열을 검색하여 다시 시작합니다.
이것은 일반적으로 의 " 기능 "입니다 with-isearch-suspended
. 그러나 때로는 검색을 위해 검색 문자열을 비우고 싶을 수도 있으므로 isearch + .el 버전 with-isearch-suspended
에서 variable을 추가 하여이를 제어합니다. 당신이 만약 바인드에 있다고 하고 설정 하기 위해 다음 빈 검색 문자열로 이력서를 검색 할 수 있습니다.isearchp-if-empty-prefer-resuming-with-last
nil
isearch-new-string
""
따라서 Isearch +를 사용 하면이 정의로 원하는 것을 수행 할 수 있습니다.
(defun mydelete ()
"Delete the failed portion of the search string, or the last char if successful."
(interactive)
(let ((isearchp-if-empty-prefer-resuming-with-last nil))
(with-isearch-suspended
(setq isearch-new-string
(substring
isearch-string 0 (or (isearch-fail-pos) (1- (length isearch-string))))
isearch-new-message
(mapconcat 'isearch-text-char-description isearch-new-string "")))))
나도 이제 이맥스 24.4 내가 제기 한 회귀, 도입 것을 알 수 이맥스 버그 # 20466를 들어, 바인딩을 수단 DEL
으로하는 것은 isearch-mode-map
충분하지입니다. 에 대해 별도의 바인딩을 <backspace>
추가했습니다 DEL
. 이는 <backspace>
더 이상 DEL
Isearch로 번역되지 않음을 의미합니다 (그러나 여전히 Emacs에서는 일반적으로 번역됩니다).
그래서 당신은 백 스페이스 키를 사용하면 이맥스 24.4 물었다 이상 다음 방금 바인딩 할 수 없습니다 일을하고 싶은 경우 DEL
에 mydelete
. 당신은 바인딩 할 필요가 <backspace>
로 mydelete
. 멍청한, AFAICT, n'arrete pas le progres에 mais ...
Isearch +에 비슷한 명령을 추가하고 C-M-l
( Icicles 에서 완료 불일치를 제거하는 데 사용 된 것과 동일한 키)에 바인딩했습니다 .
너무주의하십시오 C-g
불일치가있을 때 isearch 기능도, 일치하지 않는 텍스트를 제거합니다. (그러나 C-g
검색이 성공하면 효과가 있습니다.)
나는 Isearch + 가 비슷한 라인을 따라 선택적인 행동을했다고 언급 했어야 했다. M-k
Isearch 중 옵션의 값으로 제어되는 3 가지 동작 중 하나를 전환합니다 isearchp-drop-mismatch
.
replace-last
-현재 입력이 일치하지 않는 마지막 텍스트를 대체합니다. 불일치하더라도 항상 마지막 입력을 볼 수 있습니다. 그리고를 사용하여 편집 할 수 있습니다 M-e
.
nil
-이전 입력에 불일치 부분이 있어도 현재 입력이 추가됩니다.
다른 것-일치하지 않는 경우 현재 입력이 무시됩니다 (제거됨). 검색 문자열은 항상 일치합니다.