打开一个9m的文本文件,使用swiper搜索 会很卡,有办法解决么

非 Swiper 用户,不清楚具体细节,但 9 MB 已经算是大文件了,假设是代码的话,大概能有十万行之多,并且 Emacs 自身默认就有个 10 MB 的限制

large-file-warning-threshold
     => 10000000

再加上 Swiper 看起来是实时地搜索,或许「卡」才是理所当然的。你可以

  1. 避免手动编辑如此大的文本文件,红楼梦大概八十万字,也就 3 MB 而已。
  2. 改用 Emacs 默认的 isearch,虽然它也是交互的,但感觉它应该会较为流畅。
  3. 实在不行就 M-x grep,它肯定非常快。
1 个赞

swiper 都要被玩坏了吧。

9M 文件首次打开就需要不少时间了,然后每次键改变一个字符,swiper 就要把 9M 内容搜索一遍,结果放到临时 buffer (搜索关键字清空之后两个 buffer 是一样的,加起来就是 18M)。不仅临时 buffer 的内容实时变动,移动光标还要改变原文件 buffer 窗口内容。

不知道你这样操作的目的是什么,如果是移动光标,直接 [i]search-for/backward。如果是内容替换直接 replace-regexp/string

如果想得到一个结果列表,或者还想编辑,可以用类似 helm-ag-buffers 的函数(不知道 swipper/ivy/consel 下对应的是哪个函数…abo-abo 这一套扩展到底叫什么?有没有个统一的说法😅) 。M-x grep 搜索结果好像不能编辑?并且搜索的是当前整个目录。

更低碳的做法是去终端用命令。

可以用 counsel-grep-or-swiper ,文件大的时候自动使用 grep 但是功能和swiper一样

1 个赞

是这个理,我就是习惯了使用swiper来浏览器文件 我这个是个日志文件,我是从里面检索查看匹配的每一条记录,这种移动光标改变原buffer的方式很方便查看,而使用counsel-ag是很快但是由于一行很长导致在临时buffer里面看不全所以才。。。。

我试试看效果怎么样

isearch是相比要流畅,但就是看起来不如swiper的更方便

https://lists.freebsd.org/pipermail/freebsd-current/2010-August/019310.html

可以考虑用 Boyer-Moore 算法重写 swiper

9m的日志肉眼查看?你很拽哟

就不能想想看还有没更好的办法?

我并不是要做什么,只是从里面找找看有没有我想要的记录 在使用swiper的时候很卡 有点强迫症犯了:joy:

Space f l

是啊这么大文件正常人肯定是sed/awk/uniq/sort,虽然这样可能要去查查用法,swiper爽的确是爽…