helm-ag
@stardiviner 跨平台只是 bonus,主要是用的挺嗨皮。写回答的时候, 突然想有人可能用 Windows?就去主页查了一下。
@wsug 快而且好用,不然不会推荐的。rust 写的 exa,bat 我也常用。
有个参数可以搜索文件名 rg --files
,怎么集成到 helm 应该不是难事。
我也正想推荐 fd
,很快很好用。
fd
也有和 find-dired
, grep-dired
类似的 fd-dired
. 测试了下,挺好用的。由
于 fd
的速度比 find
快。亲测确实快不少。尤其是文件很多的时候。
都可以基于fd, 用了一下,都不错
如果用 ag,其实还有 ag-dired
对于递归搜索(文件名或者文件内容)的关键是要像 color-rg.el / grep-dired.el 那样做异步进程, 不管后端搜索工具快还是慢, 先把第一屏的内容展示出来, 这样用户体验就会极佳.
真正做到这一点, 90%的用户都不会说慢.
试了一下 fd-dired 是要快很多, 但是可惜还是同步的, 有1秒顿一下的不爽.
老王的grep-dired也是调用find,可以把你那个调用的方法提取出来换上fd啊
刚才使用 grep-dired
发现一个问题,显示中文的结果不能正确显示。不知道是不是由于
我系统设置的缘故。
看了下 grep-dired
的源代码,不能很方便的修改工具。要是能提供
grep-dired-command
选项就好了。仔细看了下,使用了 grep.el
里的变量
find-program
.
这是实际运行的代码:
(concat find-program " . "
(if (string= args "")
""
(concat
(shell-quote-argument "(")
" " args " "
(shell-quote-argument ")")
" "))
(if (string-match "\\`\\(.*\\) {} \\(\\\\;\\|+\\)\\'"
(car grep-dired-find-ls-option))
(format "%s %s %s"
(match-string 1 (car grep-dired-find-ls-option))
(shell-quote-argument "{}")
grep-dired-find-exec-terminator)
(car grep-dired-find-ls-option)))
和 fd
命令的语法不是很好的融合。
然后我看了下 fd-dired
的源代码,竟然和 grep-dired
的几乎一样。
fd-dired
也是异步的,测试,支持中文正确显示。接着我看了下 find-dired
的源代
码,就明白了。惊异了一下。
就是find-dired改了一下啊…
projectile慢我记得是因为它搜到以后还要sort一次.
我以为是从头开始写的。。。。惯性思维。。。
projectile
是确实慢很多。我profile下。
- command-execute 4,201,100,161 99%
- apply 4,201,100,161 99%
- ad-Advice-command-execute 4,201,100,161 99%
- #<compiled 0x1fe9b8f916af> 4,201,100,161 99%
- call-interactively 4,201,100,161 99%
- funcall-interactively 4,201,100,161 99%
- projectile-find-file 4,172,020,246 99%
- projectile--find-file 4,172,020,246 99%
- projectile-project-files 4,059,587,649 96%
- projectile-dir-files-alien 4,059,587,649 96%
- projectile-files-via-ext-command 4,059,554,651 96%
- shell-command-to-string 3,980,701,443 94%
- shell-command 3,905,556,140 92%
- apply 3,905,556,140 92%
- shell-command--shell-command-with-editor-mode 3,905,556,140 92%
- #<compiled 0x1fe9b8fae1e1> 3,905,556,140 92%
call-process-shell-command 3,905,555,084 92%
- push-mark 1,056 0%
apply 1,056 0%
- buffer-string 59,637,136 1%
- apply 59,637,136 1%
ad-Advice-buffer-string 59,637,136 1%
- #<compiled 0x1fe9b8fbef21> 14,748 0%
- kill-buffer 10,272 0%
- run-hooks 8,188 0%
- company-box--handle-window-changes 8,188 0%
company-box--get-frame 8,188 0%
tramp-flush-file-function 2,084 0%
- get-buffer-create 2,112 0%
- run-hooks 2,112 0%
- company-box--handle-window-changes 2,112 0%
company-box--get-frame 2,112 0%
- split-string 78,853,208 1%
#<compiled 0x1fe9b8f62c19> 78,842,236 1%
string-match 8,924 0%
- projectile-project-vcs 32,998 0%
- projectile-locate-dominating-file 23,902 0%
abbreviate-file-name 5,666 0%
projectile-file-exists-p 1,704 0%
projectile-file-exists-p 9,096 0%
- projectile-completing-read 112,406,193 2%
- ivy-read 112,397,011 2%
- read-from-minibuffer 91,724,935 2%
- ivy--queue-exhibit 86,763,528 2%
- ivy--exhibit 86,763,528 2%
- ivy--filter 82,418,637 1%
- cl-remove-if-not 50,593,141 1%
- apply 50,593,141 1%
- cl-remove 50,593,141 1%
#<compiled 0x15813d6dfec5> 13,378 0%
apply 4,589 0%
+ ivy--re-filter 31,732,596 0%
+ ivy--regex-plus 70,280 0%
ivy--recompute-index 2,112 0%
+ cl-search 1,056 0%
+ ivy--insert-minibuffer 2,674,379 0%
+ ivy--format 1,666,312 0%
+ ivy--input 4,200 0%
+ timer-event-handler 3,377,346 0%
+ redisplay_internal (C function) 375,772 0%
+ eaf-monitor-key-event 74,272 0%
+ #<compiled 0x15813a105501> 22,958 0%
+ command-execute 20,344 0%
+ which-key--hide-popup 14,784 0%
+ minibuffer-inactive-mode 14,256 0%
+ minibuf-eldef-setup-minibuffer 6,516 0%
+ run-hooks 2,112 0%
+ ivy--reset-state 110,094 0%
+ #<compiled 0x15813a143bcd> 1,056 0%
+ projectile-prepend-project-name 9,182 0%
+ projectile-project-root 17,124 0%
+ projectile-maybe-invalidate-cache 9,280 0%
+ counsel-M-x 20,577,334 0%
+ ivy-switch-buffer 8,502,581 0%
挖个坟
在Windows原生环境使用fd-dired,grep-dired和fzf不成功,前两者需要的xargs运行没有用,但是都调用了这个命令
我在网络上搜索到了两个链接
http://www.pirosa.co.uk/demo/wxargs/wxargs.html
尝试了,前者可以在命令行正常使用,后者根本没有反应
故来求教,各位大神指点一下windows在非cygwin这些环境下怎么使用模糊搜索来实现题主的要求,虽然我不抱太大希望,但是万一有惊喜呢
GitHub - redguardtoo/find-file-in-project: Quick access to project files in Emacs 的 ffip-lisp-find-file-in-project
只用了Lisp和Emacs的API,在Windows下无需第三方命令行,而且没有编码问题。原生支持中文文件名。缺点就是比较慢。
默认是自动从项目根目录搜索。不过可以拓展为当前目录搜索。
(defun my-find-file-in-current-directory (&optional directory-p)
(interactive "P")
(let* ((ffip-project-root default-directory))
(ffip-lisp-find-file-in-project directory-p)))
Grep 不知道。
windows下搜索用everything很快,可以和counsel-locate配合。
windows下我安装了个gow,linux的基本命令都有了