Emacs中的矩形函数

16

我在几个地方读到过emacs中的矩形功能非常有用。我稍微了解了一下,不太明白为什么这么说。我的意思是,当你想要删除一个段落时,你标记第一行/列,然后标记最后一行/列,那不就是一个矩形吗?但你仍然可以使用普通的kill命令...

那么,你会用它们做什么样的变换呢?

3个回答

23

如果您在文本文件中有列数据,并使用M-x delete-rectangleM-x kill-rectangle,则可以删除单个数据列。同样,M-x yank-rectangle将粘贴一列文本。

例如,考虑以下文本:

1. alligator    alphorn
2. baboon       bugle
3. crocodile    cornet
4. dog          didgeridoo
5. elephant     euphonium 
6. fish         flugelhorn   
7. gopher       guitar

从鳄鱼的A到吉他的G进行选择。选择的起始和结束标记出矩形的两个相对角落。输入M-x kill-rectangle,立即得到:

从鳄鱼的A到吉他的G进行选择。选择的起始和结束标记出矩形的两个相对角落。输入M-x kill-rectangle,立即得到:

1. alphorn
2. bugle
3. cornet
4. didgeridoo
5. euphonium 
6. flugelhorn
7. guitar

把光标放在顶部行的末尾,如有需要添加几个空格,然后输入M-x yank-rectangle,就完成了!你已经重新排列了列:

1. alphorn      alligator    
2. bugle        baboon       
3. cornet       crocodile    
4. didgeridoo   dog          
5. euphonium    elephant     
6. flugelhorn   fish         
7. guitar       gopher       

15

我喜欢使用矩形有两个主要的目的,一个是在每一行插入相同的文本,另一个是删除一列文本(类似于Dave Webb的答案)。

这里有两个有用的快捷键,C-x r k将删除一个矩形,而C-x r t将插入文本(还有其他带有C-x r前缀的矩形命令,但这些是我使用的命令)。

所以假设你想要对一些代码进行格式化以便发布到Stack Overflow...你需要用4个空格作为前缀。所以,到第一行的开始位置,C-SPC标记,然后到最后一行的开始位置,输入C-x r t <SPC> <SPC> <SPC> <SPC> <RET>,那就完成了!然后你只需将其复制粘贴到Stack Overflow中即可。当你实际上需要在特定位置的每一行插入文本时,我遇到了更复杂的情况,这也很有用。

当然,如果你想像Dave Webb那样删除一个矩形,使用C-x r k更快一些;-)

另外,根据我参考卡上打印的内容,你可以执行以下操作:

  • C-x r r:复制到寄存器
  • C-x r y:粘贴一个矩形
  • C-x r o:打开一个矩形,将文本向右移动(具体是什么意思需要试一下才知道)
  • C-x r c:清空一个矩形(我猜这意味着用空格替换它,但你需要试一下才能确定)
  • C-x r t:在前面添加文本(如上所述)
  • C-x r k:删除(如上所述)

我已经打开了部分完成模式,因此对于yank-rectangle,我可以使用M-x y-r [tab] [ret],但你是对的,默认的快捷键更快。 - David Webb
1
哇...你使用Emacs已经有20多年了,但还是有新东西要学习。 - Piers Cawley
1
"C-x r t 空格 空格 空格 空格 回车" 第一个回车似乎是错误的?当我输入:C-x r t 空格 空格 空格 空格 回车时,我得到了期望的效果。 - Lii

2
在emacs24+中,还有一个用于给行标号的函数:
(rectangle-number-lines START END START-AT &optional FORMAT)

Insert numbers in front of the region-rectangle.

START-AT, if non-nil, should be a number from which to begin
counting.  FORMAT, if non-nil, should be a format string to pass
to `format' along with the line count.  When called interactively
with a prefix argument, prompt for START-AT and FORMAT.

默认情况下,它绑定到 C-x r N

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接