作为定义emacs函数的第一次经验,我想编写一个函数,它可以记录argv [某个数字]的所有内容并按顺序重新编号。
这是在emacs内部使用replace-regexp完成的,输入为搜索/替换字符串
argv\[\([0-9]+\)\]
argv[\,(+ 1 \#)]
现在,我想在我的.emacs中写这个,所以我理解我还需要逃避Lisp特殊字符。所以在我看来应该写
(defun argv-order ()
(interactive)
(goto-char 1)
(replace-regexp "argv\\[[0-9]+\\]" "argv[\\,\(+ 1 \\#\)]")
)
搜索字符串工作正常,但替换字符串给我错误“在替换文本中无效使用\。我一直在尝试添加或删除一些\但没有成功。
有什么想法吗?
答案 0 :(得分:6)
引用replace-regexp
的帮助(粗体是我的):
在交互式调用中,替换文本可能包含`\,'
您没有在您的defun中以交互方式使用它,因此出现错误消息。来自同一帮助的另一个引用有助于解决您的问题:
This function is usually the wrong thing to use in a Lisp program.
What you probably want is a loop like this:
(while (re-search-forward REGEXP nil t)
(replace-match TO-STRING nil nil))
which will run faster and will not set the mark or print anything.
基于此的解决方案:
(defun argv-order ()
(interactive)
(let ((count 0))
(while (re-search-forward "argv\\[[0-9]+\\]" nil t)
(replace-match (format "argv[%d]" count) nil nil)
(setq count (1+ count)))))