2013-04-14 18 views
5

tôi có nhu cầu tham khảo các biến môi trường Windows từ bên trong Sublime Văn bản 2 thiết lập file (Package-Name.sublime-settings files), cụ thể %APPDATA%%TMP%biến môi trường Sử dụng Windows trong Cài đặt văn bản Sublime file

Đây có phải là có thể , và nếu có, làm thế nào?

Ví dụ, đây là một đường từ một thiết lập gói, trong đó cần phải làm việc trên nhiều người dùng, vì vậy với tên người dùng khác nhau:

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

Như một ví dụ, đây là một vấn đề tôi chỉ có: Tôi có một cài đặt của Sublime văn bản 2 chạy từ nhiều máy tính (tức là sao chép dữ liệu của nó xung quanh để giữ các thiết lập, vv đến nay giữa nhiều cài đặt), nhưng tôi có lệnh dưới đây:

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

Thật không may, các tập tin " local-to-server.cmd "liên quan đến tệp đang mở i n Sublime Edit, vì vậy lệnh này hiếm khi hoạt động. Những gì tôi cần là:

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

Hoặc một số cách tương tự để tham chiếu một vị trí chung mà tôi có thể tạo đường dẫn tương đối.

+0

Điều này (ngay bây giờ) phải được triển khai ở cấp plugin. Tôi không nghĩ rằng các gói mặc định bao gồm bất cứ điều gì cần mở rộng biến (mặc dù tôi có thể sai). Nếu đúng như vậy, bạn có thể muốn thực hiện yêu cầu tính năng cho plugin cụ thể. – skuroda

+0

Có cách nào để tạo một plugin để mở rộng biến có thể xảy ra trong các plugin khác không? Tôi yêu cầu điều này trong nhiều hơn một plugin/địa điểm. Hoặc một cách để chỉ định một biến cụ thể với một giá trị cụ thể mà tôi có thể sử dụng trong nhiều tệp cài đặt? –

+0

Thật không may là không. Cuộc gọi cài đặt tải được sử dụng để nhận các cài đặt này chuyển trực tiếp nội dung tệp sang phương thức gọi. Gần nhất, bạn có thể nhận được là có các tập tin cơ bản sống bên ngoài, sau đó chạy một kịch bản khi bạn di chuyển đến mỗi máy để thay thế các giá trị mà bạn muốn. – skuroda

Trả lời

2

Nhờ @schlamar cho chỉnh sửa trên cài đặt. Tôi đã không nhận ra rằng họ vẫn tồn tại trong suốt phiên. Tất cả các plugin của tôi đều sử dụng chúng cục bộ và tôi không thực hiện bất kỳ sửa đổi nào đối với chúng nhưng điều đó rất hữu ích. Đây là một plugin để mở rộng các biến khi ST tải. Nên làm việc trong cả ST2 và 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

Bạn có thể vui lòng cung cấp plugin Sublime Text 2 cho điều này không? Tôi đã thử nó một mình nhưng tôi đã thất bại vì thiếu kiến ​​thức python của tôi. Tôi đã copypasted mã của bạn vào một py-file và tôi đang gettting 'TypeError: đối số của loại 'NoneType' không phải là iterable' khi tôi bắt đầu ST2 và các plugin được nạp. –

+0

Bạn có thay thế với các giá trị thích hợp không? Việc đoán điều này có thể dễ dàng được mở rộng thành một plugin chung, đọc các tệp cài đặt và các thuộc tính từ hệ thống tệp. – skuroda

+1

Vâng, tôi thiết lập các giá trị nhưng có lẽ tôi đang làm nó sai: 'expand_settings = { "HOMEPATH": [ "C: \\ Users \\ john.doe \\" ] } ' Thật sự tôi đang tìm kiếm một plugin, đó là đọc các biến windows như% HOMEPATH%, để tôi có thể sử dụng chúng trong các cài đặt plugin khác. –

1

@skuroda sai trong nhận xét của anh ấy. Việc thay đổi cài đặt liên tục trên các plugin và nhiều cuộc gọi load_settings. Trường hợp thử nghiệm đơn giản:

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

Nếu bạn chia phần này thành hai plugin, nó sẽ vẫn in x (giả sử plugin cài đặt chạy trước plugin in).

Vì vậy, bạn có thể tải và viết lại một số đường dẫn với os.path.expandvars sẽ liên tục cho phiên hiện tại.