Sublime Text 2 adalah editor yang dapat diperluas dengan API Python . Anda dapat membuat perintah baru (disebut Plugin ) dan membuatnya tersedia dari UI.
Menambahkan plugin TextCommand pemfilteran dasar
Di Sublime Text 2, pilih Tools »New Plugin dan masukkan teks berikut:
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)
Simpan sebagai filter.py
di~/Library/Application Support/Sublime Text 2/Packages/User
Integrasi dengan UI
Untuk menambahkan plugin ini ke menu Edit , pilih Preferensi ... »Jelajahi Paket dan buka User
folder. Jika file yang dipanggil Main.sublime-menu
tidak ada, buatlah. Tambahkan atau atur teks berikut ke file itu:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" }
]
}
]
Ini akan menyisipkan filter
panggilan perintah (pada dasarnya, filter
diubah menjadi FilterCommand().run(…)
untuk panggilan plugin dan Filter untuk label menu) tepat di bawah wrap
perintah. Lihat langkah 11 di sini untuk penjelasan yang lebih terperinci mengapa demikian.
Untuk menetapkan pintasan keyboard, buka dan edit file Default (OSX).sublime-keymap
pada OS X, atau yang setara untuk sistem lain, dan masukkan yang berikut ini:
[
{
"keys": ["ctrl+shift+f"], "command": "filter"
}
]
Ini akan menetapkan pintasan ⌃⇧Funtuk perintah ini.
Untuk membuat perintah muncul di Palet Perintah , Anda perlu membuat file bernama Default.sublime-commands
(atau mengedit yang sudah ada) di User
folder. Sintaksnya mirip dengan file menu yang baru saja Anda edit:
[
{ "caption": "Filter Lines in File", "command": "filter" }
]
Banyak entri (tertutup kurung keriting) harus dipisahkan dengan koma.
Tangkapan layar perilaku dan integrasi UI
Perintah, seperti yang diterapkan, akan memfilter semua baris yang merupakan bagian dari pilihan (seluruh baris, bukan hanya bagian yang dipilih), atau, jika tidak ada pilihan, seluruh buffer, untuk substring yang dimasukkan ke bidang input ( default adalah - mungkin multi-line - clipboard) yang tidak berguna) setelah perintah dipicu. Dapat dengan mudah diperluas misalnya mendukung ekspresi reguler, atau hanya meninggalkan garis yang tidak cocok dengan ekspresi tertentu.
Item menu
Memerintahkan entri palet
Editor
Menambahkan dukungan untuk Ekspresi Reguler
Untuk menambahkan dukungan untuk ekspresi reguler, gunakan skrip dan snippet berikut sebagai gantinya:
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"
}
]
Perintah plugin kedua, Filter Menggunakan Ekspresi Reguler akan ditambahkan di bawah entri menu Filter .
Default.sublime-commands
:
[
{ "caption": "Filter Lines in File", "command": "filter" },
{ "caption": "Filter Lines in File Using Regular Expression", "command": "filter_using_regular_expression" }
]