我想在dired模式下创建一个新文件。在dired模式下是否有“创建新文件”命令?例如,当我在直接模式下键入“c”时,它会创建“untitled.txt”。这很简单,但我找不到它。
答案 0 :(得分:50)
按C-x C-f。这将提示输入文件名,使用当前缓冲区的当前目录作为目录放入。对于dired缓冲区,其当前目录就是您正在查看的目录。
答案 1 :(得分:26)
如果您希望{Did模式中的c
执行C-x C-f
所做的操作,答案是 琐事 :
(define-key dired-mode-map "c" 'find-file)
或者如果您希望它的名称为untitled.txt
,那么:
(define-key dired-mode-map "c"
(lambda () (interactive) (find-file "untitled.txt")))
答案 2 :(得分:8)
感谢所有人,我终于自己解决了。 Here是我的答案。在dired模式下键入“c”将提示您创建新的无标题文件。然后按Enter将创建新的无标题文件。是的,这是非常详细的代码。有人可以解决它。
(eval-after-load 'dired
'(progn
(define-key dired-mode-map (kbd "c") 'my-dired-create-file)
(defun create-new-file (file-list)
(defun exsitp-untitled-x (file-list cnt)
(while (and (car file-list) (not (string= (car file-list) (concat "untitled" (number-to-string cnt) ".txt"))))
(setq file-list (cdr file-list)))
(car file-list))
(defun exsitp-untitled (file-list)
(while (and (car file-list) (not (string= (car file-list) "untitled.txt")))
(setq file-list (cdr file-list)))
(car file-list))
(if (not (exsitp-untitled file-list))
"untitled.txt"
(let ((cnt 2))
(while (exsitp-untitled-x file-list cnt)
(setq cnt (1+ cnt)))
(concat "untitled" (number-to-string cnt) ".txt")
)
)
)
(defun my-dired-create-file (file)
(interactive
(list (read-file-name "Create file: " (concat (dired-current-directory) (create-new-file (directory-files (dired-current-directory))))))
)
(write-region "" nil (expand-file-name file) t)
(dired-add-file file)
(revert-buffer)
(dired-goto-file (expand-file-name file))
)
)
)
答案 3 :(得分:6)
完成上述步骤后,emacs将使用您输入的名称创建一个空缓冲区。但默认情况下,emacs不支持创建空文件。您可以参考How do I create an empty file in emacs了解更多提示
答案 4 :(得分:4)
以下包含两(2)个选项,其中一个选项要求touch
位于$PATH
中 - 或者,可以使用绝对路径。 touch
通常可用于unix风味系统,例如OSX等。此功能将自动对文件/缓冲区进行连续编号 - 例如,untitled.txt; untitled1.txt; untitled2.txt等。
(define-key dired-mode-map (kbd "c") 'dired-new-file)
(defun dired-new-file ()
(interactive)
(let* (
(n 0)
lawlist-filename
(dired-buffer-name (buffer-name)))
(catch 'done
(while t
(setq lawlist-filename (concat "untitled"
(if (= n 0) "" (int-to-string n))
".txt"))
(setq n (1+ n))
(if (not (file-exists-p lawlist-filename))
(throw 'done nil)) ))
(message "[b]uffer + file (maybe) | [f]ile + buffer (maybe)")
(let ((file-or-buffer (read-char-exclusive)))
(cond
((eq file-or-buffer ?b)
(switch-to-buffer (get-buffer-create lawlist-filename))
(text-mode)
(or (y-or-n-p (format "Save Buffer `%s'? "lawlist-filename))
(error "Done."))
(write-file lawlist-filename)
(with-current-buffer dired-buffer-name
(revert-buffer)))
((eq file-or-buffer ?f)
(start-process "touch-file" nil "touch" lawlist-filename)
(revert-buffer)
(or (y-or-n-p (format "Open `%s'? "lawlist-filename))
(error "Done."))
(find-file lawlist-filename)
(text-mode))
(t (message "You have exited the function.")) )) ))
答案 5 :(得分:3)
如果你想输入文件名,那么我认为这是一个副本:
How do I create an empty file in emacs?
如果您不想输入文件名,您仍然可以使用其中一些答案,并通过对名称进行硬编码而不是以交互方式提示来轻松调整其他人。