如何在Emacs中替换光标下的当前单词

Thi*_* Pl 26 emacs search replace

如何在 Emacs 中替换光标下的当前单词?

我知道我可以使用 query-replace 或 replace-string 但每次我都必须输入要替换的整个字符串,这很烦人。

Vi 具有等效的命令 cword,我可以使用快捷方式将光标下的单词拉出以进行替换:

nmap <leader>z :%s#\<<C-r>=expand("<cword>")<CR>\>#
Run Code Online (Sandbox Code Playgroud)

有人知道如何用Emacs做到这一点吗?

Mic*_*zek 28

增量搜索具有此功能,但替换功能没有。幸运的是,增量搜索 确实可以在您选择搜索词后切换到替换模式。所以:

  • C-s切换到增量搜索模式
  • C-w将当前单词拖入搜索缓冲区。您可以按住它来附加多个单词,也可以使用它C-M-y来猛拉单个字符和C-y猛拉整行
  • 按下M-%以使用您已经构建的搜索缓冲区切换到替换模式

正如您在M-%正常使用中可能知道的那样,这是一种查询替换模式,它会提示您对每个匹配项执行什么操作。如果您只想替换它们,请点击!第一场比赛。


Ema*_*erg 10

;; 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) ))
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 1

使用复制粘贴:( , M-d C-_ M-x replace-string RET C-y, kill-word, ) 。如果您已经开始替换,您可以切换回原始缓冲区,使用常用的窗口或缓冲区切换命令进行复制粘贴:。您可以在(例如)上使用前缀参数来替换多个单词。undoreplace-stringyankM-x replace-string RET \xe2\x80\xa6 C-x o M-d C-_ C-x o C-yM-dESC 4 2 M-d

\n\n

如果您打算替换光标处的一个或多个单词,您可以从增量搜索 ( C-s) 开始,使用C-w开始搜索光标处的单词,然后按M-%切换到replace-string

\n