我在几个地方读到过emacs中的矩形功能非常有用。我稍微了解了一下,不太明白为什么这么说。我的意思是,当你想要删除一个段落时,你标记第一行/列,然后标记最后一行/列,那不就是一个矩形吗?但你仍然可以使用普通的kill命令...
那么,你会用它们做什么样的变换呢?
我在几个地方读到过emacs中的矩形功能非常有用。我稍微了解了一下,不太明白为什么这么说。我的意思是,当你想要删除一个段落时,你标记第一行/列,然后标记最后一行/列,那不就是一个矩形吗?但你仍然可以使用普通的kill命令...
那么,你会用它们做什么样的变换呢?
如果您在文本文件中有列数据,并使用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
,立即得到:
从鳄鱼的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
我喜欢使用矩形有两个主要的目的,一个是在每一行插入相同的文本,另一个是删除一列文本(类似于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
:删除(如上所述)(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.