在Sublime Text设置文件中使用Windows环境变量

时间:2013-04-14 12:28:19

标签: environment-variables sublimetext2 sublimetext

我需要在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"] } },

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

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分: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加载和重写某些路径,这些路径对于当前会话将是持久的。