21

背景: JEdit(以及其他一些文本编辑器)支持称为多个同时文本插入点的功能。(至少这就是我在这里所说的)。

要了解这意味着什么,请查看链接。

在现代文本编辑器中使用的所有功能中,初步研究似乎表明这是 Emacs 和 Vim 实际上不支持的一个功能。如果正确,这将是非常特殊的,因为很难找到至少没有进入这两个老式编辑器之一的文本编辑器功能。

问题:有没有人在 Emacs、Vim 或两者中看到或实现过这个特性?如果是这样,请指向我解释详细信息的链接、脚本、参考或摘要。

如果您知道做相同(或类似)事情的另一种方法,请告诉我。

4

10 回答 10

8

执行此操作的 vim 方法是 . 重复上次更改的命令。因此,例如,如果我更改指向引用的指针并且我有一堆 obj->func 我想更改为 obj.func 然后我搜索 obj->,执行 2cw 将 obj-> 更改为 obj .,然后执行 nnn 直到所有实例都被更改。

也许不像您所说的那样灵活,但它经常工作,并且在工作时非常直观和快速。

于 2008-12-28T18:47:27.793 回答
7

moccur-edit.el几乎做你想要的。显示与正则表达式匹配的所有位置,并且编辑匹配项会在相应的源中进行更改。但是,编辑是在事件的单个实例上完成的。

我想扩展它以允许您同时编辑它们是直截了当的(至少在简单的情况下)。

这里有一个演示

事实证明,最新版本的 mocurr-edit 不会实时应用更改 - 您必须应用更改。这些更改现在也可以撤消(很好的胜利)。

于 2008-12-29T23:59:37.070 回答
6

在 EMACS 中,您可以/将M-x find-grep使用宏来完成。如果您真的坚持它是全自动的,那么您将find-next在宏中包含 。

但老实说,这让我觉得这是微软的一种功能:是的,它添加到了功能列表中,但为什么要麻烦呢?当你想再次使用它时,你会记得它在六个月后就存在了吗?

于 2008-12-28T19:10:30.273 回答
4

对于 emacs,多游标正是这样做的。

看看模块作者的emacsrocks 第 13 集。

于 2015-07-24T12:57:06.783 回答
3

我认为这个特性在 Emacs 或 Vim 中都没有直接的类似物,这并不是说用这个特性实现的所有东西都不能以某种方式用两个“老派”编辑器来实现。和大多数 Emacs 和 Vim 一样,高级用户可能能够非常快速地完成这样的任务,即使像我这样的普通人可以花五分钟找出正确的 grep 搜索并替换为适当的反向引用,例如。

于 2008-12-28T18:51:50.700 回答
3

Emacs 的YASnippet包使用它。请参阅截屏视频中的 2:13 和 2:44 。

于 2009-01-05T22:09:48.650 回答
2

另一个细微的相似之处:在 Emacs 中,由cua-selection-mode(or cua-mode) 提供的矩形编辑功能会自动在标记矩形的左边缘或右边缘为您提供多个插入点,以便您可以为所有这些行键入一个公共前缀或后缀。

例如:(
M-x cua-selection-mode RET启用全局次要模式,如果您尚未使用此或 cua 模式)
C-RET down down down(标记 1x3 字符矩形)
在此处键入前缀
C-RET(取消标记矩形以返回正常编辑)

于 2011-08-04T23:54:54.423 回答
1

在 vim 中应该是这样的:

%s/paint.\((.*),/\1.paint(/ 

或者类似的东西,我真的不擅长“模拟”正则表达式。

这个想法是替代模式:

/paint(object,/ 

/object.paint(/ 

所以,是的,它是“支持”的

于 2009-01-05T21:32:25.387 回答
1

在 Emacs lisp 中做一个基本版本似乎很简单。这适用于您只想在两个地方并行插入文本的情况:

(defun cjw-multi-insert (text)
  "insert text at both point and mark"
  (interactive "sText:")
  (insert-before-markers text)
  (save-excursion
    (exchange-point-and-mark)
    (insert-before-markers text)))

当您运行它时,它会提示输入文本并将其插入到点(当前位置)和标记处。您可以使用 设置标记C-SPC。这可以很容易地扩展到 N 个不同的位置。像这样的函数set-insert-point会将当前位置(存储为 Emacs标记)记录到列表中,然后当您运行 multi-insert 命令时,它只是遍历列表,在每个位置添加文本。

我不确定处理更通用的“多重编辑”功能的简单方法是什么。

于 2011-08-04T15:21:29.213 回答
0

没有。对于主要基于控制台的 UI,这将是相当困难的。

也就是说,vim(和 emacs,虽然我几乎没有使用它)有类似的功能 - 正如人们所说的那样,搜索和替换,更类似的是,列插入模式: http: //pivotallabs.com/用户/brian/blog/articles/350-column-edit-mode-in-vi

于 2009-01-05T22:10:15.513 回答