Как заменить регион в emacs с содержимым буфера рывка?

Когда я использую VIM или большинство немодальных редакторов (Eclipse, NetBeans и т.д.), я часто делаю следующее. Если у меня будут подобные текстовые блоки, и я должен изменить их всех, то я изменю один, скопирую его (или рывок неудаления использования), выбрать следующий блок, я нуждаюсь и вставляю измененную версию по нему. Если я делаю то же самое в emacs (выберите регион и вставку с C-y), это не заменяет регион, это просто вставляет в позиции курсора. Что путь состоит в том, чтобы сделать это в emacs?

38
задан Mad Wombat 13 April 2010 в 05:59
поделиться

5 ответов

Добавьте это в .emacs:

(delete-selection-mode 1)

Все, что записывается в буфер, пока область активна, перезаписывает его, включая вставку, а также просто ввод чего-либо или нажатие backspace

66
ответ дан 27 November 2019 в 03:15
поделиться

Если включить CUA-режим, эта вставка в выбранный регион становится нормальным поведением.

2
ответ дан 27 November 2019 в 03:15
поделиться

Установка delete-selection-mode , как предложил Майкл, кажется наиболее естественным способом сделать это.

Однако это не то, что я делаю :) Вместо этого я помещаю полезные вещи в «регистр» - например, регистр «a» - с помощью C-x r x a . Затем я убиваю другую копию и копирую регистр в то же место с помощью C-x r g a .

Это удобно, потому что уничтожение не влияет на регистры, поэтому C-x r g a всегда вставляет хорошие данные.

15
ответ дан 27 November 2019 в 03:15
поделиться

По умолчанию способ сделать что-то вроде этого - не совсем элегантный следующий:

  1. Get ваш желаемый текст замены каким-то образом в список уничтожений (например, Mw).
  2. Выделите область, которую нужно заменить.
  3. Удалить его ( C-w ).
  4. Замените его ранее скопированной областью ( C-y , M-y ). Это заменяет только что удаленное содержимое точно таким же текстом, который вы только что удалили ( Cy ), а затем повторно заменяет его следующим последним сохраненным буфером в кольце буферов ( My ]).

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

Я также только что обнаружил M-x delete-region , благодаря Emacs: как удалить текст без уничтожающего кольца? . Как следует из вопроса, это удаляет оскорбительный текст, не помещая его в список уничтожения, что позволяет избежать проблемы с перемещением вашего замещающего текста дальше вниз по стеку. И, как упоминается в соответствующем ответе, вы можете привязать это к сочетанию клавиш по вашему выбору.

8
ответ дан 27 November 2019 в 03:15
поделиться

Я делаю это следующим образом:

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

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

3
ответ дан 27 November 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: