删除不满足正则表达式匹配的行

时间:2013-10-29 06:29:23

标签: emacs

假设我在Emacs中打开了一个文件,并使用C-y在文件末尾粘贴新内容。 我想处理一个案例,其中emacs删除所有我希望使用M-x highlight-lines-matching-regexp行的行。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:0)

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 "\\|")))

(*)显然,与正在添加到缓冲区后续的正则表达式相匹配的行仍然会受到影响。

此外,这将使用所有交互式高阻模式,因此如果您突出显示某些短语或任意正则表达式,那么这些行也将保留。 'line'正则表达式以^.*开头,以.*$结尾,因此如果您愿意,可以在自定义mapconcat函数中测试它。