Могу ли я сохранить один и тот же элемент для 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
.