如何在 Emacs 中替换光标下的当前单词?
我知道我可以使用查询替换或替换字符串,但每次这样做时我都必须输入要替换的整个字符串,这很烦人。
Vi 有等效的命令单词,我可以使用快捷方式拉动光标下的单词进行替换:
nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#
有人知道如何用 Emacs 做到这一点吗?
答案1
增量搜索有这个功能,但替换功能没有。幸运的是,增量搜索 做选择搜索词后可以切换到替换模式。所以:
- 按此键C-s切换到增量搜索模式
- 按下C-w可将当前单词拉入搜索缓冲区。您可以按住它来附加多个单词,还可以使用它C-M-y来拉动单个字符和C-y拉动整行
- 按下M-%可切换到使用您已构建的搜索缓冲区的替换模式
正如您在M-%正常使用中可能知道的那样,这是一种查询替换模式,它会提示您如何处理每个匹配项。如果您只想将它们全部替换,请选择!第一个匹配项。
答案2
;; 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) ))
答案3
如果您进入搜索和替换,M-S-%
只需按M-n
填充光标下的单词,再次按它会将其包装在“符号分隔符”中。
答案4
我对 emacs 完全陌生,但我可以建议以下内容:
M-b to move backward over a word
M-d to kill up to the end of the word
现在你可以写一个新单词了。cw
与 vim 中的工作方式几乎一样