如何在 Emacs 中用换行符替换字符?

Posted

技术标签:

【中文标题】如何在 Emacs 中用换行符替换字符?【英文标题】:How can I replace a character with a newline in Emacs? 【发布时间】:2010-10-11 09:53:40 【问题描述】:

我正在尝试用 Emacs 中的 replace-string 和/或 replace-regexp 替换一个字符 - 比如 ;

我尝试了以下命令:

M-x replace-string RET ; RET \n

这会将; 替换为两个字符:\n

M-x replace-regex RET ; RET \n

这会导致以下错误(显示在 minibuffer 中):

在替换文本中使用了无效的 `'。

在这个任务中使用replace-string 有什么问题?还有其他方法吗?

【问题讨论】:

【参考方案1】:

M-x replace-string RET ; RET C-q C-j.

C-q 代表quoted-insert

C-j 是换行符。

【讨论】:

C-q 实际上是 quote-insert 引用下一个字符。 我相信它实际上是“引用”而不是“引用”,如“引用插入”。至少 22.1 版本是这样的。 C-j 是文字 0x0a 控制代码,而 Ret 是报价旁边的键并发送 0x0d。 en.wikipedia.org/wiki/C0_and_C1_control_codes vim 用户注意事项,在 emacs 中使用 C-j,而在 vim 中使用 C-m @JonathanArkell 这是描述如何它的工作原理,而不是为什么。在编辑器中,Ret 产生 0x0a,那么为什么要在quoted-insert 中产生 0x0d?这没有任何意义。 (只是因为历史原因,内部键盘代码是 0x0d?我们到处都使用键映射,为什么不在这里完全有意义呢?)【参考方案2】:

我发现有四种方法可以将换行符放入迷你缓冲区。

    C-o

    C-q C-j

    C-q 12(12是换行符的八进制值)

    Cx o 到主窗口,用 Ck 杀死一个换行符,然后 Cx o 回到迷你缓冲区,拉它与 Cy

【讨论】:

+1 提及C-o!与C-q C-j 相比,减少了一次击键。以前没想过用那个。 感谢版本 4!如果您有 C-o 和 C-q 反弹,这很有帮助。 非常感谢。你能解释一下为什么 C-o 有效而 C-q C-j 无效吗? C-o 在 minibuffer 中插入换行符后不会移动该点,因此如果您想在替换字符串中的换行符之后插入一些内容,您仍然需要按右箭头键. 在我的 Emacs 25.2.2 版本中,C-o 将在使用搜索时在主窗口中输入换行符,而C-q C-j 将在 minibuffer 中输入换行符。 C-o 确实适用于查询 - 替换。【参考方案3】:

不要忘记,您始终可以剪切并粘贴到 minibuffer 中。

因此,您可以从缓冲区中复制一个换行符(或任何字符串),然后在提示输入替换文本时将其拉出。

【讨论】:

对于我不知道键绑定的字符来说真是个好主意。 啊哈!这么简单! 这对于初学者来说可能需要一些扩展。例如。怎样才能真正实现这些行动(实际的具体步骤)?由于 OP 已经离开大楼,它可能是超越复制编辑的一个典型例子。【参考方案4】:

更明确:

要将分号字符 (;) 替换为换行符,请按照以下确切步骤操作。

    将光标定位在缓冲区左上角要更改的包含文本

    输入m-xreplace-string 并点击Return

    迷你缓冲区将显示如下内容: 替换字符串(默认 ^ -> ):

    输入要替换的字符。在这种情况下,; 然后点击 Return

    迷你缓冲区将显示如下内容:

    字符串;与:

    现在执行C-q C-j

    分号的所有实例都将被换行符(现在会出现从光标位置到缓冲区末尾)

这比原来的解释说的要多。

【讨论】:

【参考方案5】:

切换到文本模式:

M-x text-mode

突出显示要缩进的块。

缩进:Ctrl + M

切换回任何模式...

【讨论】:

【参考方案6】:

仅内联:

C-M-S-%(如果绑定键仍然是默认值)然后 replace-string ^J.

【讨论】:

“内联”是什么意思?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。

以上是关于如何在 Emacs 中用换行符替换字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C# 在给定文本中用忽略空格、回车或换行符替换字符串

在 PHP 中用一个空格替换多个空格和换行符

在 awk 中用换行符替换“\n”

如何在 Java 中用逗号和换行符 (\n) 分割字符串? [复制]

java程序中换行符号怎样表示

javascript 在 createTextNode 中用 <br> 替换 \n