【问题标题】:I'm looking for an application/text editor that [closed]我正在寻找一个[关闭]的应用程序/文本编辑器
【发布时间】:2010-10-19 11:55:57
【问题描述】:

可以最好地帮助我在遇到每个匹配项时系统地修改正则表达式搜索的“替换”字段。

例如,我有一个 xml 文件,它需要在文本中的常规点插入短语“id = $number”,基本上,每次正则表达式匹配时都需要 $number++(id = 1、id = 2 等)直到文件结束。

我知道我可以只编写一个 bash/perl/python 脚本或类似的脚本,但我希望它至少对用户友好,这样我就可以教我聪明(但技术上不太倾向于)的员工如何使用它并进行自己的修改。正则表达式对他们来说不是问题。

到目前为止,我最接近的是 Notepad++ 的列编辑器和“增加 [number] by”功能,但是我必须编写一个单独的正则表达式来对齐所有内容,添加增量,然后再写一个来放置它背部。不幸的是,我需要在太多不同类型的文件上使用此功能并“替换”以使宏可行。

理想情况下,该程序也可用于 Windows 和 Linux(可接受 WINE,但首选原生),并具有“VI/VIM 输入”选项(如果它是文本编辑器),但这些是次要的重要性。

当然,如果有 OSS 解决方案就更好了,如果它提供了我正在寻找的解决方案,我很乐意向开发人员捐赠 20-50 美元。

抱歉冗长,非常感谢您的帮助!

【问题讨论】:

    标签: regex replace increment


    【解决方案1】:

    emacs(版本 22 及更高版本)可以满足您的需求。请参阅Steve Yegge's blog 了解有关它的非常有趣的内容。我认为这应该可行:

    M-x 替换正则表达式 替换正则表达式:在此处插入模式正则表达式 将正则表达式替换为:id = \#

    \# 是一个特殊的元字符,它被迄今为止发生的替换总数替换,从 0 开始。如果您希望列表从 1 而不是 0 开始,请使用以下替换字符串:

    id = \,(1+ \#)

    【讨论】:

    • “哦,是的!好棒的 C-x M-c M-蝴蝶...”xkcd.com/378 此处为原始海报。非常感谢您的建议!显然,我对 Emacs 的偏见使我蒙蔽了双眼,但我会在今晚晚些时候试一试(现在就下载它...... arrrrgh!)我唯一担心的是用户不友好 - 祈祷!
    • 好吧,这个顽固的 VI 人这次将向 Emacs 致敬。感谢您,非常感谢您——它的工作原理与宣传的一样。界面和快捷方式需要一些时间来适应,但我应该能够创建一些自定义的键绑定,是吗?再次感谢!
    【解决方案2】:

    JEdit 或许可以帮助您: http://www.jedit.org/

    您可以使用它进行各种正则表达式甚至基于 bean 结果的替换。

    【讨论】:

    • 嗨,这里是原始海报。感谢您的建议!我自己经常使用 Jedit,正则表达式确实不错,但我不知道 beanshell 有任何这样的功能——你或任何人能指出我正确的方向吗?
    • 是的,我之前从您提供的链接和jedit.org/users-guide/writing-macros-part.html 都了解了 beanshell 不幸的是,我仍然没有找到原始问题的简单解决方案。我希望它存在,因为 Jedit 是我最常使用的三个编辑器之一
    【解决方案3】:

    看看UltraEdit32。这很好。不是免费的,但可在 Windows、Linux 和 Mac 平台上使用。它具有基于正则表达式的搜索和替换。

    【讨论】:

    • 伟大的思想都一样。 :) 他们现在也有 linux/mac!
    • 酷!不知道...自从我停止使用 UltraEdit32 并切换到 Notepad++ 已经有很长时间了。但同意你的观点:UltraEdit32 是一个很棒的编辑器。现在要更改我的帖子以反映 Linux/Mac 版本。谢谢!
    【解决方案4】:

    UltraEdit32 很棒,我相信它具有您需要的功能。有一个 30 天的免费下载,所以你可以确保。 :)

    【讨论】:

      【解决方案5】:

      我知道你想要一个在 Windows/Linux 上可用的应用程序,但在 Mac 上还有另一个解决方案:TextWrangler,而且它是免费的。

      【讨论】:

      • TextWrangler 太棒了!
      • 你好,这里是原始海报。感谢您的建议!多年来,我一直是 BBedit 和 TextWrangler 的粉丝,但同样,我的实验室中没有人使用 mac :-( 另外,我不熟悉 Textwrangler 上的任何增量功能......它是什么?
      【解决方案6】:

      这个script应该让你在Vim做你想做的事。

      【讨论】:

      • 你好,这里是原始海报。感谢您的建议!我毫不怀疑它会像宣传的那样工作,但不幸的是,这对我的员工来说可能太复杂了:-(不过我肯定会把它归档为我自己使用!
      【解决方案7】:

      Vim 函数可以实现递增数字的技巧,而且编写起来并不难。例如,Vim wiki 说明了如何执行此操作。另见:h sub-replace-\=

      function! Counter()
          let i = g:c
          let g:c = g:c + 1
          return i
      endfunction
      
      :let c=1|%s/<\w\+\zs/\=' id="' . Counter() . '"'/g
      

      在这一点上,我们可能早已忘记了用户友好性,但 Vim 的 Ruby 支持也可以轻松完成这种事情:

      :ruby c=0
      :rubydo $_.gsub!(/<\w+/){|m| c += 1; m + ' id="' + c.to_s + '"'}
      

      或 Perl:

      :perl $c=1
      :perldo s/<\w+/$& . ' id="' . $c++ . '"'/eg
      

      【讨论】:

      • 嗨,这里是原始海报。感谢您的建议!这些看起来都可以解决问题,但我很高兴我教了他们正则表达式,他们可以在 KDE 中启动 firefox。他们的工作不需要严格的计算机技能,所以我认为他们的眼睛会盯着这个:p
      【解决方案8】:

      对我来说,这听起来像是 awk 的工作,而不是编辑的工作。

      【讨论】:

      • 嗨,这里是原始海报。感谢您的建议!我同意 awk/grep/sed 最终会很好地工作,但同样,我担心要求我的工人有点过分了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 2010-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多