2013-04-14 67 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的路徑,這些路徑對於當前會話將是持久的。