Sublime Text:如何自动打开某些文件扩展名的特定编码?

Sublime Text: How to automatically open with specific encoding for some file extensions?

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

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

非常感谢您的帮助,

演示:

代码:

保存这个@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 中,您可以在其中定义扩展的键值对及其相关编码。

由于文件是在活动缓冲区中重新打开的,因此可以很容易地使用库存键绑定重置编码 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 *