¿Cómo actuar en rectángulos más allá del final de la línea?

16

Esto es lo que la documentación de Vim tiene que decir al respecto:

La edición virtual significa que el cursor se puede colocar donde no hay un carácter real. Esto puede estar a medio camino en una pestaña o más allá del final de la línea. Útil para seleccionar un rectángulo en modo Visual y editar una tabla.

Preferiblemente me gustaría ver esto implementado como un modo menor o una configuración integrada.

niñera
fuente
¿Quieres esto para seleccionar un rectángulo? Si ese es el caso, es el valor predeterminado en la versión de desarrollo actual.
Malabarba
No, estoy pensando más en tirar / reemplazar rectángulos. Utilizo el modo de marca de rectángulo y, aunque es una buena característica, no es lo que estoy buscando.
niñera
De hecho, para tirar / reemplazar rectángulos, sería un compañero natural de la funcionalidad existente en el modo de marca de rectángulo. No estoy seguro de cuál debería ser la interfaz de usuario, aunque.
Stefan
Gracias por la respuesta, Stefan. Esta característica sería más útil cuando se trata de rectángulos, por lo que tal vez mientras está en modo de marca de rectángulo, un comando podría alternar un tipo de modo de edición virtual. En este momento, en el modo de marca de rectángulo, el punto parece que está en un modo de edición virtual: puede moverse más allá del final de una línea con C-f. Pero cuando tira de un rectángulo después de hacer esto, el rectángulo aparece en la marca en lugar del punto. Si apareciera en ese momento, eso resolvería este problema.
niñera

Respuestas:

10

La extend-rectangle-to-endfunción en el rectangle-utilspaquete es lo que quieres. Está en melpa.

Inserta espacios para hacer que la selección del rectángulo actual se extienda para cubrir la línea más larga de la región.

Para obtener este comportamiento, lo tengo en mi init.el. C-x r eno está obligado a nada más en vainilla emacs

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Calamares
fuente
1
Para aclarar, con este paquete, selecciona la región, luego haz M-x extend-rectangle-to-endy luego C-x r M-wo C-x r k.
Kaushal Modi
18

Otra respuesta: uso M-x picture-mode. Puede eliminar o copiar rectángulos a través de caracteres de tabulación, etc., enviarlos a registros, etc.

Dibujó
fuente
3
Una ventaja de usar este método es que puede controlar exactamente qué tan ancho desea que sea su selección de rectángulo. Si tengo la línea 1 con 30 caracteres y la línea 2 con 5 caracteres, puedo elegir que el rectángulo tenga 15 caracteres de ancho y 2 líneas de alto; no puede hacer eso extend-rectangle-to-endya que la selección del rectángulo con eso siempre será 30x2.
Kaushal Modi
1
picture-modeEs viejo y poco conocido. Entre otras características poco conocidas que tiene: exiting ( C-c C-c) elimina los espacios en blanco finales.
Dibujó
1
¡Eso es genial, Drew! Pregunta: ¿hay alguna razón para no aconsejar rectangle-minor-modeser "envuelto" picture-mode? (consejo ya que no veo ningún gancho en la fuente de rectangle-minor-mode).
rasmus
1
Aquí está mi consejo, por cierto. No despoja espacios en blanco ya que es una especie de fuera de lugar aquí:(defun rectangle-mark-mode-wrapped-in-picture-mode (orig-fun &rest args) (if rectangle-mark-mode (picture-mode) (and (eq major-mode 'picture-mode) (picture-mode-exit t)))) (advice-add 'rectangle-mark-mode :around #'rectangle-mark-mode-wrapped-in-picture-mode)
Rasmus