Jak działać na prostokątach poza końcem linii?

16

Oto, co mówi o tym dokumentacja Vima:

Edycja wirtualna oznacza, że ​​kursor można ustawić w miejscu, w którym nie ma rzeczywistego znaku. Może to być w połowie zakładki lub poza końcem linii. Przydatne do wybierania prostokąta w trybie wizualnym i edytowania tabeli.

Wolałbym, żeby to zaimplementowano jako tryb podrzędny lub wbudowane ustawienie.

niania
źródło
Czy chcesz to wybrać prostokąt? W takim przypadku jest to ustawienie domyślne w bieżącej wersji programistycznej.
Malabarba
Nie, myślę raczej o szarpaniu / zastępowaniu prostokątów. Używam trybu oznaczania prostokąta i chociaż jest to miła funkcja, nie jest to, czego szukam.
niania
Rzeczywiście, do przeciągania / zastępowania prostokątów byłby on naturalnym towarzyszem istniejącej funkcjonalności w trybie znaku prostokątnego. Nie jestem pewien, jaki powinien być interfejs użytkownika, tho.
Stefan
Dzięki za odpowiedź, Stefan. Ta funkcja byłaby najbardziej przydatna w przypadku prostokątów, więc być może w trybie oznaczania prostokąta polecenie może przełączać tryb edycji wirtualnej. Obecnie w trybie oznaczania prostokąta punkt wygląda tak, jakby znajdował się w wirtualnym trybie edycji: może przesuwać się za koniec linii za pomocą C-f. Ale kiedy pociągniesz prostokąt po wykonaniu tej czynności, prostokąt pojawi się przy znaku zamiast w punkcie. Jeśli pojawiłby się w punkcie, to rozwiązałoby ten problem.
niania

Odpowiedzi:

10

extend-rectangle-to-endFunkcji w rectangle-utilspakiecie, co chcesz. To jest włączone melpa.

Wstawia spacje, aby rozszerzyć bieżący wybór prostokąta, aby objąć najdłuższą linię w regionie.

Aby uzyskać takie zachowanie, mam to w swoim pliku init.el. C-x r enie jest związany z niczym innym w emacsach waniliowych

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Kałamarnica
źródło
1
Aby to wyjaśnić, w tym pakiecie wybierasz region, a następnie robisz, M-x extend-rectangle-to-enda następnie C-x r M-wlub C-x r k.
Kaushal Modi
18

Inna odpowiedź: użyj M-x picture-mode. Możesz zabijać lub kopiować prostokąty pośrodku tabulatorów itp., Wysyłać je do rejestrów itp.

Rysował
źródło
3
Jedną z zalet korzystania z tej metody jest to, że możesz dokładnie kontrolować, jak szeroki ma być wybór prostokąta. Jeśli mam linię 1 z 30 znakami i linię 2 z 5 znakami, mogę wybrać prostokąt o szerokości 15 znaków i wysokości 2 linii; nie można tego zrobić, extend-rectangle-to-endponieważ wybór prostokąta z tym zawsze będzie wynosił 30 x 2.
Kaushal Modi
1
picture-modejest stary i mało znany. Wśród innych mało znanych funkcji: exiting ( C-c C-c) usuwa końcowe białe znaki.
Drew
1
To wspaniale, Drew! Pytanie: czy istnieje jakikolwiek powód, by nie doradzać, rectangle-minor-modeaby się „owinąć” picture-mode? (rada, ponieważ nie widzę żadnych haczyków w źródle rectangle-minor-mode).
rasmus
1
Oto moja rada, przy okazji. Nie usuwa białych znaków, ponieważ jest to trochę nieprzyzwoite:(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