Emacs之改造最快文本搜索工具ripgrep(一百一十九)

这篇具有很好参考价值的文章主要介绍了Emacs之改造最快文本搜索工具ripgrep(一百一十九)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长!

优质专栏:Audio工程师进阶系列原创干货持续更新中……】🚀

人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.

更多原创,欢迎关注:Android系统攻城狮

Emacs之改造最快文本搜索工具ripgrep(一百一十九),Emacs,emacs,编辑器

1.前言

本篇目的:为Emacs改造目前最快的搜索文本的工具:ripgrep。

需求:只搜索 /home路径下的.java和.cpp文件中的"native_tagSocketFd"字符串.

2.基本搜索

<1>.rg命令实现

# rg -g '*.{java,cpp}'  native_tagSocketFd   /home

<2>.rg搜索"."开头的隐藏文件

# rg -g '*.{java,cpp,c,h,aidl,hal,rc,bp,mk,cc,xml}' --color=always --no-heading --line-number --with-filename --ignore-case --no-ignore  --hidden  "native_tagSocketFd"   

Or

# rg -g '*.{java,cpp}' --hidden  "native_tagSocketFd"   

<3>.rg搜索忽略搜索cts、out、prebuilts目录

# rg -g '*.{java,cpp,c,h,aidl,hal,rc,bp,mk,cc,xml}' --color=always --no-heading --line-number --with-filename --ignore-case --no-ignore --hidden  "MediaCodecList" -g '!out' -g '!cts' -g '!prebuilts'

<3>.可以将/usr/bin/rg放在shell命令中执行,加上参数

# /usr/bin/rg  $1 --color=always --no-heading --line-number --with-filename --ignore-case --no-ignore --hidden

注意:将$1放在尾部会报错!

3.emacs改造ripgrep

<1>.elisp调用rg(即ripgrep)命令实现

(defun rg-grep ()
  (interactive)
  ;;读取字符串
  (setq arg (read-string ": "))
  ;;调用rg命令搜索
  (shell-command (concat "rg -g '*.{java,cpp}' " arg " /home"))
  )

<2>.改造ripgrep.el

v1.0 输入搜索字段
(defun ripgrep-regexp (regexp &optional args)
  (interactive
   (list (read-from-minibuffer "Ripgrep search for: " (thing-at-point 'symbol))))
  (compilation-start
   (mapconcat 'identity
              (append
	       ;;可以过滤搜索的文件格式.
	       '("rg" "-g '*.{java,cpp,c,h,aidl,hal,rc,bp,mk,cc}' --color=always" "--no-heading" "--line-number" "--with-filename" "--ignore-case" "--no-ignore")
	       ;;搜索的字段,可以是正则表达式
	       (list (shell-quote-argument regexp))
	       ;;搜索的默认路径
	       '("/home")
	       ) " ")
   'ripgrep-search-mode)
  )
v2.0 输入搜索字段 + 目录
(defun ripgrep-regexp (regexp directory &optional args)
  (interactive
   (list (read-from-minibuffer "Ripgrep search for: " (thing-at-point 'symbol))
	 (read-directory-name "Directory: ")
	 ))
  (setq default-directory directory)
  (compilation-start
   (mapconcat 'identity
              (append
	       ;;可以过滤搜索的文件格式.
	       '("rg" "-g '*.{java,cpp,c,h,aidl,hal,rc,bp,mk,cc}' --color=always" "--no-heading" "--line-number" "--with-filename" "--ignore-case" "--no-ignore")
	       ;;搜索的字段,可以是正则表达式
	       (list (shell-quote-argument regexp))
	       ;;搜索的默认路径
	       ;;'("/home")
	       '(".")
	       ) " ")
   'ripgrep-search-mode)
  )
v3.0
;;v5.0 输入搜索字段,默认cd到/home目录,解决输入  '("/home")  时,显示全路径,导致过长的问题。
(defun ripgrep-regexp (regexp &optional args)
  (interactive
   (list (read-from-minibuffer "Ripgrep search for: " (thing-at-point 'symbol))
	 ))
  ;;其实就是cd到指定的目录后,在当前目录开始搜索.
  (setq default-directory "/home")
  (compilation-start
   (mapconcat 'identity
              (append
	       ;;可以过滤搜索的文件格式.
	       '("rg" "-g '*.{java,cpp,c,h,aidl,hal,rc,bp,mk,cc}' --color=always" "--no-heading" "--line-number" "--with-filename" "--ignore-case" "--no-ignore")
	       ;;搜索的字段,可以是正则表达式
	       (list (shell-quote-argument regexp))
	       ;;搜索的默认路径
	       ;;'("/home")
	       '(".")
	       ) " ")
   'ripgrep-search-mode)
   ;;恢复当前路径
  (setq default-directory (file-name-directory (buffer-file-name)))
  )

注意:要强制 rg 搜索所有文件,可以使用 --no-ignore 选项,意思是:不要忽略当前目录下的文件,可以递归查找。文章来源地址https://www.toymoban.com/news/detail-616877.html

到了这里,关于Emacs之改造最快文本搜索工具ripgrep(一百一十九)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android之关机/重启/recovery模式(一百一十五)

    1.方式一:App调用系统api 2.方式二:setprop 注意:在init的reboot.c中,           adb reboot -p命令其实就是调用的setprop命令开关机的。  3.方式三:

    2024年02月14日
    浏览(46)
  • 第一百一十九回 如何通过蓝牙设备读写数据

    我们在上一章回中介绍了如何获取蓝牙状态相关的内容,本章回中将介绍 如何通过蓝牙设备读写数据 。闲话休提,让我们一起Talk Flutter吧。 通过蓝牙设备读写数据有两种方法: 一种是读写Characteristics; 一种是读写Descriptor. 我们在本章回中介绍的读写数据本质上是读写 Cha

    2024年02月12日
    浏览(52)
  • 第一百一十二回 flutter_screenutil包

    我们在上一章回中介绍了屏幕适配相关的内容,本章回中将介绍 flutter_screenutil 包,该包主要用来实现屏幕适配.闲话休提,让我们一起Talk Flutter吧。 我们在本章回中介绍的包是 flutter_screenutil ,它主要用来做屏幕和字体大小的适配,它的实现原理和我们在上一章回中介绍的屏幕

    2024年02月13日
    浏览(56)
  • 一百一十三、DBeaver——从hive同步数据到clickhouse

    目标:把hive的DM层结果数据导出到clickhouse数据库,试了kettle、sqoop等多种方法都报错,尤其是kettle,搞了大半天发现还是不行。结果目前就只能用DBeaver同步数据。 准备工作:hive和clickhouse中都建好表 第一步,右击clickhouse中的表,选择导入数据 第二步,在源类型和格式中,由

    2024年02月13日
    浏览(55)
  • 客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway

    文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性

    2024年02月04日
    浏览(79)
  • C/C++基础讲解(一百一十九)之经典篇(最优美的图案)

    很多时候,特别是刚步入大学的学子们,对于刚刚开展的计算机课程基本上是一团迷雾,想要弄明白其中的奥秘,真的要花费一些功夫,我和大家一样都是这么啃过来的,从不知到知知,懵懂到入门,每一步都走的很艰辛,课程上,大学老师基本上讲解上机实操得时间特别有

    2024年02月09日
    浏览(49)
  • 第一百一十五天学习记录:C++提高:STL初识(黑马教学视频)

    1、长久以来,软件界一直希望建立一种可重复利用的东西 2、C++的面向对象和泛型编程思想,目的就是重复性的提升 3、大多数情况下,数据结构和算法都未能有一套标准,导致被迫从事大量重复工作 4、为了建立数据结构和算法的一套标准,诞生了STL 1、STL,标准模板库 2、

    2024年02月16日
    浏览(46)
  • 第一百一十三天学习记录:C++提高:类模板(黑马教学视频)

    类模板作用: 建立一个通用类,类中的成员 数据类型可以不具体定制,用一个虚拟的类型来代表。 语法: 解释: template … 声明创建模板 typename … 表面其后面的符号是一种数据类型,可以用class代替 T … 通用的数据类型,名称可以替换,通常为大写字母 总结:类模板和函

    2024年02月16日
    浏览(38)
  • 客快物流大数据项目(一百一十三):注册中心 Spring Cloud Eureka

    文章目录 注册中心 Spring Cloud Eureka 一、Eureka 简介 二、架构图

    2023年04月25日
    浏览(66)
  • 第一百一十四天学习记录:C++提高:类模板案例(黑马教学视频)

    main.cpp代码: myarray.hpp代码: 输出: 总结:能够利用所学知识点实现通用的数组。 个人感悟:学习了这个案例之后接下来的课程就是STL了,STL其实在我工作中写代码时经常碰到,尤其是在读同事代码的时候,因为没有学过,通过自行百度获得碎片的知识导致读起来很很吃力

    2024年02月16日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包