Sublime Text 3:根据远程主机更改颜色主题的简单插件

Sublime Text 3: Simple plug-in that changes color theme depending on remote host

设置: 我使用 Sublime Text 3 (ST),我经常使用 RemoteSubl 在不同的远程工作区中打开 Sublime + iTerm2 进行 2-3 个不同的会话.

使用简单的批处理脚本,我已将我的 iTerm2 设置为在我通过 ssh 连接到不同的主机时更改颜色(通过激活不同的 iTerm 用户)。

我想知道是否可以对 RemoteSubl 做同样的事情?这样当我从特定的 host/ip/port 打开某些东西时,Sublime 会以不同的配色方案打开,具体取决于 host/ip/port.


解决方案尝试: 到目前为止,这是我尝试构建一个在主机为 remote_host 时更改配色方案的小插件。

import sublime
import sublime_plugin


class ExampleCommand(sublime_plugin.TextCommand):

    def run(self, view):

        try:

            host = view.settings().get('remote_subl.host')

            print(host)

            if host == 'remote_host':

                view.settings().set(
                    'color_scheme',
                    'Packages/Color Scheme - Default/Mariana.tmTheme')

                print(view.settings().get('color_scheme'))

        except:
            print("Not on remote_host")
            pass

问题:在控制台中使用 view.settings().get('remote_subl.host') 时工作正常,returns remote_host。但是,当 运行 脚本 view.run_command('example') 我得到 "Not on remote_host" 打印,表明 try 循环由于某种原因失败。


根据 Keith 的建议

import sublime
import sublime_plugin


class ExampleCommand(sublime_plugin.TextCommand):

    def run(self, view):
        view = self.view
        host = view.settings().get('remote_subl.host', None)

        print(host)

        if host:

            view.settings().set(
                'color_scheme',
                'Packages/Color Scheme - Default/Mariana.tmTheme')

            print(view.settings().get('color_scheme'))

        if host is None:

            view.settings().set(
                'color_scheme',
                'Packages/Color Scheme - Default/Monokai.tmTheme')

            print(view.settings().get('color_scheme'))

view 不是传递给 TextCommandrun 方法的参数。相反,它是 self 上的 属性。将其更改为以下内容应该有效:

import sublime
import sublime_plugin


class ExampleCommand(sublime_plugin.TextCommand):

    def run(self, edit):
        view = self.view

        try:

            host = view.settings().get('remote_subl.host')

            print(host)

            if host == 'dsintmain':

                view.settings().set(
                    'color_scheme',
                    'Packages/Color Scheme - Default/Mariana.tmTheme')

                print(view.settings().get('color_scheme'))

        except:
            print("Not on remote_host")
            pass

我还建议打印发生的异常,以帮助将来调试此类问题。更好的是,与其在正常使用中期望异常,不如为 settings 上的 get 方法提供默认值(即 None)并完全删除异常处理。

host = view.settings().get('remote_subl.host', None)

这样,如果确实出现问题,您将在 ST 控制台中看到回溯。