几乎总是,我想像这样运行 find-grep:
ack --no-heading --no-color "SOMETHING" ~/myco/firmwaresrc
其中 SOMETHING 是唯一的变量。实际上,要实现这一点,需要大量的按键和思考。
我将如何“装罐”这个,以便 Mx fgf 使用该命令运行 find-grep 并用当前区域代替 SOMETHING?
实际上我已经想出了如何做到这一点(见下面的答案)。如果没有选定的区域,谁能告诉我如何让 emacs 要求一些东西?
(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")))
您可能还想查看ack、full-ack或ack-and-a-half。最后一个应该是前两个的婚姻。它们允许您指定默认参数等(尽管学习 elisp 并没有错 :-)。
这有效:
(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))))
所以现在我想知道如果没有选择区域,是否有可能让它问我“某事”。我会换个问题。