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

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

我已经使用 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 并在 Google 上搜索,但没有找到解决方案。如果您知道我的解决方案,请指导我。我将不胜感激。

答案1

我想到两个选项。第一个是矩形(如另一个答案中所述)。其明确方向如下:

  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)

答案2

在 Emacs-24.4 中,对矩形的基本支持有了一些改进,因此,您不必使用C-SPC后跟,而是可以执行以下操作:C-x r t

C-x SPC
down down
C-t bar RET

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

答案3

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

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

答案4

您可以使用 replace-regexp 来实现这一点:

  1. 将标记设置为最后一行 --> C SPC 并转到最后一行
  2. 在迷你缓冲区中输入 Mx replace-regexp RET (我有一个针对这个的键绑定)
  3. 给予 ^ RET
  4. 输入栏并按 RET

这会将 bar 添加到行首。

相关内容