通过编辑创建目录

时间:2014-05-03 12:48:51

标签: emacs dir

当我在Emacs dirmode中键入 r 时,它会进入一种允许通过编辑列表进行目录操作(例如重命名,移动,删除)的模式。

我有一个特定的文件,比如foo,我想在其原始目录下创建一个新目录,将该目录命名为foo,然后将该文件移动到该目录中,然后给出它有一个不同的名称,比如bar

/path/to/the/file/foo
↓
/path/to/the/file/foo/bar

我在此模式下编辑了列表,并进行了保存,但操作失败。看起来像这样的编辑不允许创建目录。我能做些什么来让这成为可能吗?

我有很多类似的任务要做,而编辑emacs dirmode对我来说最容易做的事情就是编写一个shell脚本来完成它。

2 个答案:

答案 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缓冲区可编辑时所处的位置)。

但是,您可以退出wdiredC-x C-q),然后使用+创建目录。

(顺便说一句,我认为你有一个拼写错误:Dired中的C-r没有切换wdired模式,即可编辑性/只读。它只是调用isearch-backward。你使用{ {1}}切换只读。)