UP | HOME

Ping's Tech Notes

Emacs里如何把某个字符替换为“换行”?

Ping Zhou, 2022-09-04

Emacs 的 query-replace 是一个很常用的查找替换命令(快捷键 M-% )。这个命令会提示你输入要查找的字符串,再输入要替换的字符串,然后就会从当前位置逐个查找和确认是否替换。

但是,如果我想要把某个字符替换为特殊字符,例如想把字符“;”替换为“换行”,就不能直接输入了,因为如果你在第二步输入了回车,它会认为你想要把查找的字符串替换为空字符串(相当于查找+删除)。怎么办呢?

查了一下,有这样几个办法。

一是在输入要替换的字符串时,输入 C-q C-j ,然后回车。

20220904_emacs_replace_newline1.png

这里的 C-q 表示 quoted-insert ,意思是告诉 Emacs 输入后面的控制字符。而 C-j 代表的是 ASCII 码 0x0a,也就是 newline。然后按下回车,就会用 ASCII 码 0x0a 来替换字符串“;”。

20220904_emacs_replace_newline2.png

还有种方法,就是在 C-q 之后输入 ASCII 码的八进制数,例如 0x0a 的八进制数就是 12 。

另一种办法可能更直观,就是用 C-k 去删除一个空行,把空行加入到 kill-ring 里,然后在输入要替换的字符串时,用 C-y 把它粘贴进来。这个就有点类似图形界面编辑器(例如VSCode)里的操作了。