Câu trả lời:
Tạo một plugin cho việc này. Chọn Công cụ »Plugin Mới và nhập tập lệnh sau:
import sublime, sublime_plugin
class WrapLinesExCommand(sublime_plugin.TextCommand):
def run(self, edit):
wrap_column = 0
if self.view.settings().get('word_wrap') == False:
# wrapping is disabled, do nothing
return
if self.view.settings().get('wrap_width') == 0:
# compute wrap column from viewport width
wrap_column = int(self.view.viewport_extent()[0] / self.view.em_width())
else:
wrap_column = self.view.settings().get('wrap_width')
e = self.view.begin_edit()
rewrap(self.view, e, wrap_column)
self.view.end_edit(e)
def rewrap(v, e, column):
# 0-indexed current line
current_line_no = 0
# RHS expression is line count, can change whenever we create a new one
while current_line_no < v.rowcol(v.size())[0] + 1:
# where current line drawing starts
current_line_coords = v.text_to_layout(v.text_point(current_line_no, 0))
# rightmost character drawn in current viewport
textpos = v.layout_to_text((v.em_width() * (column), current_line_coords[1]))
# physical line boundaries as absolute text positions
current_line = v.line(textpos)
if textpos < current_line.b:
# the current line spans multiple rows, so insert a newline at the wrap column
textpos = v.layout_to_text((v.em_width() * (column), current_line_coords[1]))
next_line_indent = v.text_to_layout(textpos+1)[0]
# TODO why -1?
next_line_indent_chars = int(next_line_indent/(v.em_width()))-1
# determine how to indent the following line based on how wide the wrapping indents and what the current tab/spaces settings are
if v.settings().get('translate_tabs_to_spaces') and v.settings().get('use_tab_stops'):
next_line_indent_chars = next_line_indent_chars / v.settings().get('tab_size')
next_line_indent_string = '\t' * next_line_indent_chars
else:
next_line_indent_string = ' ' * next_line_indent_chars
# insert newline and spacing at wrap column (sublime hides actual line endings from editor, therefore it's always LF)
v.insert(e, textpos, '\n' + next_line_indent_string)
else:
# only continue to the next line if we didn't edit the current line
current_line_no = current_line_no + 1
Lưu ví dụ như wrap_lines_ex_command.py
trong thư mục default ( User
).
Để làm cho điều này có thể truy cập được từ thanh menu, chọn mục menu Duyệt Gói , điều hướng đến User
thư mục và chỉnh sửa Main.sublime-menu
(tạo nó nếu cần thiết) như được mô tả trong câu trả lời này để nó chứa văn bản như ví dụ như sau:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{"command": "wrap_lines_ex", "caption": "Wrap All Lines"}
]
}
]
Trước:
Sau:
Tất nhiên, trong trường hợp này, do các bình luận cũng được bọc, mã sẽ không còn hoạt động. Nhưng đó là hành vi như thiết kế cho câu hỏi.
Nhiều năm sau, có các gói làm sẵn (plugin) cho loại điều này. Họ có thể không đáp ứng chính xác yêu cầu của bạn (để khớp với gói hiện tại được hiển thị trong cửa sổ của bạn), nhưng bạn có thể đặt cột nào bạn muốn bọc theo sở thích của họ.
Sublime Text 2 or 3
.command-shift-p
(Mac OS X) hoặc ctrl-shift-p
(Windows) để mở Command Palette
, nhập "cài đặt" và chọn tùy chọn Install Package Control
.Command Palette
lại, gõ "cài đặt" lần nữa và chọn tùy chọn Install a Package
.sublime-wrap-text
.command+alt+q
(Mac OS X) hoặc alt+q
(Windows).Xem trang GitHub để biết thêm các sắc thái sử dụng và cách đặt tùy chọn.
Trước
Sau (Tôi chỉ tô sáng tất cả văn bản và nhấn alt + q)
Một gói tương tự khác là Sublime-Wrap-Statement
Tôi chưa thử cái này một mình, nhưng bạn có thể thử nếu bạn thích.
Hiện tại, có vẻ như tính năng này không được bao gồm trong tùy chọn của Sublime Text 2 (bạn có thể tự mình nhìn thấy trong Cài đặt mặc định / Preferences.sublime). Có thể sử dụng tùy chọn cấu hình như "line_padding_bottom": 4
(trong đó 4 là số pixel bạn muốn bên dưới mỗi dòng) để đọc rõ ràng trên tất cả các dòng, nhưng không thể áp dụng có chọn lọc phần đệm dòng khác nhau tùy thuộc vào việc dòng có được bọc hay không .
Bạn có thể muốn gửi một yêu cầu tính năng trên diễn đàn của Sublime Text 2 . Tôi biết tôi cũng sẽ đánh giá cao chức năng này, nếu nó hợp lý để thực hiện.