Могу ли я сохранить один и тот же элемент для yanks в Emacs?

Что-то, что я часто делаю в Emacs, это вырезать немного текста, а затем заменить другой бит на разрезанный текст. Итак, скажем, у меня есть текст, который я хочу вырвать в качестве последнего элемента в моем kill-ring. Я вытаскиваю его на новое место, а затем убиваю текст, который уже был там. Но теперь убитый текст является последним элементом в kill-ring. Поэтому в следующий раз, когда я хочу вытащить первый элемент, мне нужно сделать C-y M-y. Затем в следующий раз в kill-ring есть еще два последних элемента, поэтому мне нужно сделать C-y M-y M-y и т.д.

Я предполагаю, что есть лучший способ сделать это. Может кто-нибудь просветить меня, пожалуйста?

Ответ 1

Вы должны использовать delete-region вместо kill-region.

delete-region удаляет область, не помещая ее в кольцо уничтожения. По умолчанию привязка к <menu-bar> <edit> <clear>.

Если вы хотите использовать привязки по умолчанию без использования меню, вы можете использовать delete-rectangle с C-x r d, но он работает на прямоугольнике. Было бы хорошо использовать его на одной строке, например delete-region.

Ответ 2

Несколько альтернатив:

  • Включите delete-selection-mode и используйте C-d или delete для удаления области, не касаясь кольца-убийцы.
  • Используйте C-x r s i для сохранения текста для регистрации i, а затем C-x r i i для вставки сохраненного текста.
  • Если шаблон текста, который нужно заменить, можно записать в регулярном выражении, используйте query-replace-regexp (C-M-%).

Ответ 3

Один из самых старых и лучших секретов в Emacs - dunno почему: Emacs имеет вторичный выбор.

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

Выберите текст, затем замените его вторичным. Повторите в другом месте. Часто это более удобно, гибко и точно, чем что-то вроде query-replace.

Пожалуйста, взгляните, для вашего же блага - возможно, это перестанет быть такой малоизвестной особенностью... http://www.emacswiki.org/emacs/SecondarySelection

Ответ 4

Я написал эту функцию, чтобы вытащить новейший элемент с kill-ring:

(defun my-kill-ring-pop ()
  "Pop the last kill off the ring."
  (interactive)
  (when kill-ring
    (setq kill-ring (cdr kill-ring)))
  (when kill-ring-yank-pointer
    (setq kill-ring-yank-pointer kill-ring))
  (message "Last kill popped off kill-ring."))

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

Ответ 5

Относительно этого есть M-x browse-kill-ring. Если вы используете M-x anything, вы также можете использовать M-x anything-show-kill-ring.