Я думаю программа, которую Вы ищете, xvidtune
.
Вставка копии использования: M-d C-_ M-x replace-string RET C-y
(kill-word
, undo
, replace-string
, yank
). Если Вы уже запустили замену, можно переключиться назад на исходный буфер, чтобы сделать вставку копии с обычным окном или буферные команды переключения: M-x replace-string RET … C-x o M-d C-_ C-x o C-y
. Можно использовать аргумент префикса на M-d
(например. ESC 4 2 M-d
) заменять несколько слов.
Если Вы планируете заменить одно или несколько слов в курсоре, можно вместо этого запустить с возрастающего поиска (C-s
), используйте C-w
чтобы начать искать слово под курсором, затем нажмите M-%
переключаться на replace-string
.
Возрастающий поиск имеет эту функцию, но функции замены не делают. К счастью, возрастающий поиск действительно имеет способ переключиться для замены режима, после того как Вы выбрали критерий поиска. Так:
Как Вы, вероятно, знаете от использования % M-обычно, это - режим замены запроса, где оно предлагает Вам то, что сделать с каждым соответствием. Если Вы просто хотите заменить их всех, совершить нападки! на первом соответствии
;; query-replace current word
(defun qrc (replace-str)
(interactive "sDo query-replace current word with: ")
(forward-word)
(let ((end (point)))
(backward-word)
(kill-ring-save (point) end)
(query-replace (current-kill 0) replace-str) ))
Я новичок в emacs, но могу предложить следующее:
M-b to move backward over a word
M-d to kill up to the end of the word
Теперь вы можете написать новое слово. Работает почти как cw
в vim
При поиске и замене с M-S-%
простое нажатие M-n
заполняет слово под курсором, повторное нажатие заворачивает его в "разделитель символов".
Я боролся и хотел того же с момента перехода с Vim на Emacs.
После некоторых исследований и экспериментов я придумал функцию ниже, которая позволяет вам делать то же самое с установленным пакетом Evil или с помощью spacemacs.
Он также работает с активной областью (или визуальным выделением в термине vim), и это может быть весьма полезно для замены такого слова, как abc-def-hij:
; replace current word or selection using vim style for evil mode
(defun evil-replace-word-selection()
(interactive)
(if (use-region-p)
(let (
(selection (buffer-substring-no-properties (region-beginning) (region-end))))
(if (= (length selection) 0)
(message "empty string")
(evil-ex (concat "'<,'>s/" selection "/"))
))
(evil-ex (concat "%s/" (thing-at-point 'word) "/"))))
, затем в вашем init.el определите такую же привязку клавиш:
(global-set-key (kbd "\C-co") 'evil-replace-word-selection)
привязка клавиш немного отличается от привязки клавиш vim, которая является «пробелом z», но я не понял, как сопоставить это в emacs, когда присутствует режим зла. продолжайте жаловаться, а не на префикс и т. д., и я относительно новичок в emacs. Но все еще неплохо, и я доволен этим решением на данный момент.
На этот вопрос уже был дан ответ, и я не могу комментировать, потому что у меня пока недостаточно репутации. Но то, что вы ищете, это ciw
в vim.
В emacs ближе всего к этой комбинации я подошел:
M-b M-d
Это возвращает к началу слова, на котором находится курсор, а затем удаляет слово.
Этот фрагмент расширяет ответ Эмануэля Берга до:
superword-mode
). (defun query-replace-at-point (old new)
"Invoke `query-replace', valuing OLD to symbol at point, replacing it with the input NEW."
(interactive
(let* ((old-symbol (symbol-name (symbol-at-point)))
(new-symbol (read-string (format "Rename %s to: " old-symbol) old-symbol)))
(list old-symbol new-symbol)))
(query-replace old new))
Этот подход похож на тот, который описан Майклом Мрозеком , но начинается с isearch-forward-symbol-at-point
, что добавляет слово в точке в строку поиска .
При таком подходе курсор может находиться в любой части слова. Он протестирован на правильную работу со словами , содержащими тире .