如何在Sublime Text 2中使缓冲区只读

14

这不是指那些在操作系统级别设置了只读标志的文件,而是用户不打算修改的每个文件。

我希望Sublime Text忽略任何更改,并阻止保存任何修改过的文件。一个例子是当用户正在阅读不应该被任何方式修改的源代码时。

"要非常小心,不要按任何按钮"无疑是一个好建议,但如果我“意外地”删除了注释前面的井号或者向对于这种事情敏感的文件(Linux中的一些配置文件)添加新行,然后不小心点击保存....

我在GitHub上找到了"toggle-readonly",但它实际上是切换文件权限("只读"、"写入"),这不完全是我想要的。

2个回答

9

是的,这是可能的,但您需要编写一个插件(如果您了解Python,那并不难)。API调用在sublime模块中的view.set_read_only(flag),其中flag是布尔值。以下是一个快速示例,检查新打开的文件是否具有特定后缀名,如果是,则将其设置为只读。

import sublime
import sublime_plugin


class MakeViewReadOnlyCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        if self.view.file_name().endswith(".cfg"):
            self.view.set_read_only(True)


class ConfigFileListener(sublime_plugin.EventListener):
    def on_load(self, view):
        view.run_command("make_view_read_only")

使用Python语法打开一个新文件,将代码复制到其中并根据需要进行修改,然后将其保存在Packages/User目录中,文件名为make_view_read_only.py。重新启动Sublime以加载它,这样就可以设置好了。要测试某个视图是否为只读,请打开控制台并输入:

view.is_read_only()

+1 太棒了。我知道一些 Python,但我必须阅读他们的 API 文档才能手动制作插件。是否能在编辑器上下文菜单中为所有文件类型添加“切换只读模式”的选项呢? - Renae Lider
@RenaeLider 是的,这是可能的。由于这有点超出了原始问题的范围,您可以提出一个新问题并引用此问题 - 如果您在接下来的24小时内这样做,我应该能够回答它(我将在星期五度假)。 - MattDMo
OP是否真的提出了这样的问题?如果能在此问答中提供一个链接就太好了,我似乎找不到它。 - emilBeBri
只针对特定文件夹怎么样?你该如何做到这一点? - TheBAST

2
插件“切换只读视图”可以实现这一功能。它基本上就是做了MattDMo所说的:当您将视图设置为只读时,文件仍然可以被另一个程序(或另一个用户)更改,而Sublime Text会捕获这些更改。它还具有您要求的上下文菜单项。我喜欢状态栏中的“只读”指示器。
我没有在Sublime Text 2上测试过它,但在Sublime Text 3上它工作得很好,并且声称也适用于Sublime Text 2。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接