Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

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

(delete-selection-mode 1)

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

Ответ 2

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

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

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

Ответ 3

По умолчанию этот способ выглядит не совсем элегантно:

  • Получите нужный текст замены в кольцо убийства как-то (например, M-w).
  • Выделите область, которую нужно заменить.
  • Удалить его (C-w).
  • Замените его на предварительно скопированную область (C-y, M-y). Это заменяет только что удаленное содержимое тем же самым текстом, который вы только что удалили (C-y), а затем повторно заменит его на следующий наиболее недавно сохраненный буфер в кольце буфера (M-y).

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

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

Ответ 4

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

Ответ 5

Как я это делаю:

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

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

Ответ 6

Используйте delete-selection-mode, чтобы вставляемый текст заменял активную область.

Используйте вторичный выбор, чтобы вставлять один и тот же текст снова и снова, даже если вы поочередно выбираете новую область для замены.

См. http://www.emacswiki.org/emacs/SecondarySelection.