首页 > 解决方案 > 在 emacs 中,如何替换文本块中的所有重音符号?

问题描述

假设我有:

“Aliud est grâtiam habêre, aliud gratiam referre。Nôn omnês quî tibi prô beneficiîs grâtiäs agunt, ipsî posteâ, sî opus fuerit, gratiam tibi referent。Facile est grâtiäs agere pro beneficiîs, nec vërô quidquam difficilius esse vidētur quam beneficiôrum meminisse。”</p>

但我想要

“Aliud est gratiam habēre, aliud gratiam referre。Nōn omnēs quī tibi pro beneficiīs grātiās agunt, ipsī posteā, sī opus fuerit, gratiam tibi referent。Facile est gratiās agere pro beneficiīs, nec vērō quidquam difficilius esse vidētur quam beneficiōrum meminisse。”</p>

即 ä -> ā 等 ëê -> ē 等

我在想一个大键盘宏做很多搜索和替换,但有更好的方法吗?

标签: emacs

解决方案


在许多情况下,它可以节省大量编写 Emacs lisp 函数的时间,而不是存储 kbd-macros 等。Emacs 带有出色的调试工具。例如,使用以下解决方案调用M-x edebug-eval-top-level-form RET 您的示例:

(defun accent-replace ()
  "Does what I want"
  (interactive "*")
  (dolist (ele (list ?â ?ä ?ê ?ë ?î ?ô))
    (setq elt (char-to-string ele))
    (goto-char (point-min))
    (while (search-forward elt nil t 1)
      (replace-match
       (char-to-string
    (pcase ele
      (`?â ?ā)
      (`?ä ?ā)
      (`?ê ?ē)
      (`?ë ?ē)
      (`?î ?ī)
      (`?ô ?ō)))))))

推荐阅读