如何在dired模式下创建新文件?

问题描述 投票:0回答:7

我想在dired模式下创建一个新文件。 Dired 模式下是否有“创建新文件”命令? 例如,当我在 dired 模式下键入“c”时,它会创建“untitled.txt”。很简单,但是我找不到。

file emacs dired
7个回答
62
投票

只需按 C-x C-f。这将提示输入文件名,使用当前缓冲区的当前目录作为放置它的目录。对于 dired 缓冲区,其当前目录就是您正在查看的目录。


32
投票

如果您希望

c
在 Dired 模式下执行
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")))

13
投票
  1. 按 C-x C-f
  2. 输入文件名
  3. 按 C-j

完成上述步骤后,emacs 将使用您输入的名称创建一个空缓冲区。但emacs默认不支持创建空文件。更多想法可以参考如何在emacs中创建空文件


11
投票
谢谢大家,

我终于自己解决了这里是我的答案。在 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)) ) ) )
    

5
投票
以下内容包含两 (2) 个选项,其中之一要求

touch

 位于 
$PATH
 中——或者,可以使用绝对路径。  
touch
通常在unix风格的系统上可用,例如OSX等。该函数将自动对文件/缓冲区连续编号——例如untitled.txt;无标题1.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.")) )) ))
    

3
投票
如果你想输入文件名,那么我认为这是重复的:

如何在 emacs 中创建空文件?

如果您不想输入文件名,您仍然可以使用其中一些答案,并通过硬编码名称而不是交互式提示来轻松调整其他答案。


0
投票
答案有点过时了,因为现在有一个命令可以在 emacs 中执行此操作:

dired-create-empty-file
参见:[[info:emacs#Misc Dired Features]]

© www.soinside.com 2019 - 2024. All rights reserved.