2013-04-14 68 views
5

我有一个需要从崇高文本2个设置文件(包Name.sublime的设置文件)中引用的Windows环境变量,特别是%APPDATA%%TMP%在崇高文本设置使用Windows环境变量文件

这是可能的如果是这样,怎么样?

例如,这里是从一个包设置,需要在多个用户的工作,所以用不同的用户名行:

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

举个例子,这里有一个问题,我刚:我有崇高的文本2,从多台计算机运行的安装(即我身边复制其数据保持设置等多达多个安装之间的日期),但我有下面的命令:

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

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

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

或引用一个共同的位置,我可以再建从相对路径的一些类似的方式。

+0

这(现在)必须在插件级别实现。我不认为默认软件包包含任何需要可变扩展的东西(尽管我可能是错的)。如果是这种情况,那么您可能需要为特定插件发出功能请求。 – skuroda

+0

有没有办法制作一个插件,这样可以在其他插件中进行变量扩展?我需要多个插件/地方。 或者一种方法来指定一个具体的值,我可以在多个设置文件中使用的特定变量? –

+0

不幸的是没有。用于获取这些设置的加载设置调用将文件内容直接传递给调用方法。您可能最接近的是让基础文件在外部生存,然后在移动到每台机器时替换所需的值来运行脚本。 – skuroda

回答

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() 
+0

您能否为此提供一个Sublime Text 2插件?我自己尝试过,但因为缺少Python知识而失败了。我已经将你的代码拷贝到一个py文件中,并且当我启动ST2并且加载插件时,我得到'TypeError:'NoneType'类型的参数不可迭代'。 –

+0

您是否用适当的值替换<设置文件名>和<设置键以展开>?猜测这可以很容易地扩展为通用插件,也可以从文件系统读取设置文件和属性。 – skuroda

+1

是的,我设定的值,但也许我做错了: 'expand_settings = { “HOMEPATH”: “C:\\ \\用户\\ john.doe” ] }' 其实我'正在寻找一个插件,它正在读取像%HOMEPATH%这样的windows变量,以便我可以在其他插件设置中使用它们。 –

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的路径,这些路径对于当前会话将是持久的。