在Emacs中,是否有一种方法可以在查看文件时重命名它?类似于另存为,但原始文件应该消失。
M-x Dired
(启动dired)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
(关闭当前缓冲区并返回文件)。
Emacs 29.1 添加了rename-visited-file
命令,可以做到这一点,但没有默认的按键绑定。
根据其NEWS:
** 新命令 'rename-visited-file'。 该命令通过将当前缓冲区访问的文件移动到一个新的名称或位置,并使缓冲区访问这个新文件来重命名文件。
我没有发现任何提出的解决方案能够满足我的需求(缓冲区选择、覆盖确认、快速响应、实际工作等),这是我正在使用的:
(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)
可以通过复制来实现。在文件上按shift+c,emacs会要求您指定包括文件名在内的路径名称,因此您只需提供新名称并输入即可...当然,您必须删除以前的文件。