小功能 dired 中只显示匹配的文件 比C-s search 好用些

(define-key dired-mode-map "/" #'dired-name-filter-only-show-matched-lines)

(defun dired-name-filter-only-show-matched-lines (filter-regexp)
  (interactive "s(只显示匹配的文件): ")
  (let ((dired-marker-char 16)
        (files (directory-files default-directory t)))
    (save-excursion
      (dolist (file files)
        (when (and (dired-goto-file  (expand-file-name file))
                   (not (string= "" filter-regexp))
                   (string-match filter-regexp (file-name-nondirectory file)))
          (dired-mark 1))))
    (dired-toggle-marks)
    (dired-do-kill-lines nil (concat "Filter:'" filter-regexp "' omitted %d line%s"))
    (when (eobp) (forward-char -1))
    (dired-move-to-filename)))
1 个赞

看起来效果等同于:

  1. % m (dired-mark-files-regexp)
  2. t (dired-toggle-marks)
  3. k (dired-do-kill-lines)

整理成一个命令:

(defun foo ()
  (interactive)
  (call-interactively #'dired-mark-files-regexp)
  (command-execute "tk"))
4 个赞

dired-narrow 有提供类似的功能。

(use-package dired-narrow
  :ensure t
  :commands dired-narrow)