当我在Emacs dirmode中键入 r 时,它会进入一种允许通过编辑列表进行目录操作(例如重命名,移动,删除)的模式。
我有一个特定的文件,比如foo
,我想在其原始目录下创建一个新目录,将该目录命名为foo
,然后将该文件移动到该目录中,然后给出它有一个不同的名称,比如bar
:
/path/to/the/file/foo
↓
/path/to/the/file/foo/bar
我在此模式下编辑了列表,并进行了保存,但操作失败。看起来像这样的编辑不允许创建目录。我能做些什么来让这成为可能吗?
我有很多类似的任务要做,而编辑emacs dirmode对我来说最容易做的事情就是编写一个shell脚本来完成它。
答案 0 :(得分:2)
您可以按如下方式覆盖wdired-do-renames
的实现(这个想法只是在重命名之前创建每个目标文件的父目录):
diff --git a/lisp/wdired.el b/lisp/wdired.el
index 2e53944..cc838cf 100644
--- a/lisp/wdired.el
+++ b/lisp/wdired.el
@@ -490,6 +490,7 @@ non-nil means return old filename."
(require 'dired-aux)
(condition-case err
(let ((dired-backup-overwrite nil))
+ (wdired-create-parentdirs file-new)
(dired-rename-file file-ori file-new
overwrite))
(error
@@ -499,6 +500,10 @@ non-nil means return old filename."
err)))))))))
errors))
+(defun wdired-create-parentdirs (file-new)
+ "Create parent directories of destination filename."
+ (message "create dir for file %s" file-new)
+ (make-directory (file-name-directory file-new) t))
(defun wdired-exit ()
"Exit wdired and return to dired mode.
来源:Joakim Verona来自http://www.emacswiki.org/emacs/WDired#toc1(我稍微清理了补丁)
答案 1 :(得分:1)
AFAIK,您无法以这种方式创建目录,即处于wdired
模式时(这是您在Dired缓冲区可编辑时所处的位置)。
但是,您可以退出wdired
(C-x C-q
),然后使用+
创建目录。
(顺便说一句,我认为你有一个拼写错误:Dired中的C-r
没有切换wdired
模式,即可编辑性/只读。它只是调用isearch-backward
。你使用{ {1}}切换只读。)