¿Existe una forma automatizada de insertar saltos de línea en cada punto donde se ajusta actualmente el texto? Después de esta operación, no se deben ajustar líneas, pero deben verse visualmente idénticas.
Respuesta1
Crea un complemento para esto. SeleccionarHerramientas » Nuevo complemento…e ingrese el siguiente script:
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
Guarde, por ejemplo, como wrap_lines_ex_command.py
en el directorio predeterminado ( User
).
Para que esto sea accesible desde la barra de menú, seleccione elExplorar paquetes...elemento del menú, navegue hasta la User
carpeta y edítela Main.sublime-menu
(creándola si es necesario) como se describe enesta respuestapor lo que contiene texto como, por ejemplo, el siguiente:
[
{
"id": "edit",
"children":
[
{"id": "wrap"},
{"command": "wrap_lines_ex", "caption": "Wrap All Lines"}
]
}
]
Capturas de pantalla
Antes:
Después:
Por supuesto, en este caso, debido a que los comentarios también se ajustan, el código ya no funcionará. Pero ese es el comportamiento como diseño según la pregunta.
Respuesta2
Años más tarde, existen paquetes (complementos) ya preparados para este tipo de cosas. Es posible que no satisfagan su solicitud exactamente (para que coincida con el ajuste actual que se muestra en su ventana), pero puede establecer en qué columna desea ajustar en sus preferencias.
Sublime-Wrap-Plus
Instalación
- Abierto
Sublime Text 2 or 3
. - Presione
command-shift-p
(Mac OS X) octrl-shift-p
(Windows) para abrirCommand Palette
, escriba "instalar" y seleccione la opción paraInstall Package Control
. - Abra
Command Palette
nuevamente, escriba "instalar" nuevamente y seleccione la opciónInstall a Package
. - Comience a escribir y luego seleccione
sublime-wrap-text
.
Uso
- Seleccione el texto en cuestión.
- Presione
command+alt+q
(Mac OS X) oalt+q
(Windows).
Consulte la página de GitHub para conocer más matices de uso y cómo establecer preferencias.
Manifestación
Antes
Después(Acabo de resaltar todo el texto y presioné alt+q)
Otro paquete similar esDeclaración-envoltura-sublime
Yo no he probado este, pero puedes intentarlo si quieres.
Respuesta3
La cuenta es demasiado joven para agregarla como comentario
, pero quería agregar una actualización de 2021Excelente respuesta de MarredCheese 2017encontrado arriba.
Para instalar el primer paquete que MarredCheese mencionó:
GitHub: https://github.com/ehuss/Sublime-Wrap-Plus
Nombre del paquete sublime: Envoltura Plus
Paso 1.Todavía funciona, pegando desde la publicación original:
- Abierto sublime
Paso 2.Todavía funciona, pegando desde la publicación original:
- Presione commandshiftp(Mac OS X) o ctrlshiftp(Windows) para abrir
Command Palette
, escriba "instalar" y seleccione la opción paraInstall Package Control
.
Paso 3.es ligeramente inexacto.
En caso de que la sintaxis haya cambiado, esto es lo que funciona en 2021:
Paso 3. (Original):
- Abra el archivo
Command Palette again
, escriba "instalar" nuevamente y seleccione la opciónInstall a Package
.
Paso 3. (Revisado para 2021):
- en lugar de escribir
Install a Package
escriba:Install Package
oPackage Control: Install Package
- Nota: "Control de paquetes: Paquete de instalación avanzada" es útil,
pero no necesario para esta receta.
Etapa 4.ya no funciona.
Paso 4. (Original):
- Comience a escribir y luego seleccione
sublime-wrap-text
.
Paso 4. (Revisado para 2021):
- Escriba
Wrap Plus
en el menú desplegable Instalar paquete
(veráhttps://github.com/ehuss/Sublime-Wrap-Plusen los detalles de esta entrada)
Para instalar el segundo paquete que MarredCheese menciona al final de su respuesta:
GitHub: https://github.com/shagabutdinov/sublime-wrap-statement
Nombre del paquete sublime:Declaración envolvente
Siga los mismos pasos en la última sección, pero paraPaso 3.escriba WrapStatement
en su lugar (sin espacios).
(Ya veráshttps://github.com/shagabutdinov/sublime-wrap-statementen los detalles de esta entrada en el Install Package
desplegable)
Respuesta4
Por el momento, parece que esta característica no está incluida en las preferencias de Sublime Text 2 (puedes comprobarlo tú mismo en Predeterminado/Preferencias.sublime-settings). Es posible utilizar una opción de configuración como "line_padding_bottom": 4
(donde 4 es el número de píxeles que desea debajo de cada línea) para leer con claridad todas las líneas, pero no es posible aplicar selectivamente un relleno de línea diferente dependiendo de si la línea está ajustada o no. .
Es posible que desee enviar una solicitud de funciónen el foro de Sublime Text 2. Sé que también agradecería esta funcionalidad, si es razonable implementarla.