¿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