Frage

Emacs Lisp hat replace-string hat aber keine replace-char. Ich möchte „typographische“ typografische Anführungszeichen ersetzen (Emacs-Code für dieses Zeichen ist hexadezimal 53979) mit regelmäßigen ASCII zitiert, und ich kann dies mit:

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

ich denke, es wäre mit replace-char besser sein.

Was ist der beste Weg, dies zu tun?

War es hilfreich?

Lösung

Warum nicht einfach verwenden

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

oder

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

wie in der Dokumentation empfohlen für ersetzen-string?

Andere Tipps

Das ist die Art, wie ich Zeichen in elisp ersetzen:

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

gibt:

"John’s"

Beachten Sie, dass diese Funktion akzeptiert keine Zeichen als String. Die erste und zweite Argument ist ein Literal Charakter (entweder die ? Notation oder string-to-char verwenden).

Beachten Sie auch, dass diese Funktion destruktiv sein kann, wenn das optionale inplace Argument nicht-Null ist.

  

, die sicherlich mit replace-char besser wären. Jede Art und Weise meines Code zu verbessern?

Ist es tatsächlich verlangsamen zu dem Punkt, wo es darauf ankommt? Mein elisp ist in der Regel lächerlich ineffizient und ich merke, nie. (Ich kann es nur für Editor-Tools verwenden aber YMMV, wenn Sie das nächste MS Gebäude sind mit ihr leben suchen.)

Auch das Lesen Sie die Dokumentation:

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))

Diese Antwort wahrscheinlich jetzt lizenziert ist GPL.

Was ist das

(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)))

Sobald Sie, dass in Ihrem dotemacs, können Sie elisp Beispiel-Codes einfügen (von Blogs und usw.) auf Ihren Arbeitspuffer und dann sofort CM- \ drücken (um es einrücken richtig) und dann Mx my-ersetzen-smart-Zitate (beheben typografische Anführungszeichen) und schließlich Cx Ce (laufen sie).

Ich finde, dass das geschweiften Zitat ist immer hexa 2019, sind Sie sicher, dass es 53.979 in Ihrem Fall? Sie können überprüfen Zeichen in Puffer mit C-u C-x =.

Ich glaube, Sie können anstelle von ‚\ x2019‘ in der Definition von my-ersetzen-smart-Zitaten und in Ordnung sein „‘“schreiben. Es ist nur auf der sicheren Seite zu sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top