elisp 如何将汉字后的英文句号转换为中文的句号.

大概是如同vim的 ex命令:

    silent! %s/\([\u4e00-\u9fa5\u3040-\u30FF]\)\.\($\|\s\+\)/\1。/g

使用elisp怎么写呢?

如果要造轮子的话,chinese-pyim有这个功能了

不会 Vim 的正则表达式,暂时把最后面的 \s\+ 理解成一个或多个空格的话,直译过来可能大致像这样:

(replace-regexp-in-string "\\([\u4E00-\u9FA5\u3040-\u30FF]\\).\\($\\| +\\)"
                          "\\1。"
                          "Hello 中文.")
     => "Hello 中文。"

(replace-regexp-in-string "\\([\u4E00-\u9FA5\u3040-\u30FF]\\).\\($\\| +\\)"
                          "\\1。"
                          "Hello 中文. 完")
     => "Hello 中文。完"

(注意上面第二个参数 Replacement 是 “\\。”,但是 Markdown 渲染成别的了,不明白 Markdown 中 Escape 到底是怎么一回事)

Emacs 里可用 \cc 匹配一个中文字符(还有个 \cC,我不清楚什么区别以及它们各自的范围是多少),也可以试试

C-M-% \(\cc\)\.\($\| \) RET \1。RET
1 个赞

谢谢啦,很详细