您是否经常对文本文件进行搜索? 我-每天超过25年。
我的任务在复杂性和范围上截然不同。
首先,作为程序员,我当然需要搜索代码。 这些任务很简单 (文件夹和文件的集合很小)且速度很快 (结果几乎立即出现)。
其次,作为操作员,我必须在成千上万个文件中搜索成百上千个文件夹。 从结果的数量和收到时间的角度来看,这些都是艰巨的任务。 通常,此类搜索的结果仍然需要进一步的手动或软件处理。
所有工作都在Windows上完成。
我会告诉您,在哪里导致我拥有适合此类任务的合适工具。
最初是TextPad
十多年来,TextPad一直是我的主要便捷工具。
然后(在2000年前后),他表现出色。
文件搜索如下所示( TextPad ,2004)

印象数(+)对话框中的设置很少,因此不会掩盖文件的内容。
(+)具有搜索结果的选项卡具有特殊行为-Enter / DvKlik允许您打开找到的片段。 否则,这是编辑器“在内存中”的纯文本。
(+)有一个设置,“ File counts only
用于搜索自身而不是片段,而是仅搜索File counts only
片段数。 这大大加快了初步搜索的速度。
(-)对话框中的设置很少,命令也很少。 该对话框是固定大小。
(-)例如,正则表达式的艺术语言,而不是现在接受的\w
,必须编写[:word:]
。
通常,它是高质量的,但适中。
卷轴和比较
TextPad的局限性及其冻结导致了其他编辑者的不断尝试。
现在您已经记不清所有尝试过的方法,但其中包括:
有一个这样的人
基于“没有完美的工具?创造”的原则,改变了努力的方向。
他开始关注开发人员的响应能力。 在2012年,我很幸运使用SynWrite 。
唯一的开发人员Alexei Torgashin接受了大多数想法,并迅速有效地提出了建议。 典型的实施时间是一两天。 在论坛上,我问他完成的时间,然后又问了一个,然后问了十个,等等……在第三打中的某个地方,我意识到我们的会议很愉快 。
从我提交的内容来看,Alexey将文件搜索带到了这样的状态( SynWrite ,2016)

印象数(+)从当前文件Current folder
提取文件Current folder
。
(+)您可以按修改日期对文件进行排序。
(+)提供了一组现成的列表,用于preset
搜索和快速访问它们( F3
)。
(-)对话非常繁重,并且占用了大量空间。
(-)结果在底部面板中显示为控制树 。 要以文本形式获取它们,您需要从本地菜单调用该命令。
“你需要什么,年纪大些?”
使用SynWrite,搜索变得更加方便。 如您所知,食欲伴随着进食,所以我的愿望清单成倍增加。 那就是我的金鱼开发商对他们的态度越来越严厉- “黑海被熏黑了 。 ”
那就是我想要得到的
- 确保立即以文本形式需要结果(以进行进一步处理)。
- 结果应该是自给自足的! 这样就可以保存,关闭和打开它们-并且它们保持新鲜 ,即可以工作了。
- 我们需要搜索磁盘上的文件和打开的(已修改的)文件。
- 解决简单问题的对话应该紧凑。 特别是,用于“替换”和稀有设置的控件不应干扰正常搜索。
- 对于结果以及相邻的行,需要一个选项。
- 需要“在一行中完整描述一个结果”模式(用于进一步处理)。
- 不需要在外部文件或云页面中提供有关如何填写字段的帮助信息,而是在此处(例如,工具提示中)就可以了。
自己动手!
我又很幸运。 Alex创建了一个新的CudaText编辑器,并将Python API固定到了它。
最后,您可以使用Python插件的形式随意完成所有操作。
第一个版本于2016年5月发布。
最大控件集
当然,这并不是第一个薄煎饼 ,而是“填满所有东西的愿望”。 派 对话”清晰可见。
这是我现在申请的

实现了“您想要什么”列表中的所有“ 愿望清单”。
(1)结果可以在对话框内部看到,也可以立即输出到文件中(如果[x] Send
)。
(2)结果是自描述的。 在文字中

足够的信息来查找所找到片段的完整文件名和位置。
1:21:6
表示:1行,21列,片段长度为6。
该插件能够提取和使用此信息。
(3)搜索未保存的文件。 为此, In folder
字段中输入特殊行<Open Files>
(缩写<Tabs>
和<t>
)。
(4)您可以隐藏用于指定排除文件,执行替换,在对话框中显示结果和源代码所需的控件。
(7)在工具提示中,自由填写的字段的签名具有说明
实现了更多不同的部分 。

进阶搜寻选项 • ** / ** . • . • / .  • , ( ).
- 如果结果不会出现在对话框中(
[x] Send
),则它们还有其他参数

高级结果参数 • `Report to` - , , . • `Append` - . • `Tree type` - `<path><file><r:c:l><line>`, `<><><>< >` , (" "-6).  • `Align (r:c:l)` - `<r:c:l>` , `< >` . :  • `Add context` - (" "-5).
对于团队来说
菜单汉堡按钮只是带有下划线的“ =”,因此Alt+=
可用。


从CudaText主菜单 • `Find in *` - . • `Navigate to *` - , , . • `Jump to *` - / , , . • `Configure *` - , 
CudaText和Python
关于我的插件所基于的平台的几句话。
Alexey Torgashin在Delphi制作了SynWrite 。 该编辑器的一半代码是由另一位开发人员许可的,这阻止了新想法的实施。 而德尔福得到了报酬。 因此,Alex转而使用Free Pascal和IDE Lazarus ,自己实现了缺少的部分,并在2015年创建了CudaText ,SynWrite冻结了。 从头开始的机会被明智地利用了-他对设计进行了几项重大改进。
- 设置开始分层叠加: default , general , lex , current file 。 它们开始存储在
json
,但不存储在ini
。 更改设置已成为json
格式的常规文本编辑。 - 内核摆脱了大量非关键服务。 特别是从文件搜索,宏,调用外部实用程序,菜单配置器,代码片段,排序,收藏夹等中。
- 为了创建此类服务,内核提供了Python API,其中包括GUI库。 现在,插件已实现了所有以前的服务,并添加了许多新服务。
- 此外,核心本身已成为多模块。 有标记,书签,方括号等的组成部分。
崇高文字的影响在这里清晰可见。 据我所知,Alexey并没有隐瞒他考虑了Sublime及其插件的想法。 他还瞥了一眼Atom和Brackets。
结果本身很好,但是考虑到Alexey的高生产率和响应能力,它非常好。 为了解释我们在谈论哪种生产力和响应能力,我将给出一些事实:
- Alexei创建了:lexers-201,linter-34,片段集-12,插件-93。
- 自2015年10月以来, GitHub上有超过1,200个愿望 (无投诉),其中超过90%的 愿望 得到了满足。
CudaText是免费的开放源代码,其中包含Win / Linux / Mac / BSD的程序集。 我本人仅使用Win版本,但是我看到使用Linux和Mac的用户的愿望和抱怨。 顺便说一句,在同一把拉撒路上写着《 总指挥官》 。
比较Sublime和CudaText的Python API很有趣。 他们是完全不同的。
•Sublime具有DOM类型的对象样式。
•CudaText具有程序风格,例如API OS,例如WIN32。
显然,这种差异来自实现语言。 如果编辑器本身是用Python实现的,那么API的DOM样式就很自然-您可以存储指向对象的链接。 如果编辑器位于Pascal中,则只能由处理程序存储。
•Sublime API没有GUI。 该插件显然可以使用Python GUI(Tk?WxPython?Qt?),但是样式将与Sublime形成对比。
•CudaText提供应用程序整体样式的GUI插件。 首先,有丰富的基本控件库: checklistbox
, listview
, checklistview
, treeview
当然还有普通按钮,检查,单行和多行编辑器,组合框等。其次,可以将CudaText组件嵌入GUI中。 在上面的图片中,它是一个状态控件,一个本地菜单和带有结果/源的编辑器控件。 完全不可能用纯Python GUI进行这种补充。
没有GUI就可以生活由于我已经为CudaText创建了十二个插件,并且它们中的大多数都通过对话框与用户进行了交流,所以现在我很难想象没有这些财富如何创建插件。 当然,如果插件只有一个对话框可让您指定设置,则编辑json
将提供足够的替代方法。 但是,这种编辑是在插件“启动前”执行的;如果需要实时运行时用户的反应,它将无济于事。
有限制吗?
我记得大约每两到三个月一次,持续了两年半,在我看来,“这是最终的决定”-对话被舔了,结果以各种方式显示,所有有用的命令。 但是由于该工具一直在使用,几乎所有功能都在使用中,而手按下下一个搜索或研究下一个结果时,机头正在寻找新的改进方法。 并发现!
有新想法例如,在撰写本文时,以下是出生的:
•您可以在“结果”或“源”控件中选择文本,然后发出命令进行搜索。
•您可以截取结果中的“打开文件”事件,并恢复找到的片段的样式。
此外,我有兴趣了解集体意识是否可以在游戏中提出新的建议。 因此,我对其他程序员提出了一个问题:
还可以在文本编辑器内的“文件搜索”中添加什么?
如何尝试•为您的操作系统下载CudaText程序集 ,解压缩或安装。
•启动CudaText并调用菜单命令Plugins/Addons Manager/Install...
•输入“查找”,以便过滤器仅FindInFile
进行安装(可能有必要重新调用CudaText,而在Win上则没有必要)。
•调用菜单命令Plugins/Find in Files/Find in files...