Sublime Text 2 to rozszerzalny edytor z API Pythona . Możesz tworzyć nowe polecenia (zwane wtyczkami ) i udostępniać je w interfejsie użytkownika.
Dodanie podstawowej filtrowania wtyczki TextCommand
W Sublime Text 2 wybierz Narzędzia »Nowa wtyczka i wprowadź następujący tekst:
import sublime, sublime_plugin
def filter(v, e, needle):
# get non-empty selections
regions = [s for s in v.sel() if not s.empty()]
# if there's no non-empty selection, filter the whole document
if len(regions) == 0:
regions = [ sublime.Region(0, v.size()) ]
for region in reversed(regions):
lines = v.split_by_newlines(region)
for line in reversed(lines):
if not needle in v.substr(line):
v.erase(e, v.full_line(line))
class FilterCommand(sublime_plugin.TextCommand):
def run(self, edit):
def done(needle):
e = self.view.begin_edit()
filter(self.view, e, needle)
self.view.end_edit(e)
cb = sublime.get_clipboard()
sublime.active_window().show_input_panel("Filter file for lines containing: ", cb, done, None, None)
Zapisz jak filter.pyw~/Library/Application Support/Sublime Text 2/Packages/User
Integracja z interfejsem użytkownika
Aby dodać tę wtyczkę do menu Edycja , wybierz Preferencje… »Przeglądaj pakiety i otwórz Userfolder. Jeśli plik o nazwie Main.sublime-menunie istnieje, utwórz go. Dodaj lub ustaw następujący tekst do tego pliku:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" }
]
}
]
Spowoduje to wstawienie filterwywołania polecenia (zasadniczo filterjest przekształcone FilterCommand().run(…)na wywołanie wtyczki i Filtruj na etykiecie menu) tuż pod wrappoleceniem. Zobacz krok 11 tutaj, aby uzyskać bardziej szczegółowe wyjaśnienie, dlaczego tak jest.
Aby przypisać skrót klawiaturowy, otwórz i edytuj plik Default (OSX).sublime-keymapw systemie OS X lub jego odpowiedniku dla innych systemów i wprowadź następujące dane:
[
{
"keys": ["ctrl+shift+f"], "command": "filter"
}
]
Spowoduje to przypisanie skrótu ⌃⇧Fdo tego polecenia.
Aby polecenie pojawiło się w Palecie poleceń , musisz utworzyć plik o nazwie Default.sublime-commands(lub edytować istniejący) w Userfolderze. Składnia jest podobna do pliku menu, który właśnie edytowałeś:
[
{ "caption": "Filter Lines in File", "command": "filter" }
]
Wiele wpisów (w nawiasach klamrowych) należy oddzielić przecinkami.
Zrzuty ekranu dotyczące zachowania i integracji interfejsu użytkownika
Polecenie, po zaimplementowaniu, odfiltruje wszystkie wiersze, które są częścią zaznaczenia (całe wiersze, nie tylko wybrane części), lub, jeśli nie ma zaznaczenia, cały bufor, dla podłańcucha, który jest wprowadzony do pola wejściowego ( domyślnie jest to schowek (prawdopodobnie bezużyteczny, wieloliniowy) po uruchomieniu polecenia. Można go łatwo rozszerzyć, aby np. Obsługiwał wyrażenia regularne lub pozostawiał wiersze nie pasujące do określonego wyrażenia.
Pozycja w menu

Wprowadzanie palety poleceń

Redaktor


Dodanie obsługi wyrażeń regularnych
Aby dodać obsługę wyrażeń regularnych, użyj następujących skryptów i fragmentów:
filter.py:
import sublime, sublime_plugin, re
def matches(needle, haystack, is_re):
if is_re:
return re.match(needle, haystack)
else:
return (needle in haystack)
def filter(v, e, needle, is_re = False):
# get non-empty selections
regions = [s for s in v.sel() if not s.empty()]
# if there's no non-empty selection, filter the whole document
if len(regions) == 0:
regions = [ sublime.Region(0, v.size()) ]
for region in reversed(regions):
lines = v.split_by_newlines(region)
for line in reversed(lines):
if not matches(needle, v.substr(line), is_re):
v.erase(e, v.full_line(line))
class FilterCommand(sublime_plugin.TextCommand):
def run(self, edit):
def done(needle):
e = self.view.begin_edit()
filter(self.view, e, needle)
self.view.end_edit(e)
cb = sublime.get_clipboard()
sublime.active_window().show_input_panel("Filter file for lines containing: ", cb, done, None, None)
class FilterUsingRegularExpressionCommand(sublime_plugin.TextCommand):
def run(self, edit):
def done(needle):
e = self.view.begin_edit()
filter(self.view, e, needle, True)
self.view.end_edit(e)
cb = sublime.get_clipboard()
sublime.active_window().show_input_panel("Filter file for lines matching: ", cb, done, None, None)
Main.sublime-menu:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" },
{ "command": "filter_using_regular_expression" }
]
}
]
Default (OSX).sublime-keymap:
[
{
"keys": ["ctrl+shift+f"], "command": "filter"
},
{
"keys": ["ctrl+shift+option+f"], "command": "filter_using_regular_expression"
}
]
Drugie polecenie wtyczki Filtruj za pomocą wyrażeń regularnych zostanie dodane poniżej pozycji menu Filtr .
Default.sublime-commands:
[
{ "caption": "Filter Lines in File", "command": "filter" },
{ "caption": "Filter Lines in File Using Regular Expression", "command": "filter_using_regular_expression" }
]