【发布时间】:2021-12-10 18:09:44
【问题描述】:
下午好。在正文中,记录
@samp{\}
,代码
(buffer-substring-no-properties (+ nach 4) (- (point) 4))
在这里捕获这个区域,在
的输出"@samp{\\}"
功能。问题是如何获得非转义的正斜杠。谢谢
【问题讨论】:
-
没有正斜杠。
标签: elisp
下午好。在正文中,记录
@samp{\}
,代码
(buffer-substring-no-properties (+ nach 4) (- (point) 4))
在这里捕获这个区域,在
的输出"@samp{\\}"
功能。问题是如何获得非转义的正斜杠。谢谢
【问题讨论】:
标签: elisp
"@samp{\\}" 表示字符串@samp{\}。和原文没有什么不同。
当您要求 Emacs 打印 buffer-substring-no-properties 的返回值时,您会看到字符串的打印表示——这相当于双引号 读取语法 用于字符串(就像你在代码中编写的那样)——其中一个反斜杠必须用另一个反斜杠转义。
参考elisp手册:
(elisp)Printed Representation
(elisp)Syntax for Strings
(elisp)Nonprinting Characters
【讨论】:
代码中的进一步更改给出了结果,即不是对读取行记录的更正,而是将命运多舛的行 "@samp {\\}" 插入回文本中的变化。功能介绍
(defun zamenaOBJ (спсОбктв)
"Зменить obzx оригиналом"
(goto-char 1)
(while (re-search-forward "[Bb]jkt\\([[:digit:]]\\)+" nil t 1)
(replace-match (cdr (assoc (downcase (match-string 0)) спсОбктв)) t)))
这是发生错误时的数据(收到的数据
(buffer-substring-no-properties)
并保存在关联列表中
(cdr (assoc (downcase (match-string 0)) спсОбктв))
"@samp{\\}"
错误本身
(replace-match (cdr (assoc (downcase (match-string 0)) спсОбктв)) t)
Invalid use of ‘\’ in replacement text
如果是这样写的:
(replace-match (prin1-to-string (cdr (assoc (downcase (match-string 0)) спсОбктв)) t))
все замены по тексту были окружены двойной кавычкой, если же указывался аргумент noescape в t для prin1-to-string:
(replace-match (prin1-to-string (cdr (assoc (downcase (match-string 0)) спсОбктв)) t) t)
或
(replace-match (princ (cdr (assoc (downcase (match-string 0)) спсОбктв)) t))
错误又回来了
通过添加第二个参数字面替换匹配解决
(replace-match (cdr (assoc (downcase (match-string 0)) спсОбктв)) t t)
【讨论】: