문제

Emacs Lisp에는 replace-string 하지만 없다 replace-char."인쇄상의" 둥근 따옴표(이 문자에 대한 Emacs 코드는 16진수 53979)를 일반 ASCII 따옴표로 바꾸고 싶습니다. 다음을 사용하여 그렇게 할 수 있습니다.

(replace-string (make-string 1 ?\x53979) "'")

내 생각엔 그게 더 좋을 것 같아 replace-char.

이를 수행하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

왜 그냥 사용하지 않는가?

(replace-string "\x53979" "'")

또는

(while (search-forward "\x53979" nil t)
    (replace-match "'" nil t))

교체 문자열에 대한 문서에서 권장하는 대로?

다른 팁

이것이 elisp에서 문자를 바꾸는 방법입니다.

(subst-char-in-string ?' ?’ "John's")

다음을 제공합니다:

"John’s"

이 함수는 문자를 문자열로 허용하지 않습니다.첫 번째와 두 번째 인수는 리터럴 문자여야 합니다( ? 표기법 또는 string-to-char).

또한 이 기능은 선택 사항인 경우 파괴적일 수 있습니다. inplace 인수가 0이 아닙니다.

확실히 replacement-char를 사용하는 것이 더 나을 것입니다.내 코드를 개선할 수 있는 방법이 있나요?

실제로 중요한 지점까지 느린가요?내 elisp는 일반적으로 엄청나게 비효율적이며 전혀 눈치 채지 못합니다.(저는 편집 도구로만 사용합니다. 다음 MS 실시간 검색을 구축하는 경우 YMMV입니다.)

또한 문서를 읽으십시오.

This function is usually the wrong thing to use in a Lisp program.
What you probably want is a loop like this:
  (while (search-forward "’" nil t)
    (replace-match "'" nil t))

이 답변은 아마도 현재 GPL 라이센스일 것입니다.

이건 어때?

(defun my-replace-smart-quotes (beg end)
  "replaces ’ (the curly typographical quote, unicode hexa 2019) to ' (ordinary ascii quote)."
  (interactive "r")
  (save-excursion
    (format-replace-strings '(("\x2019" . "'")) nil beg end)))

dotemacs에 해당 내용이 있으면 elisp 예제 코드(블로그 등)를 스크래치 버퍼에 붙여 넣은 다음 즉시 C-M-\(제대로 들여쓰기 위해)를 누른 다음 M-x my-replace-smart-quotes(수정하기 위해)를 누르십시오. 둥근 따옴표) 그리고 마지막으로 C-x C-e(실행용)입니다.

둥근 따옴표는 항상 16진수 2019인 것으로 나타났습니다. 귀하의 경우 53979인 것이 확실합니까?C-u C-x =를 사용하여 버퍼의 문자를 확인할 수 있습니다.

my-replace-smart-quotes 정의에서 "\x2019" 대신 "'"를 쓰면 괜찮을 것 같습니다.단지 안전한 편에 서기 위한 것뿐입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top