Сохраните форму прямоугольного выделения в регистре Emacs

#emacs

#emacs

Вопрос:

Мне нужно повторно скопировать текст из прямоугольной области фиксированного размера, и я хотел бы иметь возможность сохранять форму этой прямоугольной области в регистре, чтобы мне не приходилось постоянно воссоздавать тот же размер.

  1. cua-set-rectangle-mark ( <C-return> )

  2. Переместите точку, чтобы создать область размером 8×16 (примечание: этот шаг я хочу удалить)

  3. piture-clear-rectangle ( C-c C-k )

  4. Переместите точку в новое местоположение.

  5. picture-yank-rectangle ( C-c C-y )

Я хотел бы заменить шаги 1 и 2 одной командой «вставить прямоугольную область из регистра». Возможно ли это?

Ответ №1:

Не проще ли было бы просто использовать макрос клавиатуры для этого?

Например.:-

 C-x C-(   [start recording kbd macro]
steps 1-2
C-x C-)   [end recording kbd macro]
  

Затем

 C-x e     [execute kbd macro]
  

Комментарии:

1. О! Я использую их каждый день и все равно забыл о макросах:-D Хотя это определенно решает мою проблему, технически это не отвечает на вопрос; Я приму это как правильный ответ, если я не получу ответ на «сохранить прямоугольную область в регистре». Приветствую, Бен.

2. круто, я не знал сразу, как сохранить прямоугольник в регистре, но подумал, что это может решить проблему в любом случае 🙂 @phils нашел способ сделать то, что вы на самом деле хотите, однако, похоже, вам следует принять его ответ 🙂

3. Его ответ не отвечает на вопрос. Создание макроса и присвоение ему имени — лучший способ решить проблему.

4. Ах да, конечно, это не сохраняет форму . Клавиатурные макросы ftw, они ооочень полезны. 🙂

Ответ №2:

Вероятно, вы захотите использовать copy-rectangle-to-register и insert-register :

C-x r r запускает команду copy-rectangle-to-register, которая представляет собой интерактивную скомпилированную функцию Lisp в `register.el’.

Оно привязано к C-x r r.

(копирование прямоугольника в НАЧАЛО КОНЦА РЕГИСТРА РЕГИСТРАЦИИ и необязательный ФЛАГ УДАЛЕНИЯ)

Скопируйте прямоугольную область в регистр register. С префиксом arg также удалите. Чтобы вставить этот регистр в буфер, используйте C-x r g.

Вызываемый из программы, принимает четыре аргумента: REGISTER, START, END и DELETE-FLAG. НАЧАЛО и КОНЕЦ — это позиции буфера, задающие два угла прямоугольника.

вставить-зарегистрировать:

C-x r g запускает команду insert-register, которая представляет собой интерактивную скомпилированную функцию Lisp в `register.el’.

Оно привязано к C-x r g, C-x r i.

(регистр insert-register и необязательный аргумент)

Вставьте содержимое регистра register. (РЕГИСТР — это символ.) Обычно точка ставится перед и пометка после вставленного текста. Если необязательный второй аргумент не равен нулю, поставьте отметку перед и точку после. В интерактивном режиме второй аргумент не равен нулю, если указан префиксный аргумент.

Смотрите также:

C-xrc: clear-rectangle
C-xrd: delete-rectangle
C-xrk: kill-rectangle
C-xro: open-rectangle
C-xrr: copy-rectangle-to-register
C-xrt: string-rectangle
C-xry: yank-rectangle

Редактировать:

Верно, я совершенно неправильно понял вопрос.

Если вы все еще особенно хотите использовать регистры, вы могли бы сохранять и повторно выполнять перемещения точек с помощью чего-то вроде этого:

 (set-register ?a [right right right down down])
(command-execute (get-register ?a))
  

Комментарии:

1. На самом деле это не решает проблему. Это копирует текст в прямоугольной области в регистр, это не сохраняет прямоугольную форму в регистре.