一个emacs扩展,从指定目录或文件中搜索指定关键字

这篇博客介绍了一个Emacs扩展,用于在指定目录或文件中搜索关键字。作者最初尝试使用elisp的尾递归实现,遇到问题后改用while循环成功。扩展包括`fs-search-directory`和`fs-search-file`两个函数,能在搜索结果中显示文件名、行号和内容,并支持点击结果跳转到对应文件和行。读者可以通过在`.emacs`中加载提供的`file-search.el`代码来使用这个扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这段时间在熟悉一套系统的代码,经常要查找某个变量或函数名在哪些文件中被引用到了 ,虽然在linux下面grep一下就行了,但要查看每处的上下文,还是得打开文件.还好用的是emacs,有什么不爽就自己扩展
    刚用elisp时倒郁闷了一把,elisp貌视不支持尾递归(??还需查证) ,我一上来就用在scheme中惯用的过程自调用的方式来进行递归查找目录中的文件,结果很轻易就会超过elisp的最大求值嵌套深度,改为用elisp中的while则正常.
   实现了search-direct和search-file二个函数,分别是查找指定目录和指定文件,查找结果会加上文件名和行号,内容在结果窗口显示,在结果行上回车则会自动打开相应文件并跳到相应行.不足还有很多,忙过这段时间再扩展了 :-)   保存下面的代码自己本地目录,再在.emacs中添加(require 'file-search) 就可以了
效果图:



file-search.el


;;; file-search.el

(defconst fs-file-search-buffer-name "*file-search*")

(defvar fs-file-list-length 0)
(defvar fs-file-search-str "")
(defvar fs-match-regexp "")
(defvar fs-file-search-keymap (make-sparse-keymap))
(define-key fs-file-search-keymap (kbd "RET") 'fs-result-choose)

(defface fs-file-name-face '((t (:foreground "red" :bold t :underline t)))
  "Face used to highlight the file name")
(defface fs-line-face '((t (:foreground "green" :bold nil :underline nil)))
  "Face used to highlight the line number")

;;查找列表中所有文件
(defun fs-search-list-file (list)
  (while list
    (let ((file-name (car list)))
      (if (not (fil

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值