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.py
w~/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 User
folder. Jeśli plik o nazwie Main.sublime-menu
nie istnieje, utwórz go. Dodaj lub ustaw następujący tekst do tego pliku:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" }
]
}
]
Spowoduje to wstawienie filter
wywołania polecenia (zasadniczo filter
jest przekształcone FilterCommand().run(…)
na wywołanie wtyczki i Filtruj na etykiecie menu) tuż pod wrap
poleceniem. 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-keymap
w 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 User
folderze. 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" }
]
Istnieje również algorytm filtrowania linii biednego człowieka (czy jest leniwy?):
źródło
Jest teraz wtyczka do filtrowania linii: https://github.com/davidpeckham/FilterLines
Umożliwia filtrowanie i składanie kodu na podstawie ciągów lub wyrażeń regularnych.
źródło
Możesz użyć wbudowanych możliwości Sublime, aby to zrobić w 3 do 7 naciśnięciach klawiszy (bez uwzględnienia wyrażenia regularnego do dopasowania).
Krok 1: Wybierz wiele pasujących linii
Opcja 1: Aby zaznaczyć wiele linii zawierających podłańcuch
Opcja 2: Aby zaznaczyć wiele linii pasujących do wyrażenia regularnego
Krok 2: Zrób coś z tymi liniami
Wariant 1: Aby pozbyć się wszystkich linii, które nie zostały wybrane
Wariant 2: Aby pozbyć się wszystkich linii, które są wybrane
Opcja 3: Aby wyodrębnić wybrane linie do nowego pliku
źródło