(defun make-lines-invisible (regexp &optional arg) "Make all lines matching a regexp invisible and intangible. With a prefix arg, make it visible again. It is not necessary that REGEXP matches the whole line; if a hit is found, the affected line gets automatically selected. This command affects the whole buffer." (interactive "MRegexp: \nP") (let (ov ovs) (cond ((equal arg '(4)) (setq ovs (overlays-in (point-min) (point-max))) (mapc (lambda (o) (if (overlay-get o 'make-lines-invisible) (delete-overlay o))) ovs)) (t (save-excursion (goto-char (point-min)) (while (re-search-forward regexp nil t) (setq ov (make-overlay (line-beginning-position) (line-end-position))) (overlay-put ov 'make-lines-invisible t) (overlay-put ov 'invisible t) (overlay-put ov 'intangible t))))))) (global-set-key "\C-cz" 'make-lines-invisible)