【问题标题】:(buffer-substring-no-properties) backslash handling(buffer-substring-no-properties) 反斜杠处理
【发布时间】:2021-12-10 18:09:44
【问题描述】:

下午好。在正文中,记录

@samp{\}

,代码

(buffer-substring-no-properties (+ nach 4) (- (point) 4))

在这里捕获这个区域,在

的输出
"@samp{\\}"

功能。问题是如何获得非转义的正斜杠。谢谢

【问题讨论】:

  • 没有正斜杠。

标签: elisp


【解决方案1】:

"@samp{\\}" 表示字符串@samp{\}。和原文没有什么不同。

当您要求 Emacs 打印 buffer-substring-no-properties 的返回值时,您会看到字符串的打印表示——这相当于双引号 读取语法 用于字符串(就像你在代码中编写的那样)——其中一个反斜杠必须用另一个反斜杠转义。

参考elisp手册:

  • C-hig (elisp)Printed Representation
  • C-hig (elisp)Syntax for Strings
  • C-hig (elisp)Nonprinting Characters

【讨论】:

  • 感谢您的回答和花费在此上的时间,我犯了一个错误,只发布了我的一小部分代码。我也阅读了手册,虽然“非打印字符”和“字符串语法”节点不在我的手册中。请务必仔细阅读手册!可能我的回答会离题,但仍然如此。再次感谢您。
  • 很高兴你明白了。如果您没有这些信息节点,那么您的安装就会出现问题——这些名称至少可以追溯到 22.1。您可以随时在线阅读最新版本的手册(Syntax for StringsNonprinting Characters),但通常最好使用您实际使用的 Emacs 版本的内置手册。
【解决方案2】:

代码中的进一步更改给出了结果,即不是对读取行记录的更正,而是将命运多舛的行 "@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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多