Есть ли способ переименовать открытый файл в Emacs? Пока я это просматриваю? Что-то вроде save-as, но оригинал должен уйти.
237
Попробуйте эту функцию из .emacs Стива Йегге :
;; источник: http://steve.yegge.googlepages.com/my-dot-emacs-file (defun переименовать файл-и-буфер (новое имя) Msgstr "Переименовывает текущий буфер и файл, который он посещает, в NEW-NAME." (интерактивное "sNew name:") (пусть ((имя (имя буфера)) (имя файла (имя-буфера-файла))) (если (не имя файла) (имя сообщения "Буфер"% s "не посещает файл!") (if (get-buffer new-name) (сообщение «Буфер с именем«% s »уже существует!» new-name) (progn (переименовать файл имя файла new-name 1) (переименовать буфер новое имя) (set-посещения-имя-файла новое-имя) (set-buffer-updated-p nil))))))
Взгляните на эту страницу, там есть еще одна очень полезная связанная функция, которая называется "move-buffer-file".
(setq uniquify-buffer-name-style 'forward)
значением, если у вас есть буфер с именемusers\index.html
(потому что у вас уже есть другой буфер дляposts\index.html
), переименование завершится неудачей(set-buffer-modified-p nil)
кажется ненужным Если вы вызываетеrename-file-and-buffer
измененный буфер и затем пытаетесь его уничтожить, он с радостью сделает это, не предупредив вас о несохраненных изменениях.Да, с помощью
dired
режима вы можете:C-x d
открыть заправилRET
выбрать каталог текущего файлаC-x C-j
(dired-jump
к названию текущего файла, в Dired)R
переименовать файл (илиdired-do-rename
).q
вернуться в (переименованный) файловый буферПереименование эквивалентно оболочке
mv
, но оно также обновит все открытые буферы и, в отличие отmv
него, не изменит доступ и время изменения файла в файловой системе.источник
C-x C-j
умолчанию это не связано для меня. ДелатьM-x load-library RET dired-x RET
первым делает это связанным.C-x C-j
он не связан, это просто сделатьM-x dired-jump
в первый раз. Он автоматически загрузитсяdired-x
(что также приведетC-x C-j
к определению с этого момента).Просто для полноты, поскольку некоторые люди могут посещать эту страницу, думая, что они получат ответ на функцию «сохранить как» в Emacs, это Cx Cw для открытого файла.
источник
File > Save as...
Мой фаворит - тот из Magnars (известность из Emacs пород ).
В отличие от других альтернатив, вам не нужно вводить имя с нуля - вы получаете текущее имя для изменения.
Спасибо Джеймсу Яну за правильную версию.
источник
Вот более надежная версия, адаптированная от Stevey.
источник
Вот еще одна версия, которая довольно надежна и в курсе VC:
Вы можете прочитать больше об этом здесь .
источник
Если вы используете Spacemacs, то вы получаете это поведение бесплатно, поскольку оно поставляется с реализацией
rename-current-buffer-file
(основанной на магнарах), к которой по умолчанию привязаноSPC-f-R
.https://github.com/syl20bnr/spacemacs/blob/bd7ef98e4c35fd87538dd2a81356cc83f5fd02f3/layers/%2Bdistributions/spacemacs-base/funcs.el#L294
источник
Есть очень простой способ, вы нажимаете команду Mx и затем набираете vc-rename-file , после чего вам просто нужно выбрать ваш текущий файл в каталоге, а затем выбрать новое имя. Бафф с измененным файлом будет обновлен.
Источник: https://www.gnu.org/software/emacs/manual/html_node/emacs/VC-Delete_002fRename.html
источник
в зависимости от версии Magnars, я изменил, как показано ниже, исправил часть имени файла INIT:
источник
Это может быть достигнуто путем копирования. shift + c для файла, и emacs попросит вас указать имя пути, включая имя файла, поэтому вы просто указываете новое имя и вводите ... конечно, вы должны удалить предыдущее.
источник