elisp函数替换选择

时间:2014-08-16 21:27:48

标签: emacs replace elisp

我经常使用replace-regexp,所以我想把它变成一个函数。但是 M-x replace-regexp要么扫描文档,要么使用选定的区域;我写的函数似乎只是扫描文档。当我调用replace-regexp时,如何让它与 M-x my-scripture-links一样工作,特别是在选择或不选择方面?

(defun my-scripture-links ()
  (interactive)
  (replace-regexp "^\(.*[0-9]+?:[0-9]+\)" "[[https://www.lds.org/scriptures/search?lang=eng&query=\1&x=0&y=0][\1]]"))

1 个答案:

答案 0 :(得分:2)

replace-regexp的论据是

  

(replace-regexp REGEXP TO-STRING& optional DELIMITED START END)

要仅在区域内进行替换,您需要指定区域的STARTEND。您可以从region-beginningregion-end函数中获取这些内容。要根据区域是否处于活动状态来更改行为,请检查region-active-p。如果它处于活动状态,这将取代该区域。

(defun my-scripture-links ()
  (interactive)
  (if (region-active-p)
      (replace-regexp "^\(.*[0-9]+?:[0-9]+\)" "[[https://www.lds.org/scriptures/search?lang=eng&query=\1&x=0&y=0][\1]]"
                      nil (region-beginning) (region-end))
     (replace-regexp "^\(.*[0-9]+?:[0-9]+\)" "[[https://www.lds.org/scriptures/search?lang=eng&query=\1&x=0&y=0][\1]]")
     ))