it-swarm-ja.com

崇高なテキスト2-現在のラッピングに一致するようにブレークを挿入しますか?

テキストが現在折り返されているすべてのポイントに改行を挿入する自動化された方法はありますか?この操作の後、線は折り返されませんが、視覚的には同じに見えるはずです。

6
recursive

このためのプラグインを作成します。 ツール"新しいプラグイン…を選択し、次のスクリプトを入力します。

_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
_

保存します。デフォルトの(User)ディレクトリの_wrap_lines_ex_command.py_として。

メニューバーからこれにアクセスできるようにするには、パッケージの参照…メニュー項目を選択し、Userフォルダーに移動して、_Main.sublime-menu_(必要に応じて作成) この回答 で説明されているように、たとえば次のようなテキストが含まれています以下:

_[
    {
        "id": "edit",
        "children":
        [
            {"id": "wrap"},
            {"command": "wrap_lines_ex", "caption": "Wrap All Lines"}
        ]
    }
]
_

スクリーンショット

前:

Screenshot before

後:

Screenshot after

もちろん、この場合、コメントもラップされているため、コードは機能しなくなります。しかし、それは質問ごとの設計としての動作です。

10
Daniel Beck

数年後、この種のもののための既製のパッケージ(プラグイン)があります。それらは(ウィンドウに表示されている現在の折り返しと一致するように)要求を正確に満たしていない可能性がありますが、どの列で折り返すかを設定で設定できます。

Sublime-Wrap-Plus

GitHubページ

Installation

  1. Sublime Text 2 or 3を開きます。
  2. command-shift-p(Mac OS X)またはctrl-shift-p(Windows)を押してCommand Paletteを開き、「install」と入力して、Install Package Controlのオプションを選択します。
  3. Command Paletteをもう一度開き、「install」ともう一度入力して、Install a Packageのオプションを選択します。
  4. 入力を開始し、sublime-wrap-textを選択します。

使用法

  1. 問題のテキストを選択します。
  2. command+alt+q(Mac OS X)またはalt+q(Windows)を押します。

使用上の微妙な違いや設定方法については、GitHubページをご覧ください。

デモ

enter image description here

After(すべてのテキストを強調表示して、alt + qを押しました)

enter image description here

別の同様のパッケージはSublime-Wrap-Statementです

GitHubページ

私自身は試したことがありませんが、よろしければお試しください。

2
MarredCheese

現時点では、この機能はSublime Text 2の設定に含まれていないようです(Default/Preferences.sublime-settingsで確認できます)。 "line_padding_bottom": 4(4は各行の下に必要なピクセル数)のような構成オプションを使用して、すべての行の明瞭さを読み取ることはできますが、異なる行のパディングを選択的に適用することはできません。行が折り返されます。

機能リクエストを送信することをお勧めします Sublime Text 2のフォーラムで 。実装するのが合理的であれば、この機能もいただければ幸いです。

0
Eric Tjossem