如何在 Sublime Text 3 中设置语法的默认文件扩展名?

How do you set the default file extension for a syntax in Sublime Text 3?

我问的不是将语法与文件扩展名相关联,而是将文件扩展名与语法相关联。也就是说,在创建新文件后设置保存文件对话框中建议的文件扩展名,然后设置语法,然后点击保存。

您可以在保存对话框中更改扩展名,但最好不要每次都这样做。

您是否还尝试将 .txt. 设置为保存纯文本文档时的默认文件扩展名?我环顾四周,据我所知,目前还不可能这样做。遗憾的是,默认的 Plain Text 内容类型似乎是唯一不默认其特定 .txt 扩展名的内容类型,即使它存在于 另存为类型 下拉列表中在另存为window:

我看过推荐的 AdvancedNewFile 插件作为解决此问题的方法,但我没有任何个人经验。

默认保存带有.txt扩展名的纯文本文件,您可以使用一个小插件实现:

import sublime
import sublime_plugin


class DefaultPlainTextExtensionEventListener(sublime_plugin.EventListener):
    def update_default_extension(self, view, syntax):
        if syntax == 'Packages/Text/Plain text.tmLanguage':
            view.settings().set('default_extension', 'txt')
        elif view.settings().get('default_extension', None) == 'txt':
                view.settings().erase('default_extension')
    
    def on_new_async(self, view):
        self.update_default_extension(view, view.settings().get('syntax'))

    def on_post_text_command(self, view, command_name, args):
        if command_name == 'set_file_type':
            self.update_default_extension(view, args['syntax'])
        elif command_name in ('paste', 'paste_and_indent'):
            self.update_default_extension(view, view.settings().get('syntax'))

请注意,我们不能使用 on_pre_save 事件,因为在触发事件时文件对话框已经显示给用户,并且文件名已选择。

想法是,当创建新选项卡或将语法更改为纯文本时,它将 default_extension 设置设置为 txt。如果语法更改为其他内容,它将删除 default_extension.


要更改语法的默认文件扩展名,需要将 .sublime-syntax 文件更改为 re-order the file extensions set,以便默认文件位于列表的第一个。 (使用前面提到的 default_extension is unreliable。)

因此,对于 Markdown,您可以执行以下操作将默认值从 .mdown 更改为 .md

  1. 安装 PackageResourceViewer 如果尚未安装

  2. 打开命令面板

  3. 类型PRV: O

  4. Select PackageResourceViewer: Open Resource

  5. Select Markdown

  6. Select Markdown.sublime-syntax

  7. 找到它说的地方:

    file_extensions:
      - mdown
      - markdown
      - markdn
      - md
    
  8. 更改它,使 md 位于顶部:

    file_extensions:
      - md
      - mdown
      - markdown
      - markdn
    
  9. 保存文件

然后,当您创建一个新标签时,将语法设置为 Markdown 并保存,它将默认为 .md 文件扩展名。

请注意,如果您认为更改默认值也可以使其他人受益并希望看到回购维护者的反应,您可以尝试在相关的 GitHub 回购中创建一个 issue/PR。