那麼,grep
是一個單獨的程序(你也可以使用)。在Emacs中,您可以使用功能search-forward-regexp
,您可以使用M-x
(保存Meta
,通常爲Alt
密鑰,然後按x
)運行,然後鍵入search-forward-regexp
並按Return
運行。
然後您需要鍵入正則表達式來搜索。簡單地說,好像你要忽略|<
東西>
,這在Emacs的各種正則表達式是:
|<[a-z]+>
,所以你可以搜索例如
a|<[a-z]+> comedy|<[a-z]+> show|<[a-z]+>
您可以創建一個Lisp函數將字符串這種方式進行轉換,通過拆分它的空間並添加正則表達式序列:
(defun find-string-in-funny-file (s) ; Define a function
"Find a string in the file with the |<foo> things in it." ; Document its purpose
(interactive "sString to find: ") ; Accept input if invoked interactively with M-x
(push-mark) ; Save the current location, so `pop-global-mark' can return here
; (usually C-u C-SPC)
(goto-char 0) ; Start at the top of the file
(let ((re (apply #'concat ; join into one string…
(cl-loop
for word in (split-string s " ") ; for each word in `s'
collect (regexp-quote word) ; collect that word, plus
collect "|<[a-z]+> ")))) ; also the regex bits to skip
(search-forward-regexp ; search for the next occurrence
(substring re 0 (- (length re) 2))))) ; after removing the final space from `re'
您可以探索了每個那些功能,在做(在線)Emacs Lisp手冊;例如,從菜單中選擇「幫助→描述→功能」或按C-h f
(控制+ h
,然後f
)並鍵入interactive
(RET)以獲取該特殊表格的手冊文檔。
如果粘貼上述(defun)
到*scratch*
緩衝,並在年底的最後)
後,將光標定位,您可以按C-j
對其進行評估,該函數將保持與你,直到你關閉的Emacs。
如果您將它保存在名爲東西.el
,您可以使用M-x
load-file
在未來再次裝入文件。
如果您然後加載您的「有趣」文件,並輸入M-x
find-string-in-funny-file
,它會在您的文件中搜索您的字符串,並將光標留在該字符串上。如果找不到,您會看到一條消息。
BUGS:功能不如壯觀
''喜劇節目''是**不是**正則表達式將匹配'a |喜劇| 顯示| '實用程序grep包含'E'的可選參數,它代表擴展的正則表達式。您的問題有點不清楚,但似乎在問如何使用grep來搜索正則表達式,以及如何使用Emacs爲外部實用程序grep提供的前端執行相同的搜索。您可能希望進一步澄清問題,甚至包含grep標記,因爲您可能會問如何使用該實用程序執行特定的搜索。 –
lawlist
2015-02-11 22:51:40
user2283547:你想在Emacs中進行交互式搜索嗎?或者你想查看所有匹配結果的列表? – phils 2015-02-11 22:54:49