例如 : 输入 % m ,可以标记所有名称匹配某个正则表达
式的文件输入 % R ,然后根据提示输入
\(.*\)\.txt ,作为 FROM ,再根据提示输入
\1.doc 作为 TO ,就会把所有选定的文件中的文件
的后缀扩展名称从 txt 变成 doc .
把下面的代码,加入到 .emacs 中 。
(add-hook 'dired-mode-hook (lambda () (interactive) (make-local-variable 'dired-sort-map) (setq dired-sort-map (make-sparse-keymap)) (define-key dired-mode-map "s" dired-sort-map) (define-key dired-sort-map "s" '(lambda () "sort by Size" (interactive) (dired-sort-other (concat dired-listing-switches "S")))) (define-key dired-sort-map "x" '(lambda () "sort by eXtension" (interactive) (dired-sort-other (concat dired-listing-switches "X")))) (define-key dired-sort-map "t" '(lambda () "sort by Time" (interactive) (dired-sort-other (concat dired-listing-switches "t")))) (define-key dired-sort-map "n" '(lambda () "sort by Name" (interactive) (dired-sort-other (concat dired-listing-switches ""))))))
Windows 的文件管理器可以把目录优先排在前面。把下面 的代码放在你的 .emacs 中,可以实现这个功能。
(defun sof/dired-sort () "Dired sort hook to list directories first." (save-excursion (let (buffer-read-only) (forward-line 2) ;; beyond dir. header (sort-regexp-fields t "^.*$" "[ ]*." (point) (point-max)))) (and (featurep 'xemacs) (fboundp 'dired-insert-set-properties) (dired-insert-set-properties (point-min) (point-max))) (set-buffer-modified-p nil)) (add-hook 'dired-after-readin-hook 'sof/dired-sort)
我不知道在哪里看到的文章上讲 C-x C-j 可以用 dired mode 打开正在编辑的文件的所在目录,但是我的版本的 Emacs 居然没有这个快键,而且这个键没有绑定任何命令。 于是我就自己加了一段代码实现这个功能。
;; C-x C-j open the directory of current buffer (global-set-key (kbd "C-x C-j") (lambda () (interactive) (if (buffer-file-name) (dired default-directory))))
用 M-<up> 打开父目录。
(add-hook 'dired-mode-hook (lambda () (interactive) (define-key dired-mode-map (kbd "<M-up>" ) 'dired-up-directory) (define-key dired-mode-map (kbd "ESC <up>" ) 'dired-up-directory)
我发现在 console 下 ALT + <up> 键实际是 ESC <up> 但 是在GUI却是 M-<up> ,
(setq dired-omit-extensions '("CVS/" ".o" "~" ".bin" ".lbin" ".fasl" ".ufsl" ".a" ".ln" ".blg" ".bbl" ".elc" ".lof" ".glo" ".idx" ".lot" ".fmt" ".tfm" ".class" ".fas" ".lib" ".x86f" ".sparcf" ".lo" ".la" ".toc" ".log" ".aux" ".cp" ".fn" ".ky" ".pg" ".tp" ".vr" ".cps" ".fns" ".kys" ".pgs" ".tps" ".vrs" ".idx" ".lof" ".lot" ".glo" ".blg" ".bbl" ".cp" ".cps" ".fn" ".fns" ".ky" ".kys" ".pg" ".pgs" ".tp" ".tps" ".vr" ".vrs"))
用来定义你不想看到的文件的扩展名,然后就可以 M-o 过滤掉你不想看到的文件。 再按一次 M-o 就可以看到所 有的文件。
还可以用 M-x dired-omit-expunge 用来 regexp 过滤文件。
(add-hook 'dired-mode-hook (lambda () (interactive) (define-key dired-mode-map (kbd "/") 'dired-omit-expunge)))
% g dired-mark-files-containing-regexp :: 标记所有包含某个正则表达式的文件。
Unix 系统下的 find 命令可以做各种各样的查找,M-x find-dired 可以提供 find 命令 的接口,把find 命令的结果作为一个虚拟的 dir ,用 dired mode 显示,所有 dired 的 操作依然有用。这是很有用的,例如,遍历子目录下的的所有 .cc 文件,然后在这些文 件中查找并替换,首先M-x find-dired 过滤出所有 .cc 文件,产生一个虚拟的 dired , 然后运行 M-x dired-do-query-replace-regexp 。还有很多其他操作。
(defvar wcy-dired-mode-hide-column-regex "^\\s-\\{2\\}[drwx-]\\{10\\}\\s-+[0-9]+\\s-+\\sw+\\s-+\\sw+" "doc") (defun wcy-dired-mode-hide-column () (interactive) (when (eq major-mode 'dired-mode) (save-excursion (save-match-data (goto-char (point-min)) (while (re-search-forward wcy-dired-mode-hide-column-regex nil t nil) (let ((o (make-overlay (match-beginning 0) (match-end 0)))) (overlay-put o 'invisible t) (overlay-put o 'id 'wcy-dired-mode-hide-column))))))) (defun wcy-dired-mode-show-column () (interactive) (when (eq major-mode 'dired-mode) (mapc (lambda (o) (if (eq (overlay-get o 'id) 'wcy-dired-mode-hide-column) (delete-overlay o))) (overlays-in (point-min) (point-max))))) ;; 注意和 (add-hook 'dired-after-readin-hook 'sof/dired-sort) 的冲突要保证 ;; dired-after-readin-hook 中 wcy-dired-mode-hide-column 在 sof/dired-sort 之后 (when (eq system-type 'windows-nt) (add-hook 'dired-after-readin-hook 'wcy-dired-mode-hide-column t nil))