emacs - 如何修改 emacs 的搜索和替换以执行更复杂的任务?

标签 emacs latex auctex

这里是 Emacs 新手。所以现在我正在使用 Emacs 进行一个相当大的 LaTeX 项目,其中有几个地方我需要使用 makeidx 包来索引一些单词。因为我还希望索引词为粗体,所以我创建了自己的命令 \ind{},这将使参数变为粗体和索引。但是现在我对这个命令不满意所以我想通过 \textbf{whatever}\index{whatever 默认更改我文本中的每个 \ind{whatever} 实例

关键是我很清楚自己想要什么:

  1. 浏览文本,查找 \ind{ 的任何实例并使用 search-and-replace 替换为 \textbf{/li>
  2. \ind 的参数(在本例中为“whatever”)保存在内存中
  3. 问我\index 的参数应该是什么。默认情况下(按回车键),它应该是第一个参数,但我也可以改变主意并输入不同的内容(在本例中为“默认情况下”)。如果没有输入(例如只有一个空格 "")停止程序。
  4. 写下 \index{、新参数和 }
  5. 转到文本中的下一个位置。

但是,唉!我不知道如何做到这一点,所以我需要别人的帮助。如果要花太多时间来解释如何做这样的事情,你能给我一些关于编写我自己的函数的教程吗?

希望我说清楚了,感谢您的耐心等待!

最佳答案

这种方法对我来说似乎不太正统,但它确实有效并且似乎足以完成一次性工作......

replace-regexpquery-replace-regexp (C-M-%) 的替换文本中,一个较新的转义序列是 \,(...),其中 ... 可以是任何 Lisp 表达式。有一个 Lisp 函数 read-from-minibuffer 可以读取用户输入的任意文本,默认值可选。因此:

C-M-%:开始query-replace-regexp

\\ind{\([^}]+?\)}:要搜索的模式。

\\textbf{\1}\\index{\,(read-from-minibuffer "index content?"\1)}:替换文本。系统将提示用户输入 \index{} 元素后大括号中的文本,使用 \ind{} 元素后大括号之间的原始文本作为默认值。

请注意,在使用 query-replace-regexp 时,您必须通过在每个选项后键入 y 来确认每个选项。如果您想避免此步骤,请使用 M-x replace-regexp

关于emacs - 如何修改 emacs 的搜索和替换以执行更复杂的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5372718/

相关文章:

emacs - Paredit 不会删除 paredit-backward-kill-word 上的右括号

latex - knitr block 选项来控制行距,输出中的字体大小

python - 如何在 matplotlib 绘图中删除 LaTeX 风格数学中的奇怪空间

emacs - 让 Emacs 识别自定义数学定界符,以便它可以相应地为面部着色

emacs - 在 ubuntu 的 emacs 24 中安装 ECB

emacs - 无法在 Emacs 中启动 `lein` REPL

Emacs Lisp : #s does not create a new hash table each time

sql - 哪些软件包可用于在LaTeX中排版SQL?

emacs - 设置 AUCTeX : LaTeX-mode-hook does not work