6

我需要从 Sublime Text 2 设置文件(Package-Name.sublime-settings 文件)中引用 Windows 环境变量,特别%APPDATA%%TMP%

这可能吗?如果可以,怎么做?

例如,这是一个包设置中的一行,它需要在多个用户上工作,因此使用不同的用户名:

"backup_dir": "C:\\Users\\Username\\AppData\\Local\\Temp\\SublimeBackup"

例如,这是我刚刚遇到的一个问题:我安装了从多台计算机运行的 Sublime Text 2(即我复制它的数据以使设置等在多次安装之间保持最新),但我有以下内容命令:

{ "caption": "Backup to Server (Local to Server)", "command": "exec", "args": { "cmd": ["local-to-server.cmd"] } },

不幸的是,文件“local-to-server.cmd”相对于当前在 Sublime Edit 中打开的文件,所以这个命令很少起作用。我需要的是:

{ "caption": "Backup to Server (Local to Server)", "command": "exec", "args": { "cmd": ["%APPDATA%\Sublime Text 2\Packages\User\local-to-server.cmd"] } },

或者一些类似的引用公共位置的方法,然后我可以从中构建相对路径。

4

2 回答 2

2

感谢@schlamar 对设置的更正。我没有意识到他们在整个会议期间都坚持了下来。我所有的插件都在本地使用它们,我没有对它们进行任何修改,但很高兴知道。这是一个在 ST 加载时扩展变量的插件。应该在 ST2 和 ST3 中工作。

import os
import sublime

VERSION = int(sublime.version())

def expand_settings():
    expand_settings = {
        "<setting file names>": [
            "<setting keys to expand>"
        ]
    }
    for filename, setting_keys in expand_settings.items():
        s = sublime.load_settings(filename)
        for key in setting_keys:
            value = s.get(key)
            s.set(key, os.path.expandvars(value))

def plugin_loaded():
    expand_settings()

if VERSION < 3006:
    expand_settings()
于 2013-05-06T22:27:30.947 回答
1

@skuroda 在他的评论中是错误的。设置更改在插件和多个load_settings调用中是持久的。简单的测试用例:

s = sublime.load_settings('Preferences.sublime-settings')
s.set('test', 'x')
s = sublime.load_settings('Preferences.sublime-settings')
print (s.get('test'))  # prints x

如果将其拆分为两个插件,它仍然会打印 x (假设设置插件在打印插件之前运行)。

因此,您可以加载和重写一些路径,os.path.expandvars这些路径将在当前会话中保持不变。

于 2013-05-06T13:55:57.307 回答