如何为每行添加前缀?


35

我有下面的代码:

Hello
There
I am some code

并希望在其前面添加代码,例如:

I said Hello
I said There
I said I am some code

那么如何为每行添加前缀?

Answers:


47

您可以添加M-x string-rectangle绑定到的前缀C-x r t。这是一系列操作矩形选择的命令的一部分; 这将在矩形的每一行插入文本。

首先在第一行的开头设置标记,然后将光标移至要添加前缀的最后一行的第一个字符:

*Hello
 There
▮I am some code

然后使用C-x r t,输入您的前缀(I said),然后按RET。这会将文本添加到矩形的每一行:

I said Hello
I said There
I said I am some code

如果您没有将光标与标记对齐在同一列上,它将覆盖矩形的该部分:

*Hello
 There
 I am▮ some code

使用相同的命令将导致:

I said o
I said e
I said  some code

3
您是第二位获得良好答案徽章的人:)
nicael 2014年

另一种方法是使用M-x string-insert-rectangle。这非常相似,但是在选择的每一行的开始处string-insert-rectangle 插入,而在string-rectangle replaces的开始处插入,因此对于后者,如果您不想覆盖任何内容,则必须更加精确地选择。
杰夫·克利特

32

您可以使用multi-cursors-mode,将光标放在每一行上。然后,您键入的任何文本都会插入到每一行中。

您将从代码开头的点开始:

▮Hello
 There
 I am some code

然后打C->两次。(这是建议的键绑定;您必须自行设置。)这将在以下两行中创建两个额外的游标:

▮Hello
▮There
▮I am some code

然后输入I said。文本将添加到每一行:

I said ▮Hello
I said ▮There
I said ▮I am some code

最后按下RET以退出多个光标模式,并将点留在最后一个光标处:

I said Hello
I said There
I said ▮I am some code

是展示其工作原理的视频。


26

就个人而言,我更喜欢replace-regexp(用“我说”代替“ ^”)。


12

另一个选择是使用宏,它比矩形选择或多个光标可以处理更多的任务,即使在这种情况下它也比较笨拙。

将光标置于第一行的开头并单击F3以开始记录,插入文本,将光标移至下一行的开头并单击F4以停止记录。现在F4再次命中以重复该宏,C-2 F4重复两次或C-0 F4重复直到遇到错误(例如行满)。


9

您可以安装邪恶并以多种类似于vi的方式进行操作 -我更喜欢使用Ctrl+ V标记可视块选择,以标记每行,然后使用Shift+ I插入,然后键入要插入的文本,最后ESC按退出以退出插入模式,然后按文本将添加到每一行之前。这与emacs矩形选择非常相似,但是击键次数更少。


7

这与artagnon的答案非常相似,但未replace-regexp绑定任何键。

因此,我实际上使用query-replace-regexp默认情况下绑定到的对象C-M-%,然后^使用给定的前缀替换I said,然后键入!以替换所有内容而不再提示。


4

如果已cua-mode启用,则:

  • C-a 移至行首,
  • C-RET 开始矩形
  • (向下键)两次移至第三行,
  • I said 作为要插入的文本
  • C-RET 结束矩形

cua-mode与等效的Emacs标准矩形相比,我更喜欢工作方式:

  • C-a 移至行首,
  • C-SPC 开始矩形
  • (向下键)两次移至第三行,
  • C-x r t I said RET 插入文字

cua-mode标准相比,Emacs的矩形节省两个关键印刷机。

但是对我来说,cua-mode的另一个优点是我可以文本追加到矩形中(我个人不知道如何使用标准Emacs矩形追加文本)。对于cua模式,RET仅在输入之前输入一键I said

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.