Sublime Text 2 là một trình soạn thảo có thể mở rộng với API Python . Bạn có thể tạo các lệnh mới (được gọi là Plugins ) và cung cấp chúng từ UI.
Thêm plugin lọc TextCommand cơ bản
Trong Sublime Text 2, chọn Công cụ »Plugin mới và nhập văn bản sau:
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)
Lưu như filter.py
trong~/Library/Application Support/Sublime Text 2/Packages/User
Tích hợp với giao diện người dùng
Để thêm plugin này vào menu Chỉnh sửa , chọn Tùy chọn '»Duyệt Gói và mở User
thư mục. Nếu một tệp được gọi là Main.sublime-menu
không tồn tại, tạo nó. Thêm hoặc đặt văn bản sau vào tệp đó:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{ "command": "filter" }
]
}
]
Điều này sẽ chèn filter
lệnh gọi (về cơ bản, filter
được chuyển đổi thành FilterCommand().run(…)
lệnh gọi plugin và Bộ lọc cho nhãn menu) ngay bên dưới wrap
lệnh. Xem bước 11 ở đây để được giải thích chi tiết hơn tại sao lại như vậy.
Để gán phím tắt, hãy mở và chỉnh sửa tệp Default (OSX).sublime-keymap
trên OS X hoặc tương đương với các hệ thống khác và nhập thông tin sau:
[
{
"keys": ["ctrl+shift+f"], "command": "filter"
}
]
Điều này sẽ gán phím tắt ⌃⇧Fcho lệnh này.
Để làm cho lệnh hiển thị trong Bảng lệnh , bạn cần tạo một tệp có tên Default.sublime-commands
(hoặc chỉnh sửa tệp hiện có) trong User
thư mục. Cú pháp tương tự như tệp menu bạn vừa chỉnh sửa:
[
{ "caption": "Filter Lines in File", "command": "filter" }
]
Nhiều mục (được bao quanh bởi dấu ngoặc nhọn) cần được phân tách bằng dấu phẩy.
Ảnh chụp màn hình tích hợp UI và hành vi
Lệnh, như được triển khai, sẽ lọc tất cả các dòng là một phần của lựa chọn (toàn bộ các dòng, không chỉ các phần được chọn) hoặc, nếu không có lựa chọn nào tồn tại, toàn bộ bộ đệm, cho một chuỗi con được nhập vào trường đầu vào ( mặc định là - có thể vô dụng nhiều dòng - clipboard) sau khi lệnh được kích hoạt. Nó có thể dễ dàng được mở rộng để hỗ trợ các biểu thức thông thường hoặc chỉ để lại các dòng không khớp với một biểu thức nhất định.
Mục menu
Lệnh bảng màu
Biên tập viên
Thêm hỗ trợ cho Biểu thức chính quy
Để thêm hỗ trợ cho các biểu thức thông thường, thay vào đó, hãy sử dụng các đoạn mã và đoạn mã sau:
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"
}
]
Lệnh plugin thứ hai, Bộ lọc sử dụng Biểu thức chính quy sẽ được thêm vào bên dưới mục trình đơn Bộ lọc .
Default.sublime-commands
:
[
{ "caption": "Filter Lines in File", "command": "filter" },
{ "caption": "Filter Lines in File Using Regular Expression", "command": "filter_using_regular_expression" }
]