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

时间:2016-01-09 21:15:03

标签: emacs elisp

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

(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 )

2 个答案:

答案 0 :(得分:2)

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)))

答案 1 :(得分:1)

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

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

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

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