如何在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缓冲区标记同名文件
按以下步骤操作即可实现:
- 保存源Dired的标记文件名:在A文件夹的Dired缓冲区,按下
M-:执行代码:
执行后,当前标记的文件名会被存入(setq my-marked-files (mapcar #'file-name-nondirectory (dired-get-marked-files)))my-marked-files变量中。 - 在目标Dired标记同名文件:打开B文件夹的Dired缓冲区,再次按下
M-:执行:
执行完成后,B文件夹内与A中标记文件同名的文件会被自动标记。(dired-mark-if (lambda (file) (member (file-name-nondirectory file) my-marked-files)))
如果需要频繁使用这个功能,可以把逻辑封装成自定义命令,添加到你的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
相关产品推荐
相关产品推荐

