2013-11-30 3 views
39

Я хочу создать новый файл в режиме ожидания. Есть ли команда «Создать новый файл» в режиме ожидания? Например, Когда я набираю «c» в режиме ожидания, он создает «untitled.txt». Это очень просто, но я не могу найти его.Как создать новый файл в режиме ожидания?

+4

Просто используйте 'C-x C-f'. –

+7

Я не хочу набирать C-x C-f. Я хочу более простой способ. –

+0

Что произойдет, если 'untitled.txt' уже существует? Просто поверьте мне, что эта проблема решена и 'C-x C-f' является самым простым способом. –

ответ

39

Просто нажмите C-x C-f. Это вызовет имя файла, используя текущий каталог текущего буфера в качестве каталога для его ввода. Для буфера с нулевым значением его текущий каталог - это просто каталог, на который вы смотрите.

+1

Это не работает для меня. Для меня, когда я делаю C-x, C-f, я получаю подсказку find-file. Я ввожу новое имя файла. Я получаю 'Файл не существует, создать буфер?' Я выбираю 'y'. Я получаю новый BUFFER с именем файла, которое я ввел. Однако, если я оставил буфер пустым, тогда, когда я сделаю C-x C-w, он предложит мне AGAIN ввести имя файла, и я вернусь туда, где я начал. Другими словами, этот метод заставляет меня вводить имя файла дважды. Предполагая, что я просто хочу создать файл, но не вводить какой-либо текст, есть ли способ обойти это? – incandescentman

+1

M-x shell и в оболочке типа 'touch filename'. Это работает только в системах, отличных от Windows, и только если вы еще не открыли оболочку внутри Emacs. –

+2

@incandescentman: Поскольку emacs пытается не создавать пустой файл, Emacs подтверждает, что вы действительно хотите создать пустой файл. Вот почему вам нужно подробное подтверждение. Чтобы этого избежать, вам нужно изменить буфер. Например, введите «a», затем удалите его в буфере. Или [elisp here] (http://stackoverflow.com/a/2592558/2931409) может делать то, что вы хотите. –

3

Если вы хотите, чтобы ввести имя файла, то я думаю, что это дубликат:

How do I create an empty file in emacs?

Если вы не хотите, чтобы ввести имя файла, вы можете по-прежнему использовать некоторые из этих ответов, и легко адаптировать других путем жесткого кодирования имени, а не предлагать его интерактивно.

+0

Да! Вот и все. Ваш код очень полезен. Я использовал некоторые функции в вашем коде. Большое спасибо. –

+0

Это единственное решение, которое действительно срабатывало так, как я этого хотел. – incandescentman

4

Следующие варианты содержат два (2) варианта, один из которых требует, чтобы touch был в $PATH. В качестве альтернативы можно использовать абсолютный путь. touch обычно доступен в системах с уникальным вкусом, например 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.")))))) 
+0

Теперь я могу понять, что вы имеете в виду. Я могу узнать много полезных советов emacs из этого кода. Благодарю. –

22

Если вы хотите 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"))) 
+0

Мне пришлось обернуть его в '(с-eval-after-load 'dired ...)' – Jay

6

Всего Я, наконец, решил это сам. Here - мой ответ. Ввод «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
  1. нажмите C-х C-й
  2. введите имя файлового
  3. нажмите C-J

после вышеуказанных шагов, Emacs создаст пустой буфер с именем вы ввод. Но emacs не поддерживает создание пустого файла по умолчанию. Вы можете обратиться к How do I create an empty file in emacs для получения дополнительных идей.

 Смежные вопросы

  • Нет связанных вопросов^_^