You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Emacs Dired中按列表及跨缓冲区选择同名文件?

Emacs Dired 相关问题解答

1. 根据指定文件名列表选择文件

这里有两种实用的操作方式:

  • 正则表达式批量标记:在Dired缓冲区按下 % m(对应命令dired-mark-files-regexp),输入匹配目标文件名的正则表达式。比如要选中a.txt、k.txt、z.txt,可以输入^a\.txt$|^k\.txt$|^z\.txt$,就能精确匹配并标记这些文件。
  • Elisp代码精确匹配:如果已有明确的文件名列表,在Dired缓冲区按下M-:打开Eval输入框,执行以下代码(替换括号内的文件名列表即可):
    (let ((files '("a.txt" "k.txt" "z.txt")))
      (dired-mark-if
       (lambda (file) (member (file-name-nondirectory file) files))))
    
    这种方法适合文件名较多、正则表达式写起来麻烦的场景。

2. 在另一个Dired缓冲区标记同名文件

按以下步骤操作即可实现:

  1. 保存源Dired的标记文件名:在A文件夹的Dired缓冲区,按下M-:执行代码:
    (setq my-marked-files (mapcar #'file-name-nondirectory (dired-get-marked-files)))
    
    执行后,当前标记的文件名会被存入my-marked-files变量中。
  2. 在目标Dired标记同名文件:打开B文件夹的Dired缓冲区,再次按下M-:执行:
    (dired-mark-if
     (lambda (file) (member (file-name-nondirectory file) my-marked-files)))
    
    执行完成后,B文件夹内与A中标记文件同名的文件会被自动标记。

如果需要频繁使用这个功能,可以把逻辑封装成自定义命令,添加到你的Emacs配置文件中:

(defun dired-save-marked-filenames ()
  (interactive)
  (setq my-marked-files (mapcar #'file-name-nondirectory (dired-get-marked-files)))
  (message "Saved %d marked filenames" (length my-marked-files)))

(defun dired-mark-saved-filenames ()
  (interactive)
  (when (boundp 'my-marked-files)
    (dired-mark-if
     (lambda (file) (member (file-name-nondirectory file) my-marked-files)))
    (message "Marked %d matching files" (length (dired-get-marked-files)))))

之后在源Dired中执行M-x dired-save-marked-filenames保存文件名,切换到目标Dired后执行M-x dired-mark-saved-filenames就能一键完成标记。

内容的提问来源于stack exchange,提问作者Lars Aurdal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 19:20:49