Emacs 버퍼에서 단어의 모든 발생을 강조하는 방법은 무엇입니까?


83

Notepad ++에는 편리한 기능이 있습니다. 텍스트에서 단어 (반드시 키워드가 아님)를 선택하면 해당 단어가 텍스트 전체에서 강조 표시됩니다. Emacs에서도 가능합니까? 그렇다면 어떻게?

반드시 Notepad ++와 똑같이 작동 할 필요는 없습니다 (즉, 선택을 통해). 이상적으로는 커서 아래의 모든 단어가 강조 표시되도록하는 키 바인딩을 설정하고 싶습니다.

강조 표시가 영구적 인 경우, 즉 강조 표시된 단어에서 포인트를 멀어지게 하면 강조 표시가 제거 되지 않는 것이 좋습니다.

또한 사용자 지정 키 바인딩을 사용하여 강조 표시 간을 탐색 할 수있는 솔루션이있는 경우 유용 할 것입니다.

답변:


41

아마도 http://nschum.de/src/emacs/highlight-symbol/의 highlight-symbol.el 이 당신이 찾고있는 것입니다.

대체 텍스트


1
나는 그것을 시도했지만 작동하지 못했습니다-emacs는 "Symbol의 value as variable is void : highlight-symbol-idle-delay"에 대해 불평했습니다.
Headcrab

1
나는 그 특별한 문제가 있었다. 결국 전체 (defcustom highlight-symbol-idle-delay ...) 부분을 주석 처리하고 (defvar highlight-symbol-idle-delay ...) 이전에 (defun highlight-symbol-update-timer ...) 이동합니다. ) 오류를 피할 수 있습니다.
polyglot

1
네, 마침내 똑같은 일을했습니다.
Headcrab

1
죄송합니다.이 작업을 위해 외부 패키지를 추가 할 필요가 없습니다. jrockway의 게시물을 참조하십시오.
mefiX 2010

4
@mefiX : 내장 함수는 일회용으로 사용하기에 좋습니다. 외부 패키지는 단 한 번의 키 입력으로 커서 아래에있는 단어를 강조 표시하는 편의성을 추가 할뿐만 아니라 다른 단어의 강조 표시 색상을 자동으로 변경합니다. 예, 내장 기능을 사용하여 할 수 있지만 자주하는 일이라면 몇 초와 키 입력 대신 몇 분과 수백 번의 키 입력을 낭비하는 이유는 무엇입니까? 반대표를 던지는 사람은 편협 해 보입니다. 그렇지 않더라도 누군가이 패키지가 유용하다고 생각할 수 있습니다.
polyglot

85

hi-lock제안 좋다. M-x그래도 버전 을 사용하는 것이 더 쉽다고 생각합니다 .

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrasehighlight-regexp대소 문자를 무시하고 임의의 공백과 일치하도록 정규식의 공백을 변환 하는 약간의 설탕 입니다. 능숙한.


23
하이라이트를 지우려면 다음을 사용하십시오 : M-x unhighligh-regexkey-chord : C-x w r... 또한 하이라이트 문구 는 대소 문자를 완전히 구분하지 않습니다. 만 초기 (단어) 소문자 AE 만든 경우를 구분. (나는 그것이 fred대 를 다루기 위해 의도되었다고 생각한다 Fred) .. 예를 들어 다음과 같은 정규식을 생성한다 :[Cc]at[ ]+[Dd]og
Peter.O

감사합니다. 차이점에 대한 귀하의 의견은 기본 제공 도움말보다 더 명확합니다.
Joshua Goldberg

1
참고 : 오타 : (누락 및 ) unhighlight-regexp대신 입력 해야합니다 . unhighligh-regextp
Zelphir Kaltstahl

36

을 입력 C-s한 다음 현재 단어를 입력하거나 입력 C-w합니다. 보너스로 이제 C-s다시 눌러 단어를 검색 할 수 있습니다 .

이를 증분 검색 이라고 합니다.


11
그만한 가치에 대해서는 이제 질문의 의도를 깨달았습니다. 이동, 입력 등과 같은 다른 작업을 수행하는 경우에도 "영구적으로"(꺼질 때까지) 강조 표시된 발생을 원합니다.이를 위해 Cs (증분 검색 ) 작동하지 않습니다 (하이라이트는 "임시"입니다. 버퍼에서 이동할 수는 있지만 새로운 편집 작업을 수행하기 어렵습니다). 나는 M-x highlight-regexp솔루션을 사용하고 upvoted 했습니다 (그리고 바로 가기에 바인딩했습니다).
ShreevatsaR

15

내가 사용하는 것은 유휴 강조 표시입니다.

http://www.emacswiki.org/emacs/IdleHighlight

Mx idle-highlight는 포인트 아래의 단어 버퍼에서 모든 발생을 강조하는 유휴 타이머를 설정합니다.

모든 프로그래밍 모드에 대해 활성화하려면 다음에서 수행하십시오 ~/.emacs.d/init.el.

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

람다의 내부 후크와 일부 불일치가 있습니다. 아마도 defun이라고 부르는 것을 고려하십시오.
Darryl Hebbes 2015 년

10

라이트 기호 는 모든 기호 지점이 끝났음을 강조합니다.

또는 regexp와 일치하는 모든 행을 나열 하는 발생 을 사용할 수 있습니다 . 클래스의 모든 함수를 빠르게 확인하는 것이 유용합니다.


이것은 매우 멋져 보이지만 같은 기호 또는 같은 이름을 가진 다른 기호를 찾았는지 어떻게 알 수 있습니까?
HelloGoodbye 2015-06-26

6

http://www.emacswiki.org/emacs/msearch.el을 사용해보십시오 . 커서로 선택한 모든 텍스트가 강조 표시됩니다. 강조 할 문자열 위로 드래그해야합니다. 따라서 강조 표시를 변경하지 않고 선택을 쉽게 변경할 수 있습니다.

문자열의 강조 표시를 유지하려면 고정 할 수 있습니다.

버퍼를 다른 버퍼에 종속시킬 수 있습니다. 마스터 버퍼에서 선택한 텍스트는 슬레이브 버퍼에서도 강조 표시됩니다. 이는 버퍼를 비교하는 데 유용합니다. 또한 다른 버퍼의 텍스트를 조사하는 동안 한 버퍼에 메모를 작성하는 데 유용합니다. 노트 버퍼에 키워드 모음이있을 수 있습니다. 이러한 키워드 위로 드래그하면 조사 된 텍스트에서 해당 키워드가 강조 표시됩니다.

나는 지금이 물건을 몇 년 동안 사용하고 있습니다. 나는 최근에 냉동을 추가했습니다. 그래서 뭔가 고장 났을 수도 있습니다. 이 경우 http://www.emacswiki.org/emacs/msearch 또는 여기 에 메모를 남겨주세요 .


5

이것은 당신이 원하는 것만 큼 좋지 않을 수도 있지만

(global-hi-lock-mode 1)

당신의 .emacs파일 당신은 입력 할 수 있습니다 C-x w h REGEX <RET> <RET>모든 차례 나오는 강조 REGEX하고, C-x w r REGEX <RET>다시 unhighlight 할 수 있습니다. 다시 말하지만, 당신이 원하는만큼 우아하지는 않지만 작동 할 것입니다.



5

아무도 symbol-overlay모드를 언급하지 않았습니다 . 기본적으로 더 나은 재 작성입니다 highlight-symbol-mode. 에서와 같이 "Better"에는 원래 강조 표시 기호의 버그가 없습니다 (예 : 일시적인 강조 표시가 고정되거나 강조 표시된 단어 내에서 이동하기 위해 일시적인 강조 표시가 사라지거나와 같은 기호를 강조 표시 할 수 없음 *). , 더 나은 통합, 유지합니다. README의 "장점"단락을 참조하십시오.

당신과 함께, 평소와 같이 설치할 수 있습니다 M-xpackage-install (와 사전 업데이트 패키지 목록에 있는지 확인하십시오 package-list-packages) . 참고로, 하단에 모드를 활성화하고 원하거나 원하지 않는 몇 가지 고급 기능을 비활성화하는 데 사용하는 코드를 첨부했습니다.

Notepad ++에는 편리한 기능이 있습니다. 텍스트에서 단어 (반드시 키워드가 아님)를 선택하면 해당 단어가 텍스트 전체에서 강조 표시됩니다. Emacs에서도 가능합니까? 그렇다면 어떻게?

를 활성화 overlay-symbol하면 시간 초과 후 커서를 놓은 모든 단어에 대해 화면에 항목이 표시됩니다 (기본 시간 초과는 0.5 초이며 symbol-overlay-idle-time변수 로 구성 가능 ) . 단어가 강조 표시되지 않으면 화면에 하나의 일치 항목 (커서가 있는 단어 ) 만 있으므로 강조 표시 할 필요가 없음을 의미합니다.

강조 표시가 영구적 인 경우, 즉 강조 표시된 단어에서 포인트를 멀어지게하면 강조 표시가 제거되지 않는 것이 좋습니다.

커서 아래의 단어를 영구적으로 강조 표시하는 기능이 있습니다. symbol-overlay-put 있습니다. 강조 표시를 해제하려면 다시 한 번 호출하십시오.

내 구성 예제에서는 Logo+ `키에 바인딩되어 있습니다.


(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
  (unless (or (minibufferp)
              (derived-mode-p 'magit-mode)
              (derived-mode-p 'xref--xref-buffer-mode))
    (symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
  symbol-overlay-mode                                ;; name of the minor mode
  enable-symbol-overlay-mode)
(global-symbol-overlay-mode)                         ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-ignore-functions nil)           ;; don't ignore keywords in various languages
(setq symbol-overlay-map (make-sparse-keymap))       ;; disable special cmds on overlays

symbol-overlay-mode내가 찾던 바로 그 것이었다. symbol-overlay-putF 키에 바인딩 하면 파일 전체에서 특정 단어의 강조 표시를 전환하는 데 편리합니다.
Matt Kneiser

2

라이브러리의 명령을 highlight.el 사용하면 오버레이 또는 텍스트 속성을 사용하여 정규 표현식 (이 경우 기호)과 일치하는 텍스트를 강조 표시 할 수 있습니다. 발생 사이를 순환 할 수 있습니다. 강조 표시는 일시적이거나 영구적 일 수 있습니다. (추가 정보) .


2

iedit를 사용해보십시오 . 포인트에서 단어를 강조 표시하고 모든 항목을 쉽게 편집 할 수 있습니다. 추가 키 입력 (C- ')을 사용하면 해당 단어가없는 모든 행을 숨 깁니다. 매우 편리합니다!


0

강조 표시되지 않을 수 있지만 입력 할 필요없이 단어를 검색합니다.

검색하려는 단어 인 CS에 도달하면 CW로 전체 단어를 읽은 다음 CS를 사용하여 검색합니다. 내 Emacs에서는 문서의 모든 인스턴스도 강조 표시합니다.


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