题
我在几个地方读到 emacs 中的矩形函数非常有用。我读过一些关于它们的内容,但我不太明白为什么。我的意思是,当你想删除一个段落时,你标记第一行/列,然后标记最后一个,这实际上是一个矩形,对吧?但你仍然可以使用普通杀戮...
那么你会用它们做什么样的转变呢?
解决方案
如果文本文件的列中有数据 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
还有哒哒!您已对列重新排序:
1. alphorn alligator
2. bugle baboon
3. cornet crocodile
4. didgeridoo dog
5. euphonium elephant
6. flugelhorn fish
7. guitar gopher
其他提示
我喜欢使用矩形有两个主要目的,在每一行插入相同的文本,或者删除一列文本(类似于戴夫·韦伯的答案)。
有 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
:杀戮(如上所述)
在 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 默认情况下。