Sublime Text 2 - chèn ngắt để khớp với gói hiện tại?


6

Có cách nào tự động để chèn ngắt dòng tại mọi điểm mà văn bản hiện đang gói không? Sau thao tác này, không có dòng nào được bọc, nhưng nó sẽ trông giống hệt nhau.

Câu trả lời:


10

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.pytrong 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 Userthư 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"}
        ]
    }
]

Ảnh chụp màn hình

Trước:

Ảnh chụp màn hình trước

Sau:

Ảnh chụp màn hình 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.


2

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-Wrap-Plus

Trang GitHub

Cài đặt

  1. Mở Sublime Text 2 or 3.
  2. Nhấn 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.
  3. Mở Command Palettelại, gõ "cài đặt" lần nữa và chọn tùy chọn Install a Package.
  4. Bắt đầu gõ và sau đó chọn sublime-wrap-text.

Sử dụng

  1. Chọn văn bản trong câu hỏi.
  2. Nhấn 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.

Bản giới thiệu

Trước

nhập mô tả hình ảnh ở đây

Sau (Tôi chỉ tô sáng tất cả văn bản và nhấn alt + q)

nhập mô tả hình ảnh ở đây

Một gói tương tự khác là Sublime-Wrap-Statement

Trang GitHub

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.


aah, cái này hoạt động như bùa mê, đã tìm kiếm rất nhiều trong vài ngày ...
Rohith Yeravothula

0

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.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.