Как действовать на прямоугольники за концом строки?

16

Вот что говорит об этом документация Vim:

Виртуальное редактирование означает, что курсор можно расположить там, где нет действительного символа. Это может быть на полпути во вкладку или за конец строки. Полезно для выбора прямоугольника в визуальном режиме и редактирования таблицы.

Я бы предпочел, чтобы это было реализовано как второстепенный режим или встроенная настройка.

няня
источник
Вы хотите это для выбора прямоугольника? Если это так, то это значение по умолчанию в текущей версии разработки.
Малабарба
Нет, я больше думаю о том, чтобы поменять / заменить прямоугольники. Я использую режим прямоугольной метки, и хотя это хорошая функция, это не то, что я ищу.
няня
Действительно, для восстановления / замены прямоугольников это было бы естественным дополнением к существующей функциональности в режиме прямоугольника-метки. Не уверен, каким должен быть пользовательский интерфейс.
Стефан
Спасибо за ответ, Стефан. Эта функция будет наиболее полезна при работе с прямоугольниками, поэтому, возможно, в режиме пометки прямоугольника команда может переключать режим виртуального редактирования. Прямо сейчас в режиме отметки прямоугольника точка выглядит так, как будто она находится в режиме виртуального редактирования: она может перемещаться за конец строки с помощью C-f. Но когда вы дергаете прямоугольник после этого, прямоугольник появляется на отметке, а не на точке. Если бы оно появилось в тот момент, это решило бы эту проблему.
няня

Ответы:

10

extend-rectangle-to-endФункция в rectangle-utilsпакете, что вы хотите. Это на melpa.

Он вставляет пробелы, чтобы текущий прямоугольник расширялся, чтобы охватить самую длинную линию в области.

Чтобы получить такое поведение, у меня есть это в моем init.el. C-x r eне связан ни с чем в ванильном Emacs

(require 'rectangle-utils)
(global-set-key (kbd "C-x r e") 'extend-rectangle-to-end)
Squidly
источник
1
Чтобы уточнить, с помощью этого пакета, вы выбираете регион, а затем сделать, M-x extend-rectangle-to-endа затем C-x r M-wили C-x r k.
Каушал Моди
18

Другой ответ: используйте M-x picture-mode. Вы можете убивать или копировать прямоугольники через середину символов табуляции и т. Д., Отправлять их в регистры и т. Д.

Нарисовалась
источник
3
Одним из преимуществ использования этого метода является то, что вы можете точно контролировать, насколько широкими должны быть ваши прямоугольники. Если у меня есть строка 1 с 30 символами и строка 2 с 5 символами, я могу выбрать прямоугольник шириной 15 символов и высотой 2 строки; не может сделать это с, extend-rectangle-to-endпоскольку выделение прямоугольника всегда будет 30x2.
Каушал Моди
1
picture-modeстар и малоизвестен. Среди других малоизвестных функций: exiting ( C-c C-c) удаляет завершающие пробелы.
Дрю
1
Это великолепно, Дрю! Вопрос: есть ли причина не советовать rectangle-minor-modeбыть «завернутым» в picture-mode? (совет, так как я не вижу никаких зацепок в источнике rectangle-minor-mode).
Расмус
1
Вот мой совет, кстати. Это не лишает пробелов, потому что это как бы неуместно здесь:(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