Question

Emacs Lisp a replace-string mais n'a pas de replace-char . Je souhaite remplacer "& typ;" " guillemets bouclés (le code Emacs pour ce caractère est un hexadécimal 53979) avec des guillemets ASCII normaux, et je peux le faire avec:

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

Je pense que ce serait mieux avec replace-char .

Quel est le meilleur moyen de le faire?

Était-ce utile?

La solution

Pourquoi ne pas utiliser simplement

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

ou

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

comme recommandé dans la documentation pour replace-string?

Autres conseils

C’est ainsi que je remplace les caractères dans elisp:

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

donne:

"John’s"

Notez que cette fonction n'accepte pas les caractères en tant que chaîne. Les premier et deuxième arguments doivent être des caractères littéraux (en utilisant la notation ? ou chaîne-à-caractères ).

Notez également que cette fonction peut être destructive si l'argument facultatif inplace n'est pas nul.

  

qui serait certainement mieux avec replace-char. Un moyen d'améliorer mon code?

Est-ce vraiment lent au point où cela compte? Mon elisp est généralement ridiculement inefficace et je ne le remarque jamais. (Je ne l’utilise que pour les outils d’édition, cependant, YMMV si vous construisez la prochaine recherche MS Live avec.)

Aussi, lisez la documentation:

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

Cette réponse est probablement sous licence GPL maintenant.

Qu'en est-il de cette

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

Une fois que vous avez cela dans votre dotemac, vous pouvez coller des exemples de codes elisp (blogs, etc.) dans votre mémoire tampon de travail, puis appuyer immédiatement sur CM- \ (pour le mettre correctement en retrait), puis sur Mx my-replace-smart-quotes. (pour corriger les guillemets intelligents) et enfin Cx Ce (pour l’exécuter).

Je trouve que la citation bouclée est toujours hexa 2019, êtes-vous sûr qu'il s'agit de 53979 dans votre cas? Vous pouvez vérifier les caractères dans la mémoire tampon avec C-u C-x =.

Je pense que vous pouvez écrire "& # 8217;". à la place de " \ x2019 " dans la définition de my-replace-smart-quotes et tout va bien. C'est juste pour être prudent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top