Sublime Text 2 - це розширюваний редактор з API Python . Ви можете створити нові команди (звані плагіни ) та зробити їх доступними з інтерфейсу користувача.
Додавання базового модуля фільтрації TextCommand
У піднесеному тексті 2 виберіть Інструменти »Новий плагін і введіть наступний текст:
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)
Зберегти як filter.py
в~/Library/Application Support/Sublime Text 2/Packages/User
Інтеграція з інтерфейсом користувача
Щоб додати цей плагін до меню « Правка », виберіть Налаштування… »Переглянути пакунки та відкрийте User
папку. Якщо названий файл Main.sublime-menu
не існує, створіть його. Додайте або встановіть у цей файл такий текст:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" }
]
}
]
Тут буде вставлено filter
командний виклик (по суті, filter
перетворюється на FilterCommand().run(…)
виклик плагіна та Фільтр для мітки меню) трохи нижче wrap
команди. Дивіться крок 11 тут для більш детального пояснення, чому це так.
Щоб призначити комбінацію клавіш, відкрийте та відредагуйте файл Default (OSX).sublime-keymap
на OS X або еквівалент для інших систем та введіть наступне:
[
{
"keys": ["ctrl+shift+f"], "command": "filter"
}
]
Це призначить ярлик ⌃⇧Fцій команді.
Щоб команда відображалася в палітрі команд , вам потрібно створити файл, названий Default.sublime-commands
(або відредагувати існуючий) у User
папці. Синтаксис схожий на файл меню, який ви щойно відредагували:
[
{ "caption": "Filter Lines in File", "command": "filter" }
]
Кілька записів (додаються фігурними дужками) потрібно розділити комами.
Скріншоти інтеграції поведінки та інтерфейсу користувача
Команда, як реалізовано, буде фільтрувати всі рядки, що є частиною виділення (цілі рядки, а не лише вибрані частини), або, якщо немає виділення, весь буфер, для підрядка, що вводиться у поле введення ( за замовчуванням - можливо, непотрібний багаторядковий буфер обміну після запуску команди. Його можна легко розширити, наприклад, підтримувати регулярні вирази, або лише залишати рядки, що не відповідають певному виразу.
Пункт меню
Введення палітри команд
Редактор
Додавання підтримки для регулярних виразів
Щоб додати підтримку регулярних виразів, замість цього використовуйте такі сценарії та фрагменти:
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"
}
]
Друга команда плагіна " Фільтр за допомогою регулярного вираження" буде додана під меню " Фільтр ".
Default.sublime-commands
:
[
{ "caption": "Filter Lines in File", "command": "filter" },
{ "caption": "Filter Lines in File Using Regular Expression", "command": "filter_using_regular_expression" }
]