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

Lit*_*ral 2 emacs latex auctex

在这里总Emacs noob.所以现在我正在研究Emacs中一个相当大的LaTeX项目,其中有几个地方我需要使用makeidx包索引一些单词.因为我也希望索引的单词是粗体的,所以我创建了自己的命令\ind{},这会使参数变为粗体和索引.但是现在我对这个命令不满意,所以我想改变\ind{whatever}我文本中的每个实例\textbf{whatever}\index{whatever by default}.

事情是我确切地知道我想要什么:

  1. 浏览文本,查找任何实例\ind{\textbf{使用替换search-and-replace
  2. \ind在内存中保存(在这种情况下为"不管")的参数
  3. 问我的用户应该是什么参数\index.默认情况下(通过敲击回车),它应该是第一个参数,但我也可以改变主意并输入不同的东西(在这种情况下,"默认为").如果没有输入(" "例如只有空格)则停止程序.
  4. 写下来\index{,新论点和}.
  5. 转到文本中的下一个出现.

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

我希望我很清楚,谢谢你的耐心等待!

Sea*_*ean 6

这种做法对我来说似乎过于模糊,但它对于一次性工作来说似乎已经足够了......

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,如果你想避免这个步骤.