Sublime-Wrap-Plus

Sublime-Wrap-Plus

¿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.pyen el directorio predeterminado ( User).

Para que esto sea accesible desde la barra de menú, seleccione elExplorar paquetes...elemento del menú, navegue hasta la Usercarpeta 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:

Captura de pantalla antes

Después:

Captura de pantalla 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

página de GitHub

Instalación

  1. Abierto Sublime Text 2 or 3.
  2. Presione command-shift-p(Mac OS X) o ctrl-shift-p(Windows) para abrir Command Palette, escriba "instalar" y seleccione la opción para Install Package Control.
  3. Abra Command Palettenuevamente, escriba "instalar" nuevamente y seleccione la opción Install a Package.
  4. Comience a escribir y luego seleccione sublime-wrap-text.

Uso

  1. Seleccione el texto en cuestión.
  2. Presione command+alt+q(Mac OS X) o alt+q(Windows).

Consulte la página de GitHub para conocer más matices de uso y cómo establecer preferencias.

Manifestación

Antes

ingrese la descripción de la imagen aquí

Después(Acabo de resaltar todo el texto y presioné alt+q)

ingrese la descripción de la imagen aquí

Otro paquete similar esDeclaración-envoltura-sublime

página de GitHub

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:

  1. Abierto sublime

Paso 2.Todavía funciona, pegando desde la publicación original:

  1. Presione commandshiftp(Mac OS X) o ctrlshiftp(Windows) para abrir Command Palette, escriba "instalar" y seleccione la opción para Install 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ón Install a Package.

   Paso 3. (Revisado para 2021):

  • en lugar de escribir Install a Packageescriba:
    • Install Packageo
    • Package 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):

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 WrapStatementen su lugar (sin espacios).
(Ya veráshttps://github.com/shagabutdinov/sublime-wrap-statementen los detalles de esta entrada en el Install Packagedesplegable)

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.

información relacionada