如何在 emacs 中 grep 光标下的当前单词?

How to grep current word under cursor in emacs?

我正在尝试在 emacs 中 grep 光标下的当前单词。我在下面编写了代码,它引发了错误:参数数量错误...当我从 xx() 中删除 (grep) 并将其绑定到 f4 键(最后一行注释)时,在 f3 和 f4 grep 搜索光标下的单词之后。有谁知道为什么不能从 xx() 调用 (grep)? 谢谢,亚历克斯。

(require 'grep)
(defun xx ()
  "setting up grep-command using current word under cursor as a search string"
 (interactive)
 (setq curWord (thing-at-point 'word))
 (setq VALUE   (concat "grep -nH -r --exclude='TAGS' --include='*.h' --include='*.cpp' --include='*.pl' --include='*.c' -e " curWord " /home/alex/code/") )
 (grep-apply-setting 'grep-command VALUE)
 (grep))

 (global-set-key (kbd "<f3>")  'xx)
;(global-set-key (kbd "<f4>") 'grep )

grep 函数接受一个参数,因此更改您的函数以传递它:

(defun xx ()
  "setting up grep-command using current word under cursor as a search string"
  (interactive)
  (let* ((cur-word (thing-at-point 'word))
         (cmd (concat "grep -nH -r --exclude='TAGS' --include='*.h' --include='*.cpp' --include='*.pl' --include='*.c' -e " cur-word " /home/alex/code")))
    (grep-apply-setting 'grep-command cmd)
    (grep cmd)))

您不需要更改 grep 命令或定义您自己的替换。你只需要获取它提供的默认值,这已经是那个词了。

  1. 在你使用M-x grep之后,你应该可以使用M-n来检索点的单词。 (但要小心放回开关。显然当你点击 M-n 时,香草 Emacs 会移除它们。)

    M-n 在提示时将命令的默认值插入到迷你缓冲区中。如果有多个默认值,则在它们之间重复 M-n 循环。这在一般情况下是正确的,不仅仅是命令 grep.

  2. 如果您使用库 Grep+,则默认值会自动插入到迷你缓冲区中(无需更改命令开关)。而且您可以更好地控制您想要的默认值和其他默认行为。