代码之家  ›  专栏  ›  技术社区  ›  Charles Duffy

Emacs查询替换为文本转换

  •  9
  • Charles Duffy  · 技术社区  · 17 年前

    我想在文件中找到与表单的regexp匹配的任何文本 T [A-Z] U (例如,一场比赛 U ,并转换匹配的文本,使大写字母为小写。例如,对于regexp x[A-Z]y

    xAy
    

    变成

    xay
    

    xZy
    

    变成

    xzy
    

    Emacs' query-replace 函数允许反向引用,但不允许对匹配文本进行转换。是否有一个内置函数可以实现这一点?有人有我可以使用的短Elisp函数吗?

    使现代化

    \, 在替换表达式中,引入(任意?)Elisp表达式。例如,上述问题的解决方案是

    M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
    
    3 回复  |  直到 12 年前
        1
  •  14
  •   insin    17 年前

    看起来像 Steve Yegge 事实上,几年前已经发布了这个问题的答案: "Shiny and New: Emacs 22." 向下滚动到“在替换字符串中更改大小写”,您将看到他使用 replace-regexp 作用

    \,(capitalize \1) . 阅读帮助文本时,它看起来只是在交互模式下,但这似乎是最有必要的地方。

        2
  •  1
  •   Cookie Monster Cookie Monster    17 年前

    在这种情况下,qrr的另一种选择是录制宏并重放它。(isearch forward regexp,选择字符,downcase region。)我发现动态宏更容易,因为如果regexp出错,您会立即得到反馈。

        3
  •  0
  •   jfm3    17 年前

    我也会使用宏来执行,但这只是因为从正则表达式的替换字符串中执行代码对我来说非常不直观。如果您正在编写一个批处理脚本或一些需要快速运行的东西,\,当然是最好的选择。