Я хочу создать новый файл в режиме dired. Есть ли в dired-режиме команда "создать новый файл"? Например, когда я набираю «c» в режиме dired, создается «untitled.txt». Это очень просто, но я не могу его найти.
Как создать новый файл в режиме dired?
Ответы (6)
Просто нажмите C-x C-f. Это запросит имя файла, используя текущий каталог текущего буфера в качестве каталога, в который его нужно поместить. Для управляемого буфера его текущий каталог - это просто каталог, на который вы смотрите.
File does not exist, create buffer?
Я выбираю y
. Я получаю новый БУФЕР с указанным мной именем файла. Однако, если я оставлю буфер пустым, тогда, когда я сделаю C-x C-w, он снова предложит мне ввести имя файла, и я вернусь к тому, с чего начал. Другими словами, этот метод заставляет меня вводить имя файла дважды. Предполагая, что я просто хочу создать файл, но не вводить текст, есть ли способ обойти это?
- person incandescentman; 20.08.2015
touch filename
. Это работает только в системах, отличных от Windows, и только в том случае, если у вас еще нет открытой оболочки внутри Emacs.
- person Robin Green; 20.08.2015
Если вы хотите, чтобы 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")))
(with-eval-after-load 'dired ...)
- person Jay; 29.09.2016
Спасибо всем, Я наконец решил это сам. Вот мой ответ. Ввод «c» в режиме dired предложит вам создать новый безымянный файл. Затем нажмите 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))
)
)
)
- нажмите C-x C-f
- введите имя файла
- нажмите C-j
после вышеуказанных шагов emacs создаст пустой буфер с введенным вами именем. Но emacs не поддерживает создание пустых файлов по умолчанию. Вы можете обратиться к Как мне создать пустой файл в emacs для получения дополнительных идей
Следующее содержит две (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.")) )) ))
Если вы хотите ввести имя файла, то я думаю, что это дубликат:
Как создать пустой файл в emacs?
Если вы не хотите вводить имя файла, вы все равно можете использовать некоторые из этих ответов и легко адаптировать другие, жестко закодировав имя, а не запрашивая его в интерактивном режиме.
untitled.txt
уже существует? Просто поверьте мне, что эта проблема решена иC-x C-f
самый простой способ - person abo-abo   schedule 30.11.2013touch
аналог в dired, согласитесь - person Dodgie   schedule 30.01.2017