如何选择列然后在GNU Emacs中进行编辑?


15

多年来,我一直在使用ViM,TextMate和GNU Emacs。

例如,这是我要编辑的文本

foo
foo
foo

这是我想要的文本结果

bar foo
bar foo
bar foo

当我在Vim上时,可以在第一行和第一列上执行“ Ctrl v”,然后按“ 2 j”,然后按“ i”,然后键入“ bar”,完成。

当我使用Textmate时,可以同时按下(使用鼠标)同时按下“ Apple Command Option”,然后键入“ bar”。

但是当我使用GNU Emacs 23.1时,我不知道该怎么做。:((

我搜索了EmacsWiki并四处搜寻,但没有找到解决方案。如果您知道我的解决方案,请指导我。对此将不胜感激。


@特雷·杰克逊(Trey Jackson)和@卑微的咖啡,解决了,非常感谢!
Arie

Answers:


16

我想到两个选择。第一个是矩形(如另一个答案中所述)。明确的指示是:

  1. 转到第一行,第一列
  2. C-SPC
  3. 转到最后一行(第一列)
  4. C-x r t bar SPC RET

提供非常好的矩形/列编辑命令的另一个选项是CUA模式。这是描述如何使用它的博客文章(公开:我的博客)。要了解CUA模式的强大功能,完全值得观看这三分钟的视频

我将CUA模式与以下内容集成在一起(因为我不希望使用过渡标记模式):

(setq cua-enable-cua-keys nil)
(setq cua-highlight-region-shift-only t) ;; no transient mark mode
(setq cua-toggle-set-mark nil) ;; original set-mark behavior, i.e. no transient-mark-mode
(cua-mode)

11

在Emacs-24.4,为矩形底座支撑已经提高了一点,因此,而不是使用C-SPC之后C-x r t,你可以这样做:

C-x SPC
down down
C-t bar RET

C-SPC方法相比,它的好处之一是您将获得有关所选矩形的视觉反馈。当然,该cua-mode方法同样有效(并且工作类似)。


可悲的是,在我看来,改进根本是不够的:cua-mode让它更正确...只是要提一件事:在中cua-mode,当突出显示一个矩形时,我可以键入和添加文本。在当前内置的emacs“基本支持”中,突出显示消失(选择被“取消”),并且输入被插入到光标点。这是违反直觉的,而不是我通常想要的(并且习惯了cua-mode它)
ShinTakezou 2015年

@ShinTakezou:虽然您发现矩形标记模式计数器很直观,但是我却发现cua的行为计数器很直观。幸运的是,您可以选择。如果您喜欢cua的支持,则可以启用cua-mode或(如果仅希望其矩形支持)(global-set-key [?\C-x ?\s] 'cua-rectangle-mark-mode)
Stefan

实际上,我就是这么做的:坚持使用cua模式。它的工作原理是:突出显示一列,键入文本,完成。否则:突出显示一列,说您要添加文本,在minibuffer中键入文本(键入时您不会看到它出现在缓冲区中),...完成。稍后您会在最后一个字符中看到一个错字...在cua模式下,我可以在键入,删除它(不撤消整个插入操作),重新思考,插入另一个字符时看到它……并且矩形始终突出显示顺便说一句,顺便说一句,我可以将其缩小,放大,键入更多文本或“剪切”该新矩形...因此,对我来说,它更直观,更舒适。
ShinTakezou 2015年

我很高兴您喜欢它;-)
Stefan

顺便说一句,在Emacs-25中,非CUA矩形C-t操作(aka C-x r t)还会在您键入时向您显示新插入文本的预览。
斯特凡

2

在emacs中,这类列称为“矩形”。所以是相关文档页面。

所有这些命令都要求该区域包含您要操作的矩形。因此,您需要在矩形的左上角字符上设置标记,并将区域扩展到矩形的右下角字符。您要执行的命令M-x string-insert-rectangle随后将提示您输入要插入的字符串。


1

最简单的答案:通过启用CUA矩形模式C-RET

因此,对于您的情况,

  1. 转到第一行,第一列,然后单击C-RET以进入CUA模式
  2. 转到最后一行,第一列,只需键入 barSPC
  3. 通过ESC或CG 退出CUA模式

有关更详尽的解决方案和CUA的链接,请参见@Trey的答案。


2
是的,我的声誉太低,无法发表评论。我不想重复他的回答,但是我将从CUA文档中添加更多信息。
马丁

0

您可以为此使用replace-regexp:

  1. 将标记设置为最后一行-> C SPC并转到最后一行
  2. minibuffer中的Mx replace-regexp RET类型(我对此先生有一个键绑定)
  3. 给^ RET
  4. 输入栏并按RET

这会将bar添加到行的开头。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.