Jak skopiować zabity prostokąt do pierścienia zabijania

11

Często wyodrębniam prostokąt tekstu z bufora, ale potem stwierdzam, że chcę szarpnąć tekst tak, jakby nie był prostokątem. Czy istnieje sposób, aby dodać bieżący zabity prostokąt do pierścienia zabijania?

Podręcznik GNU Emacs mówi:

„Zabijanie” prostokąta nie jest zabijaniem w zwykłym znaczeniu; prostokąt nie jest przechowywany w pierścieniu zabijania, ale w specjalnym miejscu, które rejestruje tylko ostatni zabity prostokąt. Wynika to z tego, że szarpanie prostokąta jest tak różne od szarpania tekstu liniowego, że należy użyć różnych poleceń szarpnięcia. Trzaskanie nie jest zdefiniowane dla prostokątów.

Mogę jednak zasadniczo uzyskać pożądane zachowanie

  • M-> idź do końca bufora
  • C-x r y prostokąt szarpnięcia
  • C-x C-x punkt wymiany i znak (wybiera nowo szarpane linie)
  • C-w zabij zaznaczenie do pierścienia zabijania

Czy istnieje lepszy sposób na przekształcenie zabitego prostokąta w wejście typu „zabójca”?

nispio
źródło
Rozwiązaniem nie jest powiązany co prosiłeś, ale szarpie prostokątów jak chcesz: emacs.stackexchange.com/a/46352/15749
Jue

Odpowiedzi:

6

Jeśli zrozumiałem twoje pytanie, szukasz czegoś takiego:

(defun youngfrog/copy-rectangle-to-kill-ring (start end)
  "Saves a rectangle to the normal kill ring. Not suitable for yank-rectangle."
  (interactive "r")
  (let ((lines (extract-rectangle start end)))
    (with-temp-buffer
      (while lines ;; insert-rectangle, but without the unneeded stuff
        ;; (most importantly no push-mark)
        (insert-for-yank (car lines))
        (insert "\n")
        (setq lines (cdr lines)))
      (kill-ring-save (point-min) (point-max)))))

Dzięki uprzejmości ErgoEmacs

Nsukami _
źródło
3

Nie jestem pewien, co jest specjalnego w posiadaniu prostokąta w pierścieniu zabójstwa, ale jeśli uaktualnisz do Emacsa-24.4, możesz: C-x SPC .... M-wwybrać prostokąt i umieścić go na pierścieniu zabijania. Potem C-yszarpnie ten prostokąt (tak samo było C-x r y, tho).

Stefan
źródło
W pierścieniu zabójstwa są dwie rzeczy, które są „specjalne”. Najważniejszy (dla mnie) jest sposób, w jaki szarpane są przedmioty z pierścienia zabijania. Mówiąc prosto, szarpnięcie przesuwa istniejący tekst w dół zamiast przesuwać go w prawo. Korzystanie z pierścienia zabijania ma również dodatkową zaletę polegającą na przechowywaniu historii zabitych tekstów. Wygląda na to, że 24.4 może zapewnić drugą korzyść, ale nie pierwszą.
nispio
Ach, w takim razie nowe zachowanie 24.4 poprawia tę część, na której ci nie zależy.
Stefan
1

Początkowo byłem zirytowany brakiem wbudowanego rozwiązania tego problemu, a potem zdałem sobie sprawę, że istnieje wbudowane rozwiązanie: kill-prostokąt.

Powiedz, że masz podobny tekst

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

Ale chcę część „B” tekstu gdzie indziej, na przykład między tymi wierszami C i D:

CCCCC
CCC
DDDD
DD

Jeśli skopiujesz prostokąt B ( C-x r M-w), a następnie umieścisz punkt na pierwszym „D”, a następnie pociągniesz prostokąt do tyłu ( C-x r y), to skończysz na

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

gdzie naprawdę chciałeś

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

Kopiowanie prostokąta „B” i szarpanie ich w nowe miejsce może wydawać się naturalne, ale lepszym rozwiązaniem jest po prostu skopiowanie linii „A” i „B” oraz przeciągnięcie ich w całości między „C” i „ Linie „D”.

Następnie zaznacz prostokąt zawierający „A” i użyj kill-rectangle( C-x r k), aby zakończyć pożądanym wynikiem.

Colin Fraizer
źródło