【问题标题】:How can I replace a character with a newline in Emacs?如何在 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 有什么问题?还有其他方法吗?

【问题讨论】:

    标签: emacs replace


    【解决方案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 是报价旁边的键并发送 0x0den.wikipedia.org/wiki/C0_and_C1_control_codes
    • vim 用户注意事项,在 emacs 中使用 C-j,而在 vim 中使用 C-m
    • @JonathanArkell 这是描述如何它的工作原理,而不是为什么。在编辑器中,Ret 产生 0x0a,那么为什么要在quoted-insert 中产生 0x0d?这没有任何意义。 (只是因为历史原因,内部键盘代码是 0x0d?我们到处都使用键映射,为什么不在这里完全有意义呢?)
    【解决方案2】:

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

    1. C-o

    2. C-q C-j

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

    4. 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】:

    更明确:

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

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

    2. 输入m-xreplace-string 并点击Return

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

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

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

      字符串;与:

    6. 现在执行C-q C-j

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

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

    【讨论】:

      【解决方案5】:

      切换到文本模式:

      M-x text-mode
      

      突出显示要缩进的块。

      缩进:Ctrl + M

      切换回任何模式...

      【讨论】:

        【解决方案6】:

        仅内联:

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

        【讨论】:

        • “内联”是什么意思?请通过editing (changing) your answer 回复,而不是在 cmets 中(without "Edit:"、"Update:" 或类似的 - 答案应该看起来像是今天写的)。
        猜你喜欢
        • 1970-01-01
        • 2013-05-10
        • 2016-05-29
        • 2010-09-09
        • 2020-08-11
        • 1970-01-01
        相关资源
        最近更新 更多