Emacs,Vim和JEdit的哪些编辑器支持多个同步文本插入点?

时间:2008-12-28 18:26:55

标签: vim emacs comparison text-editor

背景:JEdit(以及其他一些文本编辑器)支持名为Multiple simultaneous text insertion points的功能。 (至少这就是我在这里所说的)。

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

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

问题:有没有人在Emacs,Vim或两者中看到或实现过此功能?如果是,请指出解释详细信息的链接,脚本,参考或摘要。

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

11 个答案:

答案 0 :(得分:8)

这样做的方法是。重复最后一次更改的命令。因此,例如,如果我将指针更改为引用并且我有一堆   obj-> FUNC 我想改变   obj.func 然后我搜索obj->,做2cw来改变obj->对象,然后做n.n.n.直到所有实例都被更改。

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

答案 1 :(得分:7)

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

我想它可以直接扩展它以允许你同时编辑它们(至少在简单的情况下)。

找到了here的演示。

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

答案 2 :(得分:6)

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

但老实说,这让我觉得它是一种微软功能:是的,它增加了功能列表,但为什么要这么麻烦?你还记得六个月后你想再次使用它吗?

答案 3 :(得分:4)

对于emacs,multiple-cursors就是这样做的。

由模块的作者查看emacsrocks episode 13

答案 4 :(得分:3)

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

答案 5 :(得分:3)

Emacs的

YASnippet包使用它。请参阅screencast中的2:13和2:44。

答案 6 :(得分:2)

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

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

答案 7 :(得分:1)

在vim中应该是这样的:

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

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

这个想法取代了模式:

/paint(object,/ 

/object.paint(/ 

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

答案 8 :(得分: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 marker)记录到列表中,然后当您运行multi-insert命令时,它只是遍历列表,在每个列表中添加文本。

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

答案 9 :(得分:0)

不。对于主要基于控制台的UI,这将非常困难。

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

答案 10 :(得分:-2)

这看起来像正则表达式搜索/替换傻瓜。当用户没有意识到计算机提出的泛化错误时,麻烦就开始了。当选择的替代泛化在第1200个编辑区域中产生灾难时,问题会变得更加严重。

有人说 - 不,据我所知,在Emacs中没有支持。