IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 【Emacs】利用find命令及ivy-read实现搜索项目文件 -> 正文阅读

[开发工具]【Emacs】利用find命令及ivy-read实现搜索项目文件

要点

  • find [搜索路径] [要跳过搜索的东西] -prune -o [其它筛选条件] [要执行的操作]
    find ./ -path "*/.git" -prune -o -type f,d -name "*.*" -print
  • -path后面要接文件路径/路径的模式串
  • path ... -prune是联合使用的, 作用是跳过这些文件
  • -type f,d 表示结果保留普通文件f和目录d
  • -name 模式串 是对指定文件名进行搜索
  • -print 是对find找到的满足条件的文件 实施的动作: 打印文件路径
  • 命令中的双引号在elisp中要进行转义才能用
  • default-directory是该进程的pwd
  • ( locate-dominating-file 起始目录 目标文件 ) : 从起始目录向上级目录的方向查找包含目标文件路径
  • ( shell-command-to-string shell命令) 将shell命令的运行结果以字符串的形式返回
  • ( split-string 待分割串 分隔符 ) 返回切分后形成的字符串**list**
  • ( ivy-read 提示符 候选list ) 获取用户输入或在候选中的一项
  • (find-file 文件路径) 打开文件
  • (file-exists-p 路径) 判断文件路径是否合法

(require 'ivy)

;;;;;;;;;;;;;;;;;;;;;;;;;;原始版本;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my-find-files()
  (interactive) ;; 站在巨人的肩膀上写程序!
  (let* ((cmd "find ./  -path \"*/.git\" -prune -o -type f,d  -name \"*.*\"  -print ") ;; -type d/f
         (default-directory  (locate-dominating-file "." ".git" ) )
         (output (shell-command-to-string cmd))
         (lines (split-string output "[\n\r]+" )) ;; \n or \r
         )
    (message "cmd: %s" cmd)
;;  (message "output:\n%s" output)
;;  (message "lines:\n%s" lines)   ;; return a list
    (setq selected-line (ivy-read (format "choose the file[%s]: " default-directory ) lines))
    (message ">> %s" selected-line) ;; echo the filename
    (when (and selected-line (file-exists-p selected-line )) ;;Make sure the file exists
      (find-file selected-line) ;; open selected file.
      )
    )
  )
  
;;;;;;;;;;;;;;;;;;;;;;;;;;;;以下均是重构后的版本V2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun my-find-files-helper(start-dir)
  (interactive)  
  (let* ((cmd "find ./ -type f,d -path \"*/.git\" -prune -o -print  -name \"*.*\"  ") ;; -type d/f
         (default-directory  start-dir )
         (output (shell-command-to-string cmd))
         (lines (split-string output "[\n\r]+" )) ;; \n or \r
         )
    (message "cmd: %s" cmd)
;;  (message "output:\n%s" output)
;;    (message "lines:\n%s" lines)   ;; return a list
    (setq selected-line (ivy-read (format "choose the file[%s]: " default-directory ) lines))
    (message ">> %s" selected-line) ;; echo the filename
    (when (and selected-line (file-exists-p selected-line )) ;;Make sure the file exists
      (find-file selected-line) ;; open selected file.
      )
    )
  )
;;;;;;;;;;;;;; 

(defun my-find-files-in-project()
  (interactive)
  (my-find-files-helper (locate-dominating-file "." ".git" ))
  )
  
;;;;;;;;;;;;;;;;; 
(defun my-find-files-in-level(&optional level)
  (interactive "P") ;; 此处务必区分P和p!! 必须用P才能表示出“空nil”语义;而用p则将未输入对应nil转换为1
  (unless level
    (setq level 0))
  (setq i 0)
  (setq start-dir default-directory )
  (while (< i level)
    (setq start-dir (file-name-directory    (directory-file-name start-dir) ))
    (setq i (+ i 1) )
    )
  (my-find-files-helper start-dir)
  )
  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:12:07  更:2022-03-21 21:12:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 7:39:58-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码