代码之家  ›  专栏  ›  技术社区  ›  bortzmeyer

是否在Emacs Lisp中替换字符?

  •  4
  • bortzmeyer  · 技术社区  · 16 年前

    Emacs Lisp具有 replace-string replace-char . 我想用常规ASCII引号替换“排版”卷曲引号(此字符的Emacs代码为十六进制53979),我可以使用以下方法:

    (replace-string (make-string 1 ?\x53979) "'")
    

    我认为有了它会更好 替换字符 .

    最好的方法是什么?

    4 回复  |  直到 11 年前
        1
  •  8
  •   notetienne    7 年前

    (subst-char-in-string ?' ?’ "John's")
    

    给予:

    "John’s"
    

    请注意,此函数不接受字符作为字符串。第一个和第二个参数必须是文字字符(使用 ? string-to-char ).

    还请注意,如果可选的 inplace 参数为非零。

        2
  •  7
  •   cjm    16 年前

    为什么不直接使用

    (replace-string "\x53979" "'")
    

    (while (search-forward "\x53979" nil t)
        (replace-match "'" nil t))
    

    按照替换字符串文档中的建议?

        3
  •  2
  •   0124816    16 年前

    它真的慢到了重要的程度吗?我的elisp通常效率低得离谱,我从未注意到。(不过,如果您正在使用它构建下一个MS live搜索,我只将其用于编辑器工具。)

    此外,阅读文档:

    This function is usually the wrong thing to use in a Lisp program.
    What you probably want is a loop like this:
      (while (search-forward "’" nil t)
        (replace-match "'" nil t))
    

        4
  •  2
  •   Yoo    15 年前

    这个怎么样

    (defun my-replace-smart-quotes (beg end)
      "replaces ’ (the curly typographical quote, unicode hexa 2019) to ' (ordinary ascii quote)."
      (interactive "r")
      (save-excursion
        (format-replace-strings '(("\x2019" . "'")) nil beg end)))
    

    我认为您可以在“替换智能引号”的定义中用“”代替“\x2019”,这样就可以了。为了安全起见。