Emacs

如何在 Emacs 中替換游標下的目前單詞

  • February 27, 2021

如何在 Emacs 中替換游標下的目前單詞?

我知道我可以使用 query-replace 或 replace-string 但每次我這樣做時我都必須輸入要替換的整個字元串,這很煩人。

Vi 具有等效的命令 cword,我可以使用快捷方式將游標下的單詞拉出以進行替換:

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

有人知道如何用 Emacs 做嗎?

增量搜尋具有此功能,但替換功能沒有。幸運的是,一旦您選擇了搜尋詞,增量搜尋 *確實可以切換到替換模式。*所以:

  • 按下C-s切換到增量搜尋模式
  • 按下C-w可將目前單詞拉入搜尋緩衝區。您可以按住它來追加多個單詞,也可以C-M-y用來拉出單個字元和C-y拉出整行
  • 按下M-%以使用您已經建構的搜尋緩衝區切換到替換模式

您可能從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) ))

引用自:https://unix.stackexchange.com/questions/51854