Як скопіювати вбитий прямокутник на кільце для вбивства


11

Я часто дістаю прямокутник тексту з буфера, але потім виявляю, що хочу витягнути текст так, ніби це не прямокутник. Чи є спосіб додати поточний вбитий прямокутник до кільця вбивства?

У посібнику GNU Emacs сказано:

«Вбити» прямокутник - це не вбивство у звичному розумінні; прямокутник зберігається не в кільці для вбивства, а в спеціальному місці, яке фіксує лише останні вбитий прямокутник. Це відбувається тому, що янг прямокутника настільки відрізняється від лінійного тексту, що чіпляє, що необхідно використовувати різні команди. При прямокутних прямокутних елементах не визначено.

Однак я в основному можу отримати поведінку, яку я хочу

  • M-> перейти до кінця буфера
  • C-x r y прямий прямокутник
  • C-x C-x пункт обміну та маркування (вибирає щойно вибиті лінії)
  • C-w вбити вибір до кільця вбивства

Чи є кращий спосіб перетворити вбитий прямокутник на запис для кільця?


Пов’язане рішення - це не те, про що ви просили, але воно з’єднує прямокутники так, як вам потрібно: emacs.stackexchange.com/a/46352/15749
червня

Відповіді:


6

Якщо я зрозумів ваше запитання, ви шукаєте щось подібне:

(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)))))

Надано ErgoEmacs


3

Не впевнений, у чому особливість прямокутника в кільці kill, але якщо ви оновите до Emacs-24.4, тоді можете зробити: C-x SPC .... M-wвибрати прямокутник і розмістити його на кільці kill. Після цього C-yвитягніть цей прямокутник (у тому ж, що було C-x r y, тхо).


Про кільце вбивства є дві речі, які є "особливими". Найважливіший (для мене) спосіб, коли предмети з кільця вбивання забираються. Простіше кажучи, ривок зміщує існуючий текст вниз, а не зміщуючи його праворуч. Використання кільця вбивства також має побічну перевагу збереження історії вбитого тексту. Здається, 24.4 може забезпечити другу вигоду, але не першу.
nispio

Дійсно, у такому випадку нова поведінка 24.4 покращує ту частину, про яку вам все одно.
Стефан

1

Мене спочатку дратувала відсутність вбудованого рішення цієї проблеми, потім зрозуміла, що існує вбудоване рішення: kill-прямокутник.

Скажіть, у вас схожий текст

AAA BBBBBBBBB
AAA BBB
AAA BBBBBBB

Але захочете частину тексту "B" десь в іншому місці, як-от між цими і D-рядками:

CCCCC
CCC
DDDD
DD

Якщо ви скопіювали прямокутник B ( C-x r M-w), а потім помістіть крапку на перший 'D', а потім поверніть прямокутник назад ( C-x r y), ви закінчите

CCCCC
CCC
BBBBBBBBBDDDD
BBB      DD
BBBBBBB  

де ти дуже хотів

CCCCC
CCC
BBBBBBBBB
BBB
BBBBBBB
DDDD
DD

Копіювати прямокутник «B» та витягнути їх на нове місце може здатися природним, але кращим рішенням буде просто скопіювати рядки «A» та «B» та перетягнути їх у повному обсязі між «C» та « D 'рядки.

Потім позначте прямокутник, що містить знаки "A", та використайте kill-rectangle( C-x r k) для завершення бажаного результату.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.