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


当前回答

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

其他回答

为了完整起见,由于有些人访问此页面时可能认为他们将得到Emacs的“另存为”特性的答案,对于打开的文件,这是C-x C-w。

我没有发现任何建议的解决方案足以满足我的需求(缓冲区选择,覆盖确认,快速响应,实际工作等),以下是我正在使用的:

(defun rename-buffer-and-file (buffer newname)
  (interactive "bRename buffer and its visiting file: \nFNew name: ")
  (let ((oldname (buffer-file-name)))
    (if (not oldname)
        (message "Buffer '%s' is not visiting a file" buffer)
      (if (file-exists-p newname)
          (if (file-directory-p newname)
              ;; Signal an error if the user specified the name of an
              ;; existing directory.
              (error "%s is a directory" newname)
            (unless (y-or-n-p (format-message
                               "File `%s' exists; overwrite? "
                               newname))
              (error "Canceled"))))
      ;; Rename buffer and its visiting file
      (set-visited-file-name newname)
      ;; Delete old file
      (delete-file oldname)
      (save-buffer))))

绑定到C-x - C-r以便于

(global-set-key (kbd "C-x C-r") 'rename-buffer-and-file)

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

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

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

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

我知道这篇文章太老了,但在我找到的所有答案中,没有什么比Emacs在他们的教程中所说的更简单的了: M-x烘干(下水烘干) C-x C-q(在dired中切换为只读) 更改文件名,就像它只是文本文件中的一行一样: ::

  /home/okiw4n/Documents/project/light_script:
  total used in directory 20 available 339.2 GiB
  drwxr-xr-x. 2 okiw4n okiw4n 4096 Sep  7 09:07 .
  drwxr-xr-x. 3 okiw4n okiw4n 4096 Sep  4 10:03 ..
  -rw-r--r--. 1 okiw4n okiw4n 3594 Sep  7 08:39 explication.org
  -rw-r--r--. 1 okiw4n okiw4n   85 Sep  4 10:09 script.sh
  -rw-r--r--. 1 okiw4n okiw4n 3594 Sep  5 20:08 tuc.org~

后:

  /home/okiw4n/Documents/project/light_script:
  total used in directory 20 available 339.2 GiB
  drwxr-xr-x. 2 okiw4n okiw4n 4096 Sep  7 09:07 .
  drwxr-xr-x. 3 okiw4n okiw4n 4096 Sep  4 10:03 ..
  -rw-r--r--. 1 okiw4n okiw4n 3594 Sep  7 08:39 explication.org
  -rw-r--r--. 1 okiw4n okiw4n   85 Sep  4 10:09 script.sh
  -rw-r--r--. 1 okiw4n okiw4n 3594 Sep  5 20:08 TRUC.org~ (I have rewrite this file)

C-x C-s(保存更改) C-x C-k(终止缓冲区并返回到文件)。