Sublime-Wrap-Plus

Sublime-Wrap-Plus

Gibt es eine automatisierte Möglichkeit, an jeder Stelle, an der der Text gerade umbrochen wird, Zeilenumbrüche einzufügen? Nach dieser Operation sollten keine Zeilen mehr umbrochen werden, aber optisch sollte es identisch aussehen.

Antwort1

Erstellen Sie hierfür ein Plugin. Wählen SieTools » Neues Plugin…und geben Sie das folgende Skript ein:

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

Speichern Sie zB wrap_lines_ex_command.pyim default ( User) Verzeichnis.

Um dies über die Menüleiste zugänglich zu machen, wählen Sie dasPakete durchsuchen…Menüpunkt, navigieren Sie zum UserOrdner und bearbeiten Sie ihn Main.sublime-menu(erstellen Sie ihn ggf.) wie indiese AntwortEs enthält also beispielsweise folgenden Text:

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

Screenshots

Vor:

Screenshot vorher

Nach:

Screenshot nach

Natürlich funktioniert der Code in diesem Fall nicht mehr, da auch Kommentare umbrochen werden. Aber das ist gemäß der Frage ein beabsichtigtes Verhalten.

Antwort2

Jahre später gibt es fertige Pakete (Plug-ins) für solche Dinge. Sie erfüllen Ihre Anforderungen möglicherweise nicht genau (und entsprechen nicht der aktuellen Zeilenumbruchanzeige in Ihrem Fenster), aber Sie können in den Einstellungen festlegen, in welcher Spalte der Zeilenumbruch erfolgen soll.

Sublime-Wrap-Plus

GitHub-Seite

Installation

  1. Offen Sublime Text 2 or 3.
  2. Drücken Sie command-shift-p(Mac OS X) oder ctrl-shift-p(Windows), um die zu öffnen Command Palette, geben Sie „Installieren“ ein und wählen Sie die Option zum Install Package Control.
  3. Öffnen Sie es Command Paletteerneut, geben Sie erneut „Installieren“ ein und wählen Sie die Option zum Install a Package.
  4. Beginnen Sie mit der Eingabe und wählen Sie dann aus sublime-wrap-text.

Verwendung

  1. Markieren Sie den betreffenden Text.
  2. Drücken Sie command+alt+q(Mac OS X) oder alt+q(Windows).

Weitere Einzelheiten zur Verwendung und zum Festlegen von Einstellungen finden Sie auf der GitHub-Seite.

Demo

Vor

Bildbeschreibung hier eingeben

Nach(Ich habe einfach den gesamten Text markiert und Alt+Q gedrückt)

Bildbeschreibung hier eingeben

Ein weiteres ähnliches Paket istSublime-Wrap-Anweisung

GitHub-Seite

Ich habe das selbst nicht probiert, aber Sie können es gerne einmal versuchen, wenn Sie möchten.

Antwort3

Konto zu jung, um es als Kommentar hinzuzufügen
, wollte aber ein Update für 2021 hinzufügenMarredCheese's hervorragende Antwort 2017siehe oben.

So installieren Sie das erste von MarredCheese erwähnte Paket:

GitHub: https://github.com/ehuss/Sublime-Wrap-Plus
Erhabener Paketname: Wrap Plus

Schritt 1.Funktioniert immer noch. Einfügen aus dem Originalbeitrag:

  1. Öffnen Sie Sublime

Schritt 2.Funktioniert immer noch. Einfügen aus dem Originalbeitrag:

  1. Drücken Sie commandshiftp(Mac OS X) oder ctrlshiftp(Windows), um die zu öffnen Command Palette, geben Sie „Installieren“ ein und wählen Sie die Option zum Install Package Control.

Schritt 3.ist geringfügig ungenau.
Falls sich die Syntax geändert hat, funktioniert Folgendes im Jahr 2021:

   Schritt 3. (Original):

  • Öffnen Sie die Command Palette again, geben Sie erneut „Installieren“ ein und wählen Sie die Option zum Install a Package.

   Schritt 3. (Überarbeitet für 2021):

  • Anstatt Folgendes einzugeben, Install a Packagegeben Sie Folgendes ein:
    • Install Packageoder
    • Package Control: Install Package
    • Hinweis: „Paketsteuerung: Erweitertes Paket installieren“ ist nützlich,
      aber für dieses Rezept nicht erforderlich.

Schritt 4.funktioniert nicht mehr.

   Schritt 4. (Original):

  • Beginnen Sie mit der Eingabe und wählen Sie dann aus sublime-wrap-text.

   Schritt 4. (Überarbeitet für 2021):

So installieren Sie das zweite Paket, das MarredCheese unten in seiner Antwort erwähnt hat:

GitHub: https://github.com/shagabutdinov/sublime-wrap-statement
Sublime-Paketname:Wrap-Anweisung

Befolgen Sie die gleichen Schritte wie im letzten Abschnitt, aber fürSchritt 3.geben Sie WrapStatementstattdessen ein (kein Leerzeichen).
(Sie werden sehenhttps://github.com/shagabutdinov/sublime-wrap-statementin den Details dieses Eintrags im Install PackageDropdown)

Antwort4

Im Moment scheint diese Funktion nicht in den Einstellungen von Sublime Text 2 enthalten zu sein (Sie können dies selbst in Default/Preferences.sublime-settings nachsehen). Es ist möglich, eine Konfigurationsoption wie "line_padding_bottom": 4(wobei 4 die Anzahl der Pixel ist, die Sie unter jeder Zeile haben möchten) für die Lesbarkeit aller Zeilen zu verwenden, es ist jedoch nicht möglich, selektiv unterschiedliche Zeilenauffüllungen anzuwenden, je nachdem, ob die Zeile umbrochen wird oder nicht.

Möglicherweise möchten Sie eine Funktionsanfrage einreichenim Forum von Sublime Text 2. Ich weiß, dass ich diese Funktionalität auch schätzen würde, wenn ihre Implementierung sinnvoll wäre.

verwandte Informationen