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.py
im default ( User
) Verzeichnis.
Um dies über die Menüleiste zugänglich zu machen, wählen Sie dasPakete durchsuchen…Menüpunkt, navigieren Sie zum User
Ordner 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:
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
Installation
- Offen
Sublime Text 2 or 3
. - Drücken Sie
command-shift-p
(Mac OS X) oderctrl-shift-p
(Windows), um die zu öffnenCommand Palette
, geben Sie „Installieren“ ein und wählen Sie die Option zumInstall Package Control
. - Öffnen Sie es
Command Palette
erneut, geben Sie erneut „Installieren“ ein und wählen Sie die Option zumInstall a Package
. - Beginnen Sie mit der Eingabe und wählen Sie dann aus
sublime-wrap-text
.
Verwendung
- Markieren Sie den betreffenden Text.
- Drücken Sie
command+alt+q
(Mac OS X) oderalt+q
(Windows).
Weitere Einzelheiten zur Verwendung und zum Festlegen von Einstellungen finden Sie auf der GitHub-Seite.
Demo
Vor
Nach(Ich habe einfach den gesamten Text markiert und Alt+Q gedrückt)
Ein weiteres ähnliches Paket istSublime-Wrap-Anweisung
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:
- Öffnen Sie Sublime
Schritt 2.Funktioniert immer noch. Einfügen aus dem Originalbeitrag:
- 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 zumInstall 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 zumInstall a Package
.
Schritt 3. (Überarbeitet für 2021):
- Anstatt Folgendes einzugeben,
Install a Package
geben Sie Folgendes ein:Install Package
oderPackage 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):
- Geben Sie
Wrap Plus
in das Dropdown-Menü „Paket installieren“ ein
(Sie sehenhttps://github.com/ehuss/Sublime-Wrap-Plusin den Details dieses Eintrags)
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 WrapStatement
stattdessen ein (kein Leerzeichen).
(Sie werden sehenhttps://github.com/shagabutdinov/sublime-wrap-statementin den Details dieses Eintrags im Install Package
Dropdown)
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.