2013-03-08 4 views
1

Я посмотрел в различных местах, и, наконец, придумал следующую установку для «автосохранение» режим в Emacs:Emacs auto-save: Почему файлы не хранятся в правильной папке?

(defvar my-auto-save-folder (concat "~/.emacs.d/auto-save")); folder for auto-saves 
(setq auto-save-list-file-prefix "~/.emacs.d/auto-save/.saves-"); set prefix for auto-saves 
(setq auto-save-file-name-transforms `((".*", my-auto-save-folder t))); location for all auto-save files 
(setq tramp-auto-save-directory my-auto-save-folder); auto-save tramp files in local directory 

После этой установки в течение нескольких недель, я посетил ~/.emacs.d и нашел что папка ~/.emacs.d/auto-save пуста, а ~/.emacs.d содержит два файла автосохранения формы #!home!<myusername>!<myfolder>!<myfile>. Почему файлы автоматического сохранения не сохраняются в ~/.emacs.d/auto-save? [Папка auto-save имеет права 775, .emacs.d 700]

ответ

5

Ваша ошибка в:

(defvar my-auto-save-folder (concat "~/.emacs.d/auto-save")); folder for auto-saves 

(звонок к concat с одним аргументом бессмыслен, кстати).

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

Emacs определяет имена каталогов по завершающему /, что означает, что «каталог часть» путь вы использовали это «~/.emacs.d /».

Вы хотите:

(defvar my-auto-save-folder "~/.emacs.d/auto-save/"); folder for auto-saves 

Позиционирование запятой в следующем тоже странно (хотя, видимо, это все еще работает):

`((".*", my-auto-save-folder t))) 

Это должно быть действительно:

`((".*" ,my-auto-save-folder t))) 
+0

Привет, phils, спасибо за помощь. Почему размещение запяты важно (точнее: почему это должно быть, как вы указали)? –

+1

Marius: Прочтите это: 'C-h i g (elisp) Backquote RET'.В запятой говорится о том, чтобы оценить 'my-auto-save-folder', поэтому он связан с этим элементом списка, а не с предыдущим элементом'.. * ''(В какой позиции он больше похож на случайную попытку использовать значения, разделенные запятыми, в списке lisp!). – phils

+0

Отлично, большое спасибо, phils. –

1

Это то, что я имею в моих .emacs, который хорошо работает для меня:

(add-to-list 'auto-save-file-name-transforms 
      (list "\\(.+/\\)*\\(.*?\\)" (expand-file-name "\\2" my-auto-save-folder)) 
      t) 
+0

Было бы неплохо иметь более подробную информацию о коде. Я нашел здесь нечто подобное (http://lists.gnu.org/archive/html/bug-gnu-emacs/2003-09/msg00022.html), но это не совсем то же самое. Я также нашел http://stackoverflow.com/questions/2020941/emacs-newbie-how-can-i-hide-the-buffer-files-that-emacs-creates, который использует 'expand-file-name' вместо' concat'. –

+0

jtahlborn: Это выглядит немного странно. Установка аргумента 'UNIQUIFY' (' t') означает, что используется только часть каталога замененного имени, поэтому нет смысла заменять вторую группу на этот путь (хотя, поскольку ваша вторая группа не жадна, я не думайте, что он когда-либо будет содержать что-либо). – phils

+0

@phils - я не задаю аргумент uniquify, это последний параметр для добавления в список. и он отлично работает. – jtahlborn

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