【问题标题】:how to make a opened buffer read only without reloading again with 'find-file-read-only'如何使用'find-file-read-only'使打开的缓冲区只读而不重新加载
【发布时间】:2011-07-06 11:23:04
【问题描述】:

当我不编辑它们时,我喜欢将我的编码缓冲区设为只读(如 Vi 模式编辑,只读)。为此,我可以使用C-x C-q 来打开/关闭 emacs 缓冲区的可写状态。似乎这个写锁定功能继承自 RCS 或类似的文件锁定/修订系统方式,因此在版本控制下处理文件不起作用:

C-x C-q
File is under version-control; use C-x v v to check in/out 

我不想签入/签出我只想防止“猫打字”。我可以编写一个宏触发器 find-file-read-only '/'find-file' 并为其提供一些键绑定,但我确信在 emacs 或 .el 中已经编写了一个解决方案。有什么建议吗?

【问题讨论】:

    标签: emacs


    【解决方案1】:

    您可以设置file variable,将buffer-read-only的值设置为正值。

    您需要在文件的前 2 行设置它。例如,这里我将它设置为 1 到一个 python 缓冲区中:

    #!/usr/bin/python
    # -*- coding: utf-8 ; buffer-read-only: 1 ; -*-
    

    这样,每次打开后你就不需要记住手动设置了。

    【讨论】:

    • 但是文件随后变得不可编辑。如果您在加载时 emacs 没有质疑该设置,则您必须使用其他编辑器删除该变量设置,然后才能再次在 emacs 中更改它。
    【解决方案2】:

    或者你可以挂钩查找文件

    (add-hook 'find-file-hook
      '(lambda ()
         (when (and (buffer-file-name)
            (file-exists-p (buffer-file-name))
            (file-writable-p (buffer-file-name)))
           (message "Toggle to read-only for existing file")
           (toggle-read-only 1))))
    

    并使用 C-x C-q 改变文件的只读状态

    【讨论】:

      【解决方案3】:

      您可以改用view-mode

      【讨论】:

      • 谢谢,这正是我想要的。我也意识到 C-x C-q 在 emacs22 中工作(我的集群直到最近才在 emacs21 中)。他们给你警告/建议使用c-x v v,但它无论如何都会锁定文件。现在我只需要将 c-x c-q 重新映射到视图模式。
      • 警告只是告诉你行为改变了。如果目录受版本控制,Cx Cq 过去常常改变它的行为,但在 Emacs 22 中,决定让它保持其正常行为更有用,特别是因为现代 vc 系统默认情况下不需要显式检出,所以之间的关联只读且版本控制不再相关。
      • 另外,要直接在查看模式下打开文件,可以M-x view-filefind-file-read-only (C-x C-r) 以只读方式打开文件,但不在查看模式下。
      猜你喜欢
      • 1970-01-01
      • 2017-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2021-05-02
      • 2010-09-19
      • 2010-10-07
      相关资源
      最近更新 更多