Answers:
使用复制粘贴: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
。
;; 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) ))
从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还是比较陌生。但是还算不错,我现在对此解决方案感到满意。