【问题标题】:Deleting lines which do not satisfy the regexp match [duplicate]删除不满足正则表达式匹配的行[重复]
【发布时间】:2013-10-29 06:29:22
【问题描述】:

假设我在 Emacs 中打开了一个文件,并使用 C-y 将新内容粘贴到文件末尾。 我想处理这样一种情况,其中 emacs 删除了所有行,除了那些我使用过 M-x highlight-lines-matching-regexp 的行。

【问题讨论】:

    标签: emacs


    【解决方案1】:

    使用M-x keep-lines 删除与正则表达式不匹配的行。它还有一个别名M-x delete-non-matching-lines

    【讨论】:

    • 感谢您的回复。但是,如果我有多个多行的正则表达式怎么办?
    • regex1\|regex2\|regex3
    【解决方案2】:

    Barmar 的回答可能就足够了(Emacs copy matching lines 可能也很有趣),但这里有一个函数(或多或少*)可以满足您的要求:

    (defun my-keep-highlighted-lines ()
      "`keep-lines' matching any interactively-provided highlight regexps."
      (interactive)
      (require 'hi-lock)
      (keep-lines
       (mapconcat 'car hi-lock-interactive-patterns "\\|")))
    

    (*) 显然,匹配正则表达式的行被添加到缓冲区随后到突出显示仍然会受到影响。

    此外,这将使用 all 交互式锁定模式,因此如果您突出显示某些短语或任意正则表达式,这些行也会保留。 'line' 正则表达式以 ^.* 开头并以 .*$ 结尾,因此您可以根据需要在自定义 mapconcat 函数中对其进行测试。

    【讨论】:

      猜你喜欢
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-31
      • 1970-01-01
      相关资源
      最近更新 更多