【发布时间】:2014-05-02 19:33:05
【问题描述】:
当我阅读一些 elisp 代码时,我发现了类似的内容:
(\,(* 2 \#1))
\,(format "%s %s id%d %s" \1 \2 (+1 \#) \3)
#'(bla bla)
像“\”、“#”、“#'”这样的符号是什么意思?对于这类事情,我应该查看哪个会话?
【问题讨论】:
当我阅读一些 elisp 代码时,我发现了类似的内容:
(\,(* 2 \#1))
\,(format "%s %s id%d %s" \1 \2 (+1 \#) \3)
#'(bla bla)
像“\”、“#”、“#'”这样的符号是什么意思?对于这类事情,我应该查看哪个会话?
【问题讨论】:
\, 在使用 query-replace-regexp 时特别适合替换。它的意思是“计算下面的 elisp 表达式,并在替换中使用结果值”。
n.b.它在其他地方并不特别(我知道),所以这应该是你看到的用法。
\# 在替换字符串中也是特殊的,并且被替换为到目前为止所做的替换次数。 (即递增计数器)。
\#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
【讨论】: