Pisałem pakiet ST3 (z .py
wtyczek, .sublime-keymap
s oraz .sublime-commands
w nim) i chcę wtyczki i pliki konfiguracyjne .sublime*
być aktywny tylko dla określonej składni pliku (na przykład do .txt
lub .myCustomSyntax
). Jak mogę to osiągnąć?Jak zezwolić na pakiet Sublime Text 3 tylko dla określonej składni pliku?
Odpowiedz
Sądząc z podanych przykładów, powinieneś użyć rozszerzeń plików zamiast składni. Aktywną składnię można zmienić za pomocą menu składni, natomiast rozszerzenia plików są stałe.
#■■■■■ Establish Valid File Extensions ■■■■■■■■■■■■■■■■■■■■
valid_FileExtensions = []
valid_FileExtensions.append ("txt")
valid_FileExtensions.append ("myCustomFileExtension")
#■■■■■ Get Current File Extension ■■■■■■■■■■■■■■■■■■■■■■■■■
window = view.window()
fileExtension = window.extract_variables()[ "file_extension" ]
#■■■■■ Verify Current File Extension ■■■■■■■■■■■■■■■■■■■■■■
file_IsValid = False
for entry in valid_FileExtensions:
if fileExtension == entry:
file_IsValid = True
#■■■■■ Exit Routine If File Extension Is Invalid ■■■■■■■■■■
if file_IsValid == False:
return
Alternatywnie; jeśli wolisz używać składni, możesz użyć:
fileSyntax = view.settings().get ("syntax")
Opcjonalnie; możesz utworzyć tablicę valid_FileExtensions
pod adresem YourPlugin.sublime-settings
, aby użytkownicy mogli dyktować, dla których rozszerzeń będzie działać wtyczka.
Oto przykład klucza wiążące używać do wtyczki Markdown Preview
{
"keys": ["ctrl+b"], "command": "markdown_preview", "args": {"target": "browser"},
"context": [{ "key": "selector", "operator": "equal", "operand": "text.html.markdown" }]
},
Jak widać używam klucza ctrl+b
który jest zwykle związany z komendą w build
, ale jest aktywna tylko wtedy, gdy mój kursor znajduje się w "text.html.markdown", który występuje tylko w plikach ze zniżkami. Dlatego ctrl+b
budować jak zwykle, gdy jestem w innym typie pliku.
Ten zakres zwykle znajduje się w formularzu "text.html ..." lub "source.python ...". Aby znaleźć aktualną nazwę zakresu kursora, użyj polecenia "show_scope_name" z ctrl+alt+shift+p
.