有没有办法在Emacs中重命名打开的文件?在我看的时候?类似于另存为,但原始文件应该删除。


当前回答

如果您正在使用Spacemacs,那么您可以免费获得这种行为,因为它附带了一个重命名-current-buffer-file的实现(基于magnars),默认情况下绑定到src -f- r。

https://github.com/syl20bnr/spacemacs/blob/bd7ef98e4c35fd87538dd2a81356cc83f5fd02f3/layers/%2Bdistributions/spacemacs-base/funcs.el#L294

其他回答

优秀的crux包具有crux-rename-file-and-buffer(以及许多其他有用的函数)。

Emacs 26.3(2020-04-03)具有重命名文件功能,可以使用M-x重命名文件来重命名当前文件或任何其他文件。

是的,使用dired模式,你可以:

c - xd打开干燥 RET选择当前文件的目录 C-x C-j (Dired -跳转到当前文件的名称,在Dired中) R来重命名文件(或dired-do-rename)。 Q返回(重命名的)文件缓冲区

重命名相当于shell mv,但它也会更新任何打开的缓冲区,与mv不同的是,它不会改变文件系统中文件的访问和修改时间。

试试Steve Yegge的.emacs中的这个函数:

;; source: http://steve.yegge.googlepages.com/my-dot-emacs-file
(defun rename-file-and-buffer (new-name)
  "Renames both current buffer and file it's visiting to NEW-NAME."
  (interactive "sNew name: ")
  (let ((name (buffer-name))
        (filename (buffer-file-name)))
    (if (not filename)
        (message "Buffer '%s' is not visiting a file!" name)
      (if (get-buffer new-name)
          (message "A buffer named '%s' already exists!" new-name)
        (progn
          (rename-file filename new-name 1)
          (rename-buffer new-name)
          (set-visited-file-name new-name)
          (set-buffer-modified-p nil))))))

看一下那个页面,那里有另一个非常有用的相关函数,叫做“move-buffer-file”。

它可以通过复制来实现。在文件上按Shift +c, emacs将要求您为路径指定一个名称,其中包括文件名,因此只需提供新名称,然后输入…当然,你必须删除前一个。