emacs中的矩形函数

时间:2008-09-12 12:53:36

标签: emacs

我在几个地方读过emacs中的矩形函数非常有用。我已经读过一些关于它们的内容,但我无法理解为什么。我的意思是,当你想杀死一个段落时,你标记第一行/列然后标记最后一个,那实际上是一个矩形,对吧?但你仍然可以使用正常的杀戮......

那么你会用它们进行什么样的转换?

3 个答案:

答案 0 :(得分: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

从鳄鱼皮中选择吉他。选择的开始和结束标出矩形的两个相对的角。输入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       

答案 1 :(得分: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,因为它的速度要快得多; - )

另外,根据我刚开始时打印出的reference card,您可以执行以下操作:

  • C-x r r:复制到注册
  • C-x r y:猛拉一个矩形
  • C-x r o:打开一个矩形,右移文本(无论这意味着什么......)
  • C-x r c:删除一个矩形(我认为这意味着用空格替换它,但你必须尝试一下才能看到)
  • C-x r t:带文字的前缀(如上所述)
  • C-x r k:杀戮(如上所述)

答案 2 :(得分: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