在 Sublime Text 3 中更改编辑模式:使用命令或宏切换多个设置

Changing editing mode in Sublime Text 3: toggle multiple settings with a command or macro

我想在 ST3 中引入一种类似于 Distraction-Free Mode 的新编辑模式,无需修改其设置。

我可以通过设置一些设置来达到我想要的结果,即draw_centered=trueword_wrap=truewrap_width=90

但是,我希望能够一次切换所有这些设置(使用快捷方式或从命令面板)。当我退出此模式时,设置应该恢复到之前的状态(不一定是默认设置)。

以下是我在宏中设置的方法:

[
    { "command": "set_setting", "args": {"setting": "word_wrap", "value": true } },
    { "command": "set_setting", "args": {"setting": "wrap_width", "value": 80 } },
    { "command": "set_setting", "args": {"setting": "draw_centered", "value": true } },
    { "command": "set_setting", "args": {"setting": "line_padding_top", "value": 1 } },
    { "command": "set_setting", "args": {"setting": "line_padding_bottom", "value": 1 } }
]

但是,这会将设置设置为特定值。我希望能够将它们切换回之前的状态。

我该怎么做,在宏中还是作为命令?


保存以下脚本@:
/Packages/Toggle Custom View/toggle_custom_view.py

import sublime, sublime_plugin

STORED_SETTINGS = {}

class toggle_custom_view( sublime_plugin.TextCommand ):
    def run( self, edit ):

        view     = self.view
        settings = view.settings()

        if settings.get( "is_widget" ):
            return

        if view.file_name():
            viewID = view.file_name()
        else:
            viewID = str( view )

        global STORED_SETTINGS
        if not viewID in STORED_SETTINGS:
            STORED_SETTINGS[ viewID ] = {
                "custom_view_enabled": True,
                "word_wrap":           settings.get( "word_wrap"           ),
                "wrap_width":          settings.get( "wrap_width"          ),
                "draw_centered":       settings.get( "draw_centered"       ),
                "line_padding_top":    settings.get( "line_padding_top"    ),
                "line_padding_bottom": settings.get( "line_padding_bottom" ),
            }
        storedSettings = STORED_SETTINGS[ viewID ]

        if storedSettings[ "custom_view_enabled" ]:
            settings.set( "word_wrap",           True )
            settings.set( "wrap_width",          80   )
            settings.set( "draw_centered",       True )
            settings.set( "line_padding_top",    1    )
            settings.set( "line_padding_bottom", 1    )

        else:
            settings.set( "word_wrap",           storedSettings[ "word_wrap"           ] )
            settings.set( "wrap_width",          storedSettings[ "wrap_width"          ] )
            settings.set( "draw_centered",       storedSettings[ "draw_centered"       ] )
            settings.set( "line_padding_top",    storedSettings[ "line_padding_top"    ] )
            settings.set( "line_padding_bottom", storedSettings[ "line_padding_bottom" ] )

        storedSettings[ "custom_view_enabled" ] = not storedSettings[ "custom_view_enabled" ]


要通过Command Palette > Toggle Custom View执行,保存以下代码@:
/Packages/Toggle Custom View/Default.sublime-commands

[
    {
        "caption": "Toggle Custom View",
        "command": "toggle_custom_view",
    },
]


通过Ctrl + Super + Alt + V执行,保存以下代码@:
/Packages/Toggle Custom View/Default.sublime-keymap

[
    {
        "keys": ["ctrl+super+alt+v"],
        "command": "toggle_custom_view",
    },
]