当我阅读一些elisp代码时,我发现如下内容:
(\,(* 2 \#1))
\,(format "%s %s id%d %s" \1 \2 (+1 \#) \3)
#'(bla bla)
符号 "\,"、"#"、"#'" 的含义是什么?我应该查看哪个会话来了解这些内容?
\,
在使用 query-replace-regexp
进行替换时是特殊的。它的意思是“评估以下 elisp 表达式,并在替换中使用结果值”。注意,除此之外,它在其他地方并不是特殊的(据我所知),所以你看到的应该就是这种用法。
\#
在替换字符串中也是特殊的,会被替换为到目前为止所做的替换次数(即递增计数器)。
\#N
(其中 N 是一个数字)是 \N
的一种变体,它将相关组视为数字而不是字符串,在需要数字表达式的情况下非常有用。
因此,(\,(* 2 \#1))
将评估表达式 (* 2 \#1)
,将正则表达式匹配的第一组乘以 2 以生成一些值 N,使得最终的替换是 (N)
。
这些详细信息可以在手册中找到。
C-hig (emacs)
RET,然后搜索相关语法。例如,使用 C-s 搜索 \,
,如果搜索失败,则重复使用 C-s 在后续节点中查找匹配项。
#'...
是 (function ...)
的简写形式,这是 '...
/ (quote...)
的一种变体,表示引用的对象是一个函数。
由于这是 elisp 语法,你可以在 elisp 手册中找到相关信息:
C-hig (elisp)
RET
你可以使用 C-s 搜索 #'
,或者在本例中,使用索引进行搜索,因此 I #'
RET 也可以正常工作。
通常先检查索引,然后使用isearch。
了解反引号的信息,请参见http://www.gnu.org/software/emacs/manual/html_node/elisp/Backquote.html。
#表示读取器语法,例如#'是function
的读取器别名。
有关更多信息,请参见http://definitelyaplug.b0.cx/post/emacs-reader/。
#'是使用函数的简写方式,更多详情请参见此处:http://www.gnu.org/software/emacs/manual/html_node/elisp/Anonymous-Functions.html
反斜杠\有两个功能:引用特殊字符(包括‘\’),并引入其他特殊结构。更多信息请参见此处:https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html#Regexps