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
不是传递给 TextCommand
的 run
方法的参数。相反,它是 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 控制台中看到回溯。
设置: 我使用 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
不是传递给 TextCommand
的 run
方法的参数。相反,它是 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 控制台中看到回溯。