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


285

我正在尝试;使用replace-string和/或replace-regexp在Emacs 中用新行替换字符(例如)。

我尝试了以下命令:

  • M-x replace-string RET ; RET \n

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

  • M-x replace-regex RET ; RET \n

    这将导致以下错误(显示在迷你缓冲区中):

    替换文字中无效的使用\。

使用replace-string此任务有什么问题?还有其他方法吗?

谢谢。

Answers:


427

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

  • C-q对于quoted-insert

  • C-j 是换行符。

干杯!


3
Cq确实quote-insert引用下一个字符。
Joe Casadonte 09年

2
我相信它实际上是“引用”而不是“引用”,例如“引用插入”。至少这是版本22.1的方式。
布赖恩奥克利2009年

8
C-j是文字0x0a控制代码,而Ret引号和send旁边则是键0x0dzh.wikipedia.org/wiki/C0_and_C1_control_codes
Jonathan Arkell 2014年

2
对于vim用户,请注意C-jemacs中使用,而C-mvim中使用
Alpha TAN

2
@JonathanArkell这是它如何工作的描述,但不是原因。在编辑器中,Ret产生0x0a,那么为什么要在带引号的插入中产生0x0d?那没有任何意义。(仅因为内部键盘代码出于历史原因而为0x0d?我们在各处使用键映射,所以为什么在这里没有意义呢?)
vog

74

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

  1. C-o

  2. C-q C-j

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

  4. C-x o到主窗口,使用杀死换行符C-k,然后C-x o回到minibuffer,使用取消C-y


10
+1提C-o!与相比,少了一个按键C-q C-j。以前没有想过使用那个。
itsjeyd 2014年

感谢版本4!如果您有Co和Cq反弹的话会很有帮助。
约阿希姆W

非常感谢。您能解释为什么Co有效而Cq Cj不起作用吗?
Christian Madsen 2014年

C-o不会在迷你缓冲区中插入换行符后移动该点,因此,如果要在替换字符串中的换行符之后插入内容,则仍然需要按向右箭头键。
罗宾·格林

在我的Emacs 25.2.2版本上,C-o使用搜索时C-q C-j将在主窗口中输入换行符,同时在迷你缓冲区中输入换行符。C-o确实适用于查询-尽管可以替换。
TC Proctor

25

不要忘记,您总是可以剪切并粘贴到迷你缓冲区中。

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


2
对于我不知道按键绑定的字符,这确实是一个好主意。

啊啊 !很简单 !
杰里米Pouyet

8

更明确地说:

要用换行符代替半冒号(;),请按照以下确切步骤操作。

  1. 将光标定位在包含要更改的文本的缓冲区的左上方
  2. 输入mx replace-string并按RETURN
  3. 迷你缓冲区将显示以下内容:替换字符串(默认^->):
  4. 输入您要替换的字符。在这种情况下, ; 然后按回车键
  5. 迷你缓冲区将显示如下内容:string; 与:
  6. 现在执行Cq Cj
  7. 所有分号实例都将替换为换行符(从光标位置到缓冲区末尾将出现)

比原始解释说的要多。


2

切换至文字模式

M-x text-mode

突出显示要缩进的块

缩进

C+M \

切换回任何模式。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.