Вопрос

Emacs Lisp имеет replace-string но не имеет replace-char.Я хочу заменить "типографские" фигурные кавычки (код Emacs для этого символа - шестнадцатеричный 53979) обычными кавычками ASCII, и я могу сделать это с помощью:

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

Я думаю, что было бы лучше с replace-char.

Каков наилучший способ сделать это?

Это было полезно?

Решение

Почему бы просто не использовать

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

или

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

как рекомендовано в документации для replace-string?

Другие советы

Именно так я заменяю символы в elisp:

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

дает:

"John’s"

Обратите внимание, что эта функция не принимает символы в виде строки.Первый и второй аргументы должны быть буквальными символами (либо с использованием ? обозначение или string-to-char).

Также обратите внимание, что эта функция может быть разрушительной, если необязательный inplace аргумент не равен нулю.

что, безусловно, было бы лучше с replace-char .Есть какой-нибудь способ улучшить мой код?

Действительно ли это медленно до такой степени, что это имеет значение?Мой elisp обычно смехотворно неэффективен, и я никогда этого не замечаю.(Однако я использую его только для инструментов редактирования, YMMV, если вы создаете с его помощью следующий MS live search.)

Кроме того, чтение документов:

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 (для запуска).

Я нахожу, что фигурная кавычка всегда имеет значение hexa 2019, вы уверены, что в вашем случае это 53979?Вы можете проверить символы в буфере с помощью C-u C-x =.

Я думаю, вы можете написать "’" вместо "\x2019" в определении my-replace-smart-quotes и все будет в порядке.Это просто на всякий случай.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top