Background: JEdit(以及其他一些文本编辑器)支持名为Multiple simultaneous text insertion points的功能 . (至少's what I'm在这里称呼它) .
要了解这意味着什么,请查看链接 .
在现代文本编辑器中使用的所有功能中,初步研究似乎表明这是Emacs和Vim实际上不支持的一个功能 . 如果正确的话,这将是非常特殊的,因为找到一个文本编辑器功能很难进入这两个老派编辑中的至少一个 .
Question: 有没有人在Emacs,Vim或两者中看到或实现过这个功能?如果是,请指出解释详细信息的链接,脚本,参考或摘要 .
如果你知道另一种做同样(或类似)事情的方法,请告诉我 .
11 回答
vim的方法就是这样做 . 重复最后一次更改的命令 . 所以,例如,如果我更改指向引用的指针,并且我有一堆obj-> func,我想要更改为obj.func然后我搜索obj->,执行2cw将obj->更改为obj然后做nnn直到所有实例都被更改 .
也许并不像你所说的那样灵活,但它经常工作,并且非常直观和快速 .
moccur-edit.el
差不多做你想要的 . 将显示与正则表达式匹配的所有位置,并且编辑匹配会在相应的源中进行更改 . 但是,编辑是在事件的单个实例上完成的 .我想它可以直接扩展它以允许你同时编辑它们(至少在简单的情况下) .
有一个它的演示here .
事实证明,最新版本的moccur-edit不会实时应用更改 - 您必须应用更改 . 这些变化现在也可以撤销(很好的胜利) .
在EMACS中,您可以/将使用
M-x find-grep
和宏来执行此操作 . 如果你真的坚持它是全自动的,那么你将在宏中包含find-next
.但老实说,这让我觉得它是一种微软功能:是的,它增加了功能列表,但为什么要这么麻烦?你会记得它在六个月内存在,当你想再次使用它时?
对于emacs,multiple-cursors正是如此 .
请查看模块作者的emacsrocks episode 13 .
我不认为这个功能在Emacs或Vim中都没有直接的模拟,这并不是说用这个功能实现的一切都不可能通过两个“老派”编辑器以某种方式实现 . 和Emacs和Vim这样的大多数东西一样,高级用户可能能够非常快速地完成这样的任务,例如,像我这样的凡人可以花费五分钟来确定正确的grep搜索,并用适当的反向引用替换 .
YASnippet Emacs包使用它 . 见screencast中的2:13和2:44 .
另一个微小的相似之处:在Emacs中,
cua-selection-mode
(或cua-mode
)提供的矩形编辑功能会自动为您提供在标记矩形的左边缘或右边缘下方的多个插入点,以便您可以为所有这些线条键入公共前缀或后缀 .例如 . :
M-x
cua-selection-mode
RET(启用全局次要模式,如果您尚未使用此模式或cua模式)C-RET向下向下(标记1x3字符矩形)
在这里输入前缀
C-RET(取消标记矩形以恢复正常编辑)
在vim中它应该是这样的:
或类似的东西,我真的很擅长“模拟”正则表达式 .
这个想法取代了模式:
同
所以,是的,它是“支持的”
在Emacs lisp中执行此基本版本似乎很简单 . 这是为了当你只想要两个地方并行插入文本时:
当您运行它时,它会提示输入文本并将其插入到两个点(当前位置)和标记处 . 您可以使用
C-SPC
设置标记 . 这可以很容易地扩展到N个不同的位置 . 像set-insert-point
这样的函数会将当前位置(存储为Emacs marker)记录到列表中,然后当您运行multi-insert命令时,它只是遍历列表,在每个列表中添加文本 .我不确定处理更通用的“多编辑”功能的简单方法是什么 .
不 . 使用主要基于控制台的UI非常困难 .
也就是说,有类似的功能vim(和emacs,虽然我几乎没有使用它) - 搜索和替换,正如人们所说,更类似的,列插入模式:http://pivotallabs.com/users/brian/blog/articles/350-column-edit-mode-in-vi
这看起来像正则表达式搜索/替换傻瓜 . 当用户没有意识到计算机提出的泛化错误时,麻烦就开始了 . 当选择的替代泛化在第1200个编辑区域中产生灾难时,问题会变得更糟 .
话虽这么说 - 不,据我所知,Emacs没有支持 .