【问题标题】:Sublime Text: How to automatically open with specific encoding for some file extensions?Sublime Text:如何自动打开某些文件扩展名的特定编码?
【发布时间】:2016-03-11 17:16:44
【问题描述】:

有没有办法强制 sublime (ST3) 打开/重新打开某种具有特定编码的文件?我的问题是:我不希望 ST3 显示特定文件扩展名的内容(即 .log、.dump 和我的任何其他自定义文件)。目前的解决方案是通过 view.set_encoding() 方法手动将编码设置为 Hexadecimal。在此讨论中提出了另一种解决方案。但它似乎只在文件打开后设置编码。有什么办法可以自动打开,或者用十六进制编码重新打开这些文件?

注意:我已将 default_encoding 设置为 UTF-8 并回退为十六进制。由于 ST3 将我的自定义文件的内容检测为 UTF-8,因此显示了内容。我只想让 ST3 显示某种自定义文件的十六进制视图,并且必须手动更改编码以显示/修改内容。

非常感谢您的帮助,

【问题讨论】:

    标签: sublimetext


    【解决方案1】:

    演示:

    代码:

    保存@Packages/YourPluginName/YourPluginName.py

    import sublime, sublime_plugin
    
    class EventListener( sublime_plugin.EventListener ):
    
        def on_load ( self, view ):
    
            fileExtension = view.window().extract_variables() [ "file_extension" ]
    
            encodingSets = \
                {
                    "log"  : "Hexadecimal",
                    "dump" : "Hexadecimal",
                }
    
            if fileExtension in encodingSets:
                encoding = encodingSets[ fileExtension ]
                view.run_command ( "reopen", { "encoding" : encoding } )
    

    注意事项:

    我在 This Thread 找到了 reopen + encoding 命令,并将其包装在 on_load EventListener 中,您可以在其中定义扩展的键值对及其相关编码。 p>

    由于文件是在活动缓冲区中重新打开的,因此可以使用股票键绑定ctrl + z 轻松重置编码。如果您希望这更安全,您可能需要找到一种方法来克服这个漏洞。我研究了禁用撤消堆栈并创建特定于语法的键绑定,但都没有找到任何快速结果。尝试进一步研究这些和类似的主题,如果您无法找到其他解决方案,也可以考虑重新映射您的 ctrl + z 命令。

    编码:

    这是 Sublime Text 中可接受的编码列表:

    "Hexadecimal"
    "UTF-8"
    "UTF-16 LE"
    "UTF-16 BE"
    "Western (Windows 1252)"
    "Western (ISO 8859-1)"
    "Western (ISO 8859-3)"
    "Western (ISO 8859-15)"
    "Western (Mac Roman)"
    "DOS (CP 437)"
    "Arabic (Windows 1256)"
    "Arabic (ISO 8859-6)"
    "Baltic (Windows 1257)"
    "Baltic (ISO 8859-4)"
    "Celtic (ISO 8859-14)"
    "Central European (Windows 1250)"
    "Central European (ISO 8859-2)"
    "Cyrillic (Windows 1251)"
    "Cyrillic (Windows 866)"
    "Cyrillic (ISO 8859-5)"
    "Cyrillic (KOI8-R)"
    "Cyrillic (KOI8-U)"
    "Estonian (ISO 8859-13)"
    "Greek (Windows 1253)"
    "Greek (ISO 8859-7)"
    "Hebrew (Windows 1255)"
    "Hebrew (ISO 8859-8)"
    "Nordic (ISO 8859-10)"
    "Romanian (ISO 8859-16)"
    "Turkish (Windows 1254)"
    "Turkish (ISO 8859-9)"
    "Vietnamese (Windows 1258)"
    

    * 提取自Packages\Default\Encoding.sublime-menu *

    【讨论】:

    • 如果我理解正确,当文件为reopened 时不会调用on_load 事件?检查它是否已经在使用配置的编码可能是一个很棒的主意,因此不需要重新加载它,但这可能超出了这个问题的范围;)
    • @KeithHall :我没想到。我猜不是,我觉得它会导致递归的 plugin_host 错误。检查似乎是一个好主意,有人想用它来定义自定义编码组。 OP 似乎只是想对某些文件进行伪加密。我懒得签入,因为它是一个最小的插件,并且重新打开在性能方面并不明显:-P。 Def 会同意,如果它被集成到一个发布的插件中,它应该被实现。
    • 非常感谢@Enteleform,抱歉我的回复晚了。
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-27
    • 2012-05-21
    • 1970-01-01
    • 2014-01-29
    相关资源
    最近更新 更多