2008-12-28 11 views
21

背景: JEdit(以及其他一些文本编辑器也支持)称为Multiple simultaneous text insertion points的功能。 (至少这就是我在这里所说的)。Emacs,Vim和JEdit中的哪些编辑器支持多个同时插入文本点?

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

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

问题:有没有人在Emacs,Vim或两者中看过或实现过这个功能?如果是这样,请给我一个链接,脚本,参考或摘要来解释详细信息。

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

+0

它真的有用吗? – PEZ 2008-12-28 18:51:18

+0

有用吗?这是有争议的。尽管如此,这个特色近来在一些高调的文本编辑中似乎正在引起轰动,所以它绝对超过了“纯学术”的水平。 – dreftymac 2008-12-28 18:55:35

+0

我一直坐在这里想着我所有的时间,我会在我上一个项目中使用这个...我不会有。它真的闻起来像寻找问题的解决方案。仅仅因为其他编辑正在进行功能竞赛并不意味着它是需要的。 – jpeacock 2008-12-28 19:22:51

回答

8

vim做到这一点的方法是。重复上次更改的命令。所以,例如,如果我将指针改为参考,并且我有一堆 obj-> func ,我想更改为 obj.func 然后我搜索obj->,do 2cw以更改obj - > obj。,然后做nnn直到所有实例发生变化。

也许不像您正在谈论的那样灵活,但它的工作频率非常高,而且非常直观和快速。

3

我不认为这个特性在Emacs或Vim中有直接的模拟效果,这并不是说用这种“老派”编辑器以某种方式实现这个功能所能达到的一切都是不可能的。就像Emacs和Vim的大多数事情一样,即使像我这样的凡人可以花五分钟计算出正确的grep搜索并替换为适当的反向引用,功耗用户也可能非常快速地完成这样的任务。

6

在EMACS中,你可以/将会用M-x find-grep和一个宏来做到这一点。如果你真的坚持认为它是全自动的,那么你会在宏中包含find-next

但说实话,这让我觉得它是一种微软功能:是的,它增加了功能列表,但为什么呢?你会记得它在六个月内存在,当你想再次使用它吗?

7

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

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

有一个它的演示here

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

-2

这看起来像正则表达式搜索/替换为傻瓜。当用户没有意识到计算机提出的概括是错误的时候,麻烦就开始了。如果选择的替代概括会在第1200屏幕的编辑区域产生灾难,麻烦会变得更糟。

这就是说 - 不,根据我所知,Emacs没有支持。

1

应该是这样在vim:

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

或者类似的东西,我在“模拟”正则表达式非常糟糕。

的想法是替代模式:

/paint(object,/ 

/object.paint(/ 

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

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)记录到一个列表中,然后当您运行多插入命令时,它会遍历列表并在每个列表中添加文本。

我不知道什么是一种简单的方法来处理更一般的“多编辑”功能。

1

另一个轻微相似:在Emacs中,通过cua-selection-mode(或cua-mode)中提供的矩形编辑功能自动提供多个插入点向下标记矩形的左边缘或右边缘,这样就可以键入一个共同的前缀或后缀来所有这些线路。

例如:
的Mxcua-selection-modeRET(启用全局次要模式下,如果你还没有使用这个或CUA模式)
C-RET下来下来下来(标志着一个1×3字符矩形)这里
类型前缀
C-RET(取消标记的矩形,返回到正常编辑)

相关问题