【问题标题】:How to define an Emacs command that uses `replace-string` for a specific string如何为特定字符串定义使用“替换字符串”的 Emacs 命令
【发布时间】:2011-08-16 03:30:37
【问题描述】:

在 Emacs 中,我正在处理一个文本文档,将 unicode 纯文本转换为 LaTeX。

我想运行几组正则表达式,例如

M-x replace-string ± RET \pm RET
M-x replace-string µ RET  \textmu 

如何保存这些正则表达式以便重复运行?

谢谢

【问题讨论】:

  • 我不知道这里的全部内容,但是您是否考虑过切换到支持 unicode 的 TeX 引擎?我发现 XeLaTeX 是一个很好的选择。
  • 我一直在使用 xelatex,但它们仍然没有出现。例如,我尝试渲染 ± is $\pm$ 而第一个没有出现
  • 你用的是什么字体?可能只有您的数学字体具有 ± 字形。我用 minion pro 试了一下,输入为 unicode 时效果很好。

标签: regex emacs


【解决方案1】:

我通常喜欢编写自定义命令,这是您第一次替换的命令:

(defun replace-plus-minus ()
  (interactive)
  (replace-string "±" "\\pm" nil (point-min) (point-max)))

但是,您也可以使用键盘宏。查看wikidocs

基本上,你会这样做:

C-x ( M-x replace-string ± RET \pm RET C-x )

然后你可以命名它,并将它保存到你的 .emacs 中:

M-x name-last-kbd-macro
M-x insert-kbd-macro

【讨论】:

  • 谢谢。我很欣赏自定义命令howto。我在录制宏时遇到的问题是我不确定如何使用键盘输入 ± 字符。我只是从其他地方粘贴它。而且,从其他地方粘贴它会杀死宏的录制,或者至少让它没有做我想要的。
  • 粘贴应该可以工作,只要 Emacs 接收到 pasted 字符,而不是“粘贴这个”命令字符(或鼠标点击)。你如何做到这一点取决于你的环境(但在 shell 中运行 emacs -nw 可能会更容易)。
  • 或者更简单,只需要在录制宏时输入任何占位符,然后键入C-x C-k e RET RET 来编辑宏,并将占位符更改为正确的字符。在编辑器中,您没有录制的限制,因此您可以愉快地拉动或粘贴内容。
【解决方案2】:

您是否尝试过创建macro

创建宏后,您还可以save it 到您的 .emacs 文件 此外,您可以运行 M-x replace-string 并按两次回车键,它将运行您的最后一个命令。

【讨论】:

  • 谢谢。我确实尝试过使用宏,但请参阅我的 cmets 到另一个答案,了解为什么它不起作用。
  • 您可能必须确保文件支持 unicode:emacswiki.org/emacs/UnicodeEncodingFind。然后找到正确的 emacs 组合键来获取该字符(或者只是粘贴进去应该可以)。您也可以使用临时字符运行宏,使用上述方法将其保存到 bash,然后修改宏(保存后它位于 .emacs 文件的底部。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多