Domanda

Emacs Lisp ha replace-string ma non ha replace-char.Voglio sostituire "tipografico" virgolette curve (Emacs codice per questo personaggio è esadecimale 53979) con regolare ASCII citazioni, e posso farlo con:

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

Penso che sarebbe meglio replace-char.

Qual è il modo migliore per fare questo?

È stato utile?

Soluzione

Perché non usare

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

o

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

come consigliato nella documentazione per sostituire la stringa?

Altri suggerimenti

Questo è il modo che ho per sostituire i caratteri in elisp:

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

dà:

"John’s"

Si noti che questa funzione non accetta i caratteri della stringa.Il primo e il secondo argomento deve essere un carattere letterale (utilizzando il ? notazione o string-to-char).

Anche questa funzione può essere distruttivo se opzionale inplace l'argomento è non nullo.

che sarebbe sicuramente meglio con la sostituzione-char.Un modo per migliorare il mio codice?

È davvero lento al punto in cui è importante?Il mio elisp di solito è incredibilmente inefficiente e non ho mai notate.(Io uso solo per gli strumenti dell'editor, però, YMMV se si sta costruendo la prossima MS live search con esso.)

Inoltre, la lettura di documenti:

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

Questa risposta è probabilmente concesso in licenza GPL ora.

Che dire di questo

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

Una volta che avete nel vostro dotemacs, è possibile incollare elisp codici di esempio (dai blog ecc) per il buffer scratch e quindi premere immediatamente C-M-\ (rientro correttamente) e quindi M-x la mia-sostituire-smart-citazioni (per fissare virgolette) e, infine, C-x C-e (per eseguirlo).

Trovo che il ricci preventivo è sempre hexa 2019, siete sicuri che sia 53979 nel tuo caso?È possibile controllare caratteri nel buffer con il C-u-C x =.

Penso che si può scrivere "’" al posto di "\x2019" nella definizione del mio-sostituire-smart-preventivi e va bene.È solo per essere sul sicuro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top