16

我在几个地方读到 emacs 中的矩形函数非常有用。我已经阅读了一些关于它们的信息,但我不太明白为什么。我的意思是,当你想删除一个段落时,你标记第一行/列,然后标记最后一个,这实际上是一个矩形,对吧?但是你仍然可以使用普通的杀...

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

4

3 回答 3

23

如果文本文件的列中有数据,M-x delete-rectangle或者M-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,您立即拥有:

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

接下来将标记放在顶行的末尾,如果需要添加几个空格,然后输入M-x yank-rectangle和ta-da!您已对列重新排序:

1. alphorn      alligator    
2. bugle        baboon       
3. cornet       crocodile    
4. didgeridoo   dog          
5. euphonium    elephant     
6. flugelhorn   fish         
7. guitar       gopher       
于 2008-09-12T12:57:50.560 回答
15

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

这些有 2 个有用的快捷方式,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 中。我遇到了更复杂的情况,这很有用,你实际上有想要在特定位置的每一行插入的文本。

所以另一种情况,比如戴夫韦伯的情况,如果你想杀死一个矩形,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: 杀戮(如上所述)
于 2008-09-12T17:03:00.440 回答
1

在 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默认绑定到。

于 2014-05-31T09:55:55.377 回答