我正在尝试在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 )
答案 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
命令或定义自己的替代品。您只需要获取它提供的默认值,这已经是单词。
使用M-n
后,您应该可以使用M-x grep
来检索单词。 (但要小心放回开关。显然,当你点击M-n
时,香草Emacs将删除它们。)
M-n
在提示符下将命令的默认值插入到迷你缓冲区中。如果有多个默认值,则在它们之间重复M-n
个循环。这通常是正确的,而不仅仅是命令grep
。
如果使用库Grep+,则默认值会自动插入到迷你缓冲区中(不更改命令开关)。并且您可以更好地控制您想要的默认值和其他默认行为。