我可以在emacs中编写一个预制的find-grep脚本吗?

时间:2012-02-10 09:40:11

标签: emacs elisp find-grep

几乎总是,我想像这样运行find-grep:

ack --no-heading --no-color" SOMETHING" 〜/ MYCO / firmwaresrc

其中SOMETHING是唯一的变量。实际上有很多令人惊讶的按键和思维要求才能实现这一点。

我如何去做'罐头'这样,M-x fgf会用该命令运行find-grep而当前区域代替SOMETHING?

实际上我已经研究过如何做到这一点(见下面的答案)。任何人都可以告诉我如果没有选定的地区,如何让emacs要求SOMETHING?

3 个答案:

答案 0 :(得分:7)

(defun fgf (term)
  (interactive
   (list (if (use-region-p)
             (buffer-substring (region-beginning) (region-end))
           (read-string "grep-find: "))))
  (grep-find (concat "ack --no-heading --no-color \""
                     term  "\" ~/myco/firmwaresrc")))

答案 1 :(得分:1)

您可能还想查看ackfull-ackack-and-a-half。最后一个应该是前两个的结合。它们允许您指定默认参数等(尽管学习elisp没有任何问题: - )。

答案 2 :(得分:0)

这有效:

(defun fgf ()
  (interactive)
  (if (region-active-p)
      (let (start end term command)
        (setq start (region-beginning)
              end   (region-end)
              term (buffer-substring start end)
              command (concat "ack --no-heading --no-color \"" term  "\" ~/myco/firmwaresrc"))
    (grep-find command))))

所以现在我想知道如果没有选择区域,是否有可能让它问我“SOMETHING”。我会改变这个问题。