Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Emacs、Vim和JEdit中的哪些编辑器支持多个同时的文本插入点?_Vim_Emacs_Comparison_Text Editor - Fatal编程技术网

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

Emacs、Vim和JEdit中的哪些编辑器支持多个同时的文本插入点?,vim,emacs,comparison,text-editor,Vim,Emacs,Comparison,Text Editor,背景:JEdit(以及其他一些文本编辑器)支持名为的功能。(至少我在这里这么称呼它) 要了解这意味着什么,请查看链接 在现代文本编辑器中使用的所有功能中,初步研究似乎表明这是Emacs和Vim实际上都不支持的一个功能。如果正确的话,这将是非常特殊的,因为很难找到一个文本编辑器功能,它至少没有进入这两个老式编辑器中的一个 问题:是否有人在Emacs、Vim或两者中看到或实现过此功能?如果是这样,请给我一个链接、脚本、参考或摘要来解释细节 如果您知道做相同(或类似)事情的其他方法,请告诉我。vim的

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

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

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

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


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

vim的方法是。重复上次更改的命令。例如,如果我改变一个指向一个引用的指针,我有一堆 obj->func 我想换成 obj.func 然后我搜索obj->,执行2cw将obj->更改为obj.,然后执行n.n.n.,直到所有实例都更改


可能不像您所说的那样灵活,但它工作频繁,而且非常直观和快速。

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

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


但老实说,这给我的印象是微软的一种功能:是的,它增加了功能列表,但为什么要麻烦呢?当你想再次使用它时,你还记得它在六个月后就已经存在了吗?

moccur edit.el几乎可以满足你的需要。将显示与regexp匹配的所有位置,编辑匹配项会在相应的源中进行更改。但是,编辑是在引用的单个实例上完成的

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

找到了它的一个演示


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

在vim中应该是这样的:

%s/paint.\((.*),/\1.paint(/ 
或者类似的,我真的不擅长“模拟”正则表达式

其理念是替代模式:

/paint(object,/ 


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

Emacs包使用它。请参见。

否中的2:13和2:44。这对于一个主要基于控制台的UI来说是相当困难的


这就是说,vim(和emacs,尽管我没有这么多地使用它)中也有类似的功能-搜索和替换,正如人们所说,更类似的是,列插入模式:

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


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

另一个细微的相似之处:在Emacs中,
cua选择模式(或
cua模式
)提供的矩形编辑功能会自动在标记矩形的左边缘或右边缘下提供多个插入点,因此,您可以为所有这些行键入一个通用前缀或后缀

e、 g.:
M-x
cua选择模式
RET(如果您尚未使用此模式或cua模式,则启用全局次要模式)
C-RET向下(标记一个1x3字符的矩形)
在此处键入前缀
C-RET(取消矩形标记以返回正常编辑)

对于emacs,正是这样做的


请查看本模块作者编写的。

有用吗?这是有争议的。尽管如此,该功能最近似乎在一些知名度更高的文本编辑器中获得了发展势头,因此它肯定超过了“纯学术”的水平。我一直坐在这里思考我在上一个项目中使用该功能的所有时间……我不会这样做。它闻起来真像是在寻找问题的解决方案。仅仅因为其他编辑正在进行功能竞赛并不意味着需要它,这很有趣。您是否对您个人不使用的编程语言的问题投了反对票?我在哪里说过这个功能是“需要的”。。。我只是问它是否在那里,它很有用。我一直在Eclipse中使用它来重命名东西。我也是。这是一个惊人的强大功能!
(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)))