【发布时间】:2016-03-13 11:20:48
【问题描述】:
一些 emacs 函数将用户输入字符串作为参数。例如,M-x search-forward,接受用户输入字符串并在缓冲区中搜索它。
有一些我经常使用的搜索字符串。因此,我想创建自己的函数并将这个搜索字符串硬编码为搜索转发的参数。对于这个函数 search-forward,这很容易,因为这个函数的函数参数列表有一个用于搜索字符串的参数,如在其 defun 声明中:(search-forward STRING &optional BOUND NOERROR COUNT)。我可以将字符串传递给 STRING 参数。
但是对于其他一些进行类似字符串搜索的函数,它没有将搜索字符串指定为参数。例如,在 Magnar 的多光标库中,mc/mark-all-in-region-regexp 是一个搜索用户提供的正则表达式字符串的函数。我想制作自己的快捷函数,它接受一个固定的字符串,比如“abc”。但是,mc/mark-all-in-region-regexp 的参数列表没有搜索字符串的参数。这是函数参数列表:(mc/mark-all-in-region-regexp BEG END)。它只有区域开始和结束位置的参数。但是,如果您将其作为 M-x 命令执行,即M-x mc/mark-all-in-region-regexp ENTER,则会提示您输入搜索字符串。
我的问题是,如何编写函数,将搜索字符串传递给mc/mark-all-in-region-regexp?
我的初审是这样的。但没有达到我的预期。
(defun my-mc-mark-non-empty-lines ()
(interactive)
(mc/mark-all-in-region)
(insert-string "abc")
)
【问题讨论】:
-
考虑修改您的问题,使其与 Magnar 的库
multiple-cursors明确相关,并提供之前和之后提出的示例,以便该线程的读者可以建议该问题的潜在解决方案。此外,您可能不想吸引regex标签人群,因为大多数人可能对 Magnar 的库一无所知——也就是说,他们甚至可能不使用 Emacs。 -
问题不清楚。举一些你想要的输入和输出的例子。
-
Magnar 已在 2015 年 4 月 3 日将其作为第三个参数添加:github.com/magnars/multiple-cursors.el/blob/master/… -- 见第 327 行。考虑将整个多游标库升级到最新版本。这是提交:github.com/magnars/multiple-cursors.el/commit/…
-
您需要创建一个新函数或修改现有函数,就像 Magnar 在我之前评论中的第二个链接的提交中所做的那样。如果您想将新函数放入您的
.emacs文件中(而不是直接修改源代码),您可能需要在重新定义该库中包含的函数之前(require ...)库。如果直接修改源代码,可能还需要重新字节编译。 -
以下链接包含一个示例,用于以编程方式输入用户请求的是/否响应(这与您的问题有点相关),但 Drew 的评论已经有 7 人赞成其中他说不要那样做:emacs.stackexchange.com/questions/19077/…
标签: emacs