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

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

如何在 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 中的工作方式几乎一样

相关内容