【问题标题】:Which editors out of Emacs, Vim and JEdit support multiple simultaneous text insertion points?Emacs、Vim 和 JEdit 中的哪些编辑器支持多个同时文本插入点?
【发布时间】:2010-09-28 15:08:52
【问题描述】:

背景: JEdit(以及其他一些文本编辑器)支持称为Multiple simultaneous text insertion points 的功能。 (至少我在这里这么称呼它)。

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

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

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

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

【问题讨论】:

  • 有用吗?这是值得商榷的。不过,该功能最近似乎在一些知名度较高的文本编辑器中流行起来,因此它绝对超过了“纯学术”的水平。
  • 我一直坐在这里思考我会在上一个项目中使用它的所有时间......但我不会。它真的闻起来像寻找问题的解决方案。仅仅因为其他编辑正在进行功能竞赛并不意味着需要它。
  • 这很有趣。您是否也会对您个人不使用的编程语言的问题投反对票?我在哪里说“需要”这个功能......我只是问它是否在那里。
  • 很有用。我一直在 Eclipse 中使用它来重命名。

标签: vim emacs comparison text-editor


【解决方案1】:

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

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

【讨论】:

  • 我打算建议 .命令也。这是一个非常强大的功能!
【解决方案2】:

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

我想扩展它以允许您同时编辑它们会很简单(至少在简单的情况下)。

找到了它的演示 here

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      看看模块作者的emacsrocks episode 13

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          【解决方案6】:

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

          【讨论】:

            【解决方案7】:

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

            eg:
            Mx cua-selection-mode RET(如果您还没有使用此或 cua 模式,请启用全局次要模式)
            C-RET down down down(标记一个 1x3 字符矩形)
            在此处输入前缀
            C-RET(取消标记矩形返回正常编辑)

            【讨论】:

              【解决方案8】:

              在vim中应该是这样的:

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

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

              想法是替代模式:

              /paint(object,/ 
              

              /object.paint(/ 
              

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

              【讨论】:

                【解决方案9】:

                在 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 命令时,它只是遍历列表,在每个位置添加文本。

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

                【讨论】:

                  【解决方案10】:

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

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

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 2011-01-07
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-08
                    • 2022-06-15
                    相关资源
                    最近更新 更多