突然有一个想法,wdired 很好用,如果能编辑子目录及文件就更牛逼了!但是现在貌似不可以,因为dired并不显示下一级目录中的内容。大家怎么看?
在某个目录上按 i 试试
1 个赞
以前还真没用过这个,比较接近我想要的了——比如直接把中间层级的目录删掉
用ivy选择目录然后插入怎么样
(defun cm/dired-insert-selected-dir (&rest args)
(interactive
(list (expand-file-name (read-directory-name "Select a dir: "))
(if current-prefix-arg
(read-string "Switches for listing: "
(or dired-subdir-switches dired-actual-switches)))))
(apply #'dired-maybe-insert-subdir args))
Dired 跟 ls
绑定在一块儿,要所有列出子目录的话,可以用 -R
/ --recursive
选项。在 Dired 中使用 C-u s
(dired-sort-toggle-or-edit
) 调整 ls
命令行参数。
ls
不支持 --tree
,不清楚为什么不加入,感觉是很有用的功能,树状输出也比 -R
紧凑。ls
也不支持忽略特定的文件,感觉也是很实用的功能。
Dired 和 wdired 的功能很容易实现,下面第一个实现 Dired,第二个实现 wdired,不过 Emacs Lisp 实现的话容易卡住 Emacs,而且用 directory-files-recursively
估计会使这个问题更严重。
开发 ls
/ Dired 的替代品应该有足够的理由,不少人应该已经分别写过了。
(defun my-edit-directory (dir)
(interactive "DDir: ")
(with-current-buffer (get-buffer-create (format "Edit %s" dir))
(display-buffer (current-buffer))
(erase-buffer)
(dolist (filename (directory-files-recursively dir ""))
(insert (propertize filename 'filename filename) "\n"))))
(defun my-edit-directory-commit (&optional query)
(interactive "P")
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(pcase (get-text-property (line-beginning-position) 'filename)
('nil (user-error "Text property filename is missing"))
(old (let ((new (buffer-substring (line-beginning-position)
(line-end-position))))
(unless (string= old new)
(when (or (not query) (y-or-n-p (format "Rename? %s -> %s" old new)))
(message "Renaming %s -> %s" old new)
(rename-file old new))))))
(forward-line))))
Dired 也支持别的程序,比如 find(1)
,通过 M-x find-dired
,也能输出子目录。
1 个赞
moreutils的vidir,当然比dired差远了