当前位置:  开发笔记 > 编程语言 > 正文

如何使用Emacs更改文件的读/写模式?

如何解决《如何使用Emacs更改文件的读/写模式?》经验,为你挑选了6个好方法。

如果文件设置为只读模式,如何在Emacs中将其更改为写入模式,反之亦然?



1> Bob Cross..:

Mx切换 - 只读

或者在更新版本的Emacs中

Mx只读模式

在我的Windows框中,相当于Alt-x以显示元提示并键入"toggle-read-only"以调用正确的elisp函数.

如果您使用默认键盘绑定,

Cx Cq

(您大声朗读为"Control-X Control-Q")将具有相同的效果.但请记住,鉴于emacs基本上可以无限重新配置,您的里程可能会有所不同.

从评论开始:您应该注意缓冲区的可写状态不会改变文件的可写权限.如果您尝试写出只读文件,您将看到确认消息.但是,如果您拥有该文件,则可以在更改文件权限的情况下写出更改.

如果您想快速更改文件而不必执行添加写入权限,写出更改,删除写入权限的多个步骤,这将非常方便.我倾向于忘记最后一步,将潜在的关键文件打开以便以后进行意外更改.


嗨,正如jfm3"toggle-read-only"的答案所述,只能切换缓冲区的只读状态而不是文件.如果要更改文件的模式,请使用`dired`或执行`chmod + w`作为文件的shell命令.
在最新版本的Emacs中,toggle-read-only已被替换为只读模式.

2> jfm3..:

确保你没有将'file'与'buffer'混淆.您可以使用C-x C-q(toggle-read-only)将缓冲区设置为只读,然后再将其设置为只读.如果您有权读取文件,但不能写入文件,则访问文件(C-x C-ffind-file)时获得的缓冲区将自动进入只读模式.如果要更改文件系统中文件的权限,可以从dired包含该文件的目录开始.dired的文档可以在info中找到; C-h i (emacs)dired RET.



3> Dmytro Kuzne..:

我发现的是 M-x set-file-modes filename mode

它在我的Windows Vista框中运行.例如:M-x set-file-modes ReadOnlyFile.txt 0666



4> anjanb..:

CTRL + X + CTRL + Q     



5> Borja Tarras..:

正如其他人所提到的那样:Mx toggle-read-only可行.

但是,现在不推荐使用它,并且Mx只读模式是当前的方法,它被设置为Cx Cq键绑定.



6> Vebjorn Ljos..:

如果只有缓冲区(而不是文件)是只读的,则可以使用toggle-read-only,这通常是绑定的C-x C-q.

但是,如果文件本身是只读的,您可能会发现以下函数有用:

(defun set-buffer-file-writable ()
  "Make the file shown in the current buffer writable.
Make the buffer writable as well."
  (interactive)
  (unix-output "chmod" "+w" (buffer-file-name))
  (toggle-read-only nil)
  (message (trim-right '(?\n) (unix-output "ls" "-l" (buffer-file-name)))))

该功能取决于unix-outputtrim-right:

(defun unix-output (command &rest args)
  "Run a unix command and, if it returns 0, return the output as a string.
Otherwise, signal an error.  The error message is the first line of the output."
  (let ((output-buffer (generate-new-buffer "*stdout*")))
    (unwind-protect
     (let ((return-value (apply 'call-process command nil
                    output-buffer nil args)))
       (set-buffer output-buffer)
       (save-excursion 
         (unless (= return-value 0)
           (goto-char (point-min))
           (end-of-line)
           (if (= (point-min) (point))
           (error "Command failed: %s%s" command
              (with-output-to-string
                  (dolist (arg args)
                (princ " ")
                (princ arg))))
           (error "%s" (buffer-substring-no-properties (point-min) 
                                   (point)))))
         (buffer-substring-no-properties (point-min) (point-max))))
      (kill-buffer output-buffer))))

(defun trim-right (bag string &optional start end)
  (setq bag (if (eq bag t) '(?\  ?\n ?\t ?\v ?\r ?\f) bag)
    start (or start 0)
    end (or end (length string)))
  (while (and (> end 0)
          (member (aref string (1- end)) bag))
    (decf end))
  (substring string start end))

将功能放在您的~/.emacs.el,评估它们(或重新启动emacs).然后,您可以使当前缓冲区中的文件可写M-x set-buffer-file-writable.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有