sublimetext3 - Eliminando hasta espacios en blanco en Sublime Text

CorePress2024-01-25  7

¿Hay alguna manera de eliminar todos los caracteres hasta el primer espacio en blanco en Sublime? Sé que puedes usar Ctrl+Delete para hacer eso, pero se detiene en caracteres que no son palabras (",:,&,*, etc.). Cuando intentas eliminar aaa aaa 2+a, desde el final, eliminará 2+a hasta el signo +, pero eliminará aaa hasta el espacio. Necesito cambiar eso para que elimine 2+a hasta el primer espacio. La solución puede ser cualquier cosa; cambiar la configuración, complemento.

Puedes escribir una expresión regular, buscarla, seleccionarla toda y eliminarla.

- 0piedra0

29/03/2021 a las 23:01

Hago eso mientras escribo, como cuando usas Ctrl+Retroceso. Solo necesita eliminar todos los caracteres sin espacios hasta el primer espacio/espacio en blanco.

- IGRACH

29/03/2021 a las 23:49



------------------------------------

Encontré una solución para esto. Es a través de este complemento:

https://packagecontrol.io/packages/KeyboardNavigation

La clave es:

{ "keys": ["ctrl+backspace"], "command": "delete_to_beg_of_contig_boundary", "args": {"forward": false} }

Elimina todos los caracteres de derecha a izquierda hasta el primer espacio en blanco.



------------------------------------

He escrito un complemento de Sublime Text para eliminar el texto que necesites. Es casi idéntico al comando eliminar_palabra de ST, pero solo se interrumpe en espacios en blanco o no.

Cuando se llama, el complemento elimina el texto del cursor al grupo de caracteres anterior o siguiente, definiéndose la agrupación como espacios en blanco o caracteres que no son espacios en blanco. Por lo tanto, si se ejecuta varias veces seguidas, alternará entre eliminar grupos de espacios en blanco y caracteres que no sean espacios en blanco delante o detrás del cursor. los delanterosEl parámetro del método run() (es decir, el argumento del comando) controla la dirección de eliminación.

Guarde el complemento en algún lugar de la jerarquía de carpetas de paquetes de configuración. por ejemplo

.../sublime-text-3/Packages/User/DeleteToWhitespace.py

Agregue combinaciones de teclas a su archivo .sublime-keymap de usuario. por ejemplo

// 
// These key bindings override the ST 'delete_word' keys but use whatever keys you want.
// You could use `super+delete` and `super+backspace` and keep ST's delete keys intact.
// 
{ "keys": ["ctrl+delete"], "command": "delete_to_whitespace", "args": {"forwards": true} },
{ "keys": ["ctrl+backspace"], "command": "delete_to_whitespace", "args": {"forwards": false} },

A continuación se muestra el complemento DeleteToWhitespace.py. Se ha subido a este GitHub Gist; esto enlaza directamente con el código fuente sin formato.

#
# Name:        Delete To Whitespace
# Requires:    Plugin for Sublime Text v3
# Command:     delete_to_whitespace
# Args:        forwards: bool (delete backwards if false)
# License:     MIT License
#

import sublime, sublime_plugin, re

class DeleteToWhitespaceCommand(sublime_plugin.TextCommand):
    """
    A Sublime Text plugin that deletes text from the cursor to the next or
    previous group of characters, the grouping being defined as either
    whitespace or non-whitespace characters. Thus if run several times in
    succession it will alternate between deleting groups of whitespace and
    non-whitespace ahead or behind the cursor. The forwards parameter of the
    run() method (i.e. the command's arg) controls the deletion direction.
    """

    def run(self, edit, forwards=True):
        self.edit = edit
        self.forwards = forwards

        if forwards:
            self.delete_forwards()
        else:
            self.delete_backwards()

    def delete_forwards(self):
        whitespace_regex = "^\s+"
        non_whitespace_regex = "^\S+"

        for sel in self.view.sel():

            if sel.size() > 0:
                self.view.erase(self.edit, sel)
                continue

            # ∴ sel.a == sel.b == sel.begin() == sel.end()
            # view.full_line() includes the trailing newline (if any).
            cursor = sel.a
            line = self.view.full_line(cursor)
            cursor_to_eol = sublime.Region(cursor, line.end())
            cursor_to_eol_str = self.view.substr(cursor_to_eol)

            match = re.search(whitespace_regex, cursor_to_eol_str)
            if match:
                self.erase_matching_characters(cursor, match)
                continue

            match = re.search(non_whitespace_regex, cursor_to_eol_str)
            if match:
                self.erase_matching_characters(cursor, match)
                continue

    def delete_backwards(self):
        whitespace_regex = "\s+$"
        non_whitespace_regex = "\S+$"

        for sel in self.view.sel():

            if sel.size() > 0:
                self.view.erase(self.edit, sel)
                continue

            # ∴ sel.a == sel.b == sel.begin() == sel.end()
            # view.line() excludes the trailing newline (if any).
            cursor = sel.a
            line = self.view.line(cursor)
            cursor_to_bol = sublime.Region(cursor, line.begin())
            cursor_to_bol_str = self.view.substr(cursor_to_bol)

            # Delete the newline of the 'previous' line.
            if cursor_to_bol.size() == 0 and cursor > 0:
                erase_region = sublime.Region(cursor, cursor - 1)
                self.view.erase(self.edit, erase_region)
                continue

            match = re.search(whitespace_regex, cursor_to_bol_str)
            if match:
                self.erase_matching_characters(cursor, match)
                continue

            match = re.search(non_whitespace_regex, cursor_to_bol_str)
            if match:
                self.erase_matching_characters(cursor, match)
                continue

    def erase_matching_characters(self, cursor, match):
        match_len = match.end() - match.start()
        if self.forwards:
            erase_region = sublime.Region(cursor, cursor + match_len)
        else:
            erase_region = sublime.Region(cursor, cursor - match_len)
        self.view.erase(self.edit, erase_region)

1

He intentado esto y no sucede nada cuando presiono la tecla de acceso rápido.

- IGRACH

31 de marzo de 2021 a las 17:44

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare