Emacs - show-paren-mode 지역 변경

Emacs - show-paren-mode 지역 변경

나는 Emacs의 show-paren-mode를 좋아하지만 닫는 괄호의 강조 표시 동작을 변경하고 싶습니다.

즉, 점이 오른쪽 괄호 위에 있을 때 왼쪽 괄호가 강조 표시되기를 원합니다. 기본 동작은 점이 닫는 괄호 다음 문자 위에 있을 때 여는 괄호를 강조 표시합니다.

이거 바꾸기 쉽나요? 또한 show-paren-mode 동작을 변경하지 않고 유지하면 얻을 수 있는 잠재적인 이점에도 관심이 있습니다.

답변1

Emacs 24.3부터 이 기능은 상위 표시 모드에서 사용할 수 없습니다.

다음은 커서 뒤가 아닌 앞의 닫는 괄호와 일치하도록 Show Paren 패턴을 조정하는 완전히 테스트되지 않은 코드(브라우저에 직접 입력)입니다.

(defadvice show-paren-function 
  (around show-paren-closing-before
          activate compile)
  (if (eq (syntax-class (syntax-after (point))) 5)
      (save-excursion
        (forward-char)
        ad-do-it)
    ad-do-it))

또한 커서 앞의 닫는 괄호를 선택하지만 커서가 닫는 괄호 뒤의 닫는 괄호 위에 있으면 커서 아래의 닫는 괄호가 우선합니다. 커서가 이상해지기 전에 닫는 괄호를 보지 않도록 이 문제를 수정했습니다(이와 같은 조잡한 해킹으로 수행할 수 있음 (flet ((char-syntax …)) ad-do-it)).

답변2

25.1에는 이 작업을 수행하는 변수가 있습니다.

(setq show-paren-when-point-inside-parent t)

답변3

와 더 잘 작동하도록 @Gilles의 답변을 수정했습니다 . 이렇게 하면 악한 상태 가 될 수 없거나 evil닫는 괄호를 강조 표시하기 전에 추가 제약 조건이 추가됩니다 .emacsinsertreplace

(defadvice show-paren-function
  (around show-paren-closing-before
          activate compile)
  (if (and
       (eq (syntax-class (syntax-after (point))) 5)
       (not (memq evil-state '(emacs insert replace))))
      (save-excursion
        (forward-char)
        ad-do-it)
    ad-do-it))

(이것은 실제로 사악한 기본 구성에서 예상되는 동작이지만 어떤 이유로 내 Emacs 26.3 설정에서는 작동하지 않습니다.)

답변4

다음과 같은 값으로 자신만의 기능을 제공할 수 있습니다 show-paren-data-function.

,----
| show-paren-data-function is a variable defined in `paren.el'.
| Its value is show-paren--default
| 
|   This variable can be risky when used as a file-local variable.
| 
| Documentation:
| Function to find the opener/closer at point and its match.
| The function is called with no argument and should return either nil
| if there's no opener/closer at point, or a list of the form
| (HERE-BEG HERE-END THERE-BEG THERE-END MISMATCH)
| Where HERE-BEG..HERE-END is expected to be around point.
 ----

영감을 얻으려면 의 정의를 참조하세요 show-paren--default.

에 관해서는이점: 오른쪽 대괄호를 추가할 때마다 일치하는 왼쪽 대괄호가 표시됩니다. 말이 되지 않나요?

관련 정보