Come agire sui rettangoli oltre la fine della linea?


16

Ecco cosa dice la documentazione di Vim al riguardo:

La modifica virtuale significa che il cursore può essere posizionato dove non c'è un carattere reale. Questo può essere a metà strada in una scheda o oltre la fine della linea. Utile per selezionare un rettangolo in modalità Visual e modificare una tabella.

Preferirei vederlo implementato come una modalità minore o un'impostazione integrata.


Lo vuoi per selezionare un rettangolo? In tal caso è l'impostazione predefinita nella versione di sviluppo corrente.
Malabarba,

No, sto pensando più come strappare / sostituire i rettangoli. Uso la modalità segno rettangolare e, sebbene sia una bella caratteristica, non è quello che sto cercando.
tata

In effetti, per strappare / sostituire i rettangoli, sarebbe un compagno naturale per la funzionalità esistente in modalità rettangolo-segno. Non sono sicuro di come dovrebbe essere l'interfaccia utente, comunque.
Stefan,

Grazie per la risposta, Stefan. Questa funzione sarebbe molto utile quando si ha a che fare con i rettangoli, quindi forse in modalità segno di rettangolo un comando potrebbe attivare o disattivare un tipo di modalità di modifica virtuale. In questo momento in modalità segno rettangolare, il punto sembra essere in una modalità di modifica virtuale: può spostarsi oltre la fine di una linea con C-f. Ma quando si tira un rettangolo dopo averlo fatto, il rettangolo appare sul segno anziché sul punto. Se apparisse al punto, ciò risolverebbe questo problema.
tata

Risposte:


10

La extend-rectangle-to-endfunzione nel rectangle-utilspacchetto è quella che vuoi. È acceso melpa.

Inserisce spazi per estendere la selezione del rettangolo corrente in modo da coprire la linea più lunga della regione.

Per ottenere questo comportamento, ho questo nel mio init.el. C-x r enon è legato a nient'altro in emacs alla vaniglia

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)

1
Per chiarire, con questo pacchetto, selezionare la regione, quindi fare M-x extend-rectangle-to-ende quindi C-x r M-wo C-x r k.
Kaushal Modi,

18

Un'altra risposta: usare M-x picture-mode. Puoi uccidere o copiare rettangoli nel mezzo di caratteri di tabulazione ecc., Inviarli a registri, ecc.


3
Uno dei vantaggi dell'utilizzo di questo metodo è che puoi controllare esattamente la larghezza della selezione del rettangolo. Se ho la riga 1 con 30 caratteri e la riga 2 con 5 caratteri, posso scegliere il rettangolo in modo che sia largo 15 caratteri e alto 2 righe; non posso farlo con extend-rectangle-to-endcome la selezione del rettangolo con quella sarà sempre 30x2.
Kaushal Modi,

1
picture-modeè vecchio e poco conosciuto. Tra le altre caratteristiche poco conosciute che ha: exiting ( C-c C-c) rimuove gli spazi bianchi finali.
Disegnato il

1
Fantastico, Drew! Domanda: c'è qualche motivo per non consigliare rectangle-minor-modedi essere "avvolti" picture-mode? (consiglio dato che non vedo alcun gancio nella fonte di rectangle-minor-mode).
rasmus

1
Ecco il mio consiglio, tra l'altro. Non (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)
spoglia lo
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.