完美“文件搜索”的梦想有多远

您是否经常对文本文件进行搜索? 我-每天超过25年。


我的任务在复杂性和范围上截然不同。


首先,作为程序员,我当然需要搜索代码。 这些任务很简单 (文件夹和文件的集合很小)且速度很快 (结果几乎立即出现)。


其次,作为操作员,我必须在成千上万个文件中搜索成百上千个文件夹。 从结果的数量和收到时间的角度来看,这些都是艰巨的任务。 通常,此类搜索的结果仍然需要进一步的手动或软件处理。


所有工作都在Windows上完成。


我会告诉您,在哪里导致我拥有适合此类任务的合适工具。


最初是TextPad


十多年来,TextPad一直是我的主要便捷工具。
然后(在2000年前后),他表现出色。


文件搜索如下所示( TextPad ,2004)


TextPad_fif


印象数

(+)对话框中的设置很少,因此不会掩盖文件的内容。
(+)具有搜索结果的选项卡具有特殊行为-Enter / DvKlik允许您打开找到的片段。 否则,这是编辑器“在内存中”的纯文本。
(+)有一个设置,“ File counts only用于搜索自身而不是片段,而是仅搜索File counts only片段数。 这大大加快了初步搜索的速度。
(-)对话框中的设置很少,命令也很少。 该对话框是固定大小。
(-)例如,正则表达式的艺术语言,而不是现在接受的\w ,必须编写[:word:]
通常,它是高质量的,但适中。




卷轴和比较


TextPad的局限性及其冻结导致了其他编辑者的不断尝试。
现在您已经记不清所有尝试过的方法,但其中包括:


  • MS Visual Studio的 。 沉重的怪物。
  • 日蚀 也是一个怪物。
  • IntelliJ IDEA 。 迷人。 曾作为您如何方便地进行操作的示例的提供者。


    印象数

    旧的IDEA已经丢失。 为了进行比较, PyCharm的当前实施,2017.1.3
    Pycharm_fif
    (+)数量众多的设置和模式。
    (+)对话的自给自足:结果,源代码和搜索统计信息可见。
    (-)文件夹中的搜索深度没有限制-一次或全部搜索一次。
    (-)否(我不知道这种方式)在多个文件夹中搜索。
    (-)不(我不知道这样)以文本格式输出结果。


    通常,它功能强大,但不通用。




  • 记事本++ 。 我不记得是什么原因阻止了他切换。
  • SublimeText3 ,2013年。一种黑客工具-出色的工作,最少的资金,但要记住很多事情


    印象数

    Sublime_fif
    (+)最小控制。
    (-)不同的设置“在哪里查看”全部集中在一个字段中。 有必要考虑它们的相互作用。
    (-)仅附加对话。
    (+)结果立即显示在文本选项卡中,并且它们是可见的。
    (-)固定格式的结果:完整的路径和文件名,然后是其中的行。 从找到的片段的本地化来看,只有行号。
    (+)设置“上下文”,以便与邻居找到的行进入结果。






有一个这样的人


基于“没有完美的工具?创造”的原则,改变了努力的方向。
他开始关注开发人员的响应能力。 在2012年,我很幸运使用SynWrite


唯一的开发人员Alexei Torgashin接受了大多数想法,并迅速有效地提出了建议。 典型的实施时间是一两天。 在论坛上,我问他完成的时间,然后又问了一个,然后问了十个,等等……在第三打中的某个地方,我意识到我们的会议很愉快


从我提交的内容来看,Alexey将文件搜索带到了这样的状态( SynWrite ,2016)


图片


印象数

(+)从当前文件Current folder提取文件Current folder
(+)您可以按修改日期对文件进行排序。
(+)提供了一组现成的列表,用于preset搜索和快速访问它们( F3 )。
(-)对话非常繁重,并且占用了大量空间。
(-)结果在底部面板中显示为控制 。 要以文本形式获取它们,您需要从本地菜单调用该命令。




“你需要什么,年纪大些?”


使用SynWrite,搜索变得更加方便。 如您所知,食欲伴随着进食,所以我的愿望清单成倍增加。 那就是我的金鱼开发商对他们的态度越来越严厉- “黑海被熏黑了


那就是我想要得到的


  1. 确保立即以文本形式需要结果(以进行进一步处理)。
  2. 结果应该是自给自足的! 这样就可以保存,关闭和打开它们-并且它们保持新鲜 ,即可以工作了。
  3. 我们需要搜索磁盘上的文件和打开的(已修改的)文件。
  4. 解决简单问题的对话应该紧凑。 特别是,用于“替换”和稀有设置的控件不应干扰正常搜索。
  5. 对于结果以及相邻的行,需要一个选项。
  6. 需要“在一行中完整描述一个结果”模式(用于进一步处理)。
  7. 不需要在外部文件或云页面中提供有关如何填写字段的帮助信息,而是在此处(例如,工具提示中)就可以了。



自己动手!


我又很幸运。 Alex创建了一个新的CudaText编辑器,并将Python API固定到了它。


最后,您可以使用Python插件的形式随意完成所有操作。


第一个版本于2016年5月发布。


最小控件集

fif-dlg-min


最大控件集

fif-full-dlg
当然,这并不是第一个薄煎饼 ,而是“填满所有东西的愿望”。 对话”清晰可见。


这是我现在申请的


cuda_fif


实现了“您想要什么”列表中的所有“ 愿望清单”。


(1)结果可以在对话框内部看到,也可以立即输出到文件中(如果[x] Send )。


(2)结果是自描述的。 在文字中


fif_rpt_info


足够的信息来查找所找到片段的完整文件名和位置。
1:21:6表示:1行,21列,片段长度为6。


该插件能够提取和使用此信息。


(3)搜索未保存的文件。 为此, In folder字段中输入特殊行<Open Files> (缩写<Tabs><t> )。


(4)您可以隐藏用于指定排除文件,执行替换,在对话框中显示结果和源代码所需的控件。


隐藏的控件

•最小设定 fif_min
•最少设置和更换 fif_repl
•文件的最小设置和例外设置 fif_excl


(7)在工具提示中,自由填写的字段的签名具有说明


小费

fif_incl
fif_tip_fold
调用Alt+H可获得更多信息Alt+H
fif_help_tips


实现了更多不同的部分


  • 出发深度可以为零( Only ),满( +All )或从1( +1 level )到5( +5 levels )级。


  • 很少使用的搜索选项出现在For search



fif_extra_fi


进阶搜寻选项
 ** / ** . •      . •         / . ![fif_first](https://user-images.githubusercontent.com/7419630/42456464-b0448f20-839d-11e8-8876-435fdfead1ad.png) •   ,        (  ). 

  • 如果结果不会出现在对话框中( [x] Send ),则它们还有其他参数

fif_extra_rp


高级结果参数
 • `Report to` -    ,    ,        . • `Append` -   . • `Tree type` -      `<path><file><r:c:l><line>`,   `<><><><  >`  ,    (" "-6).      ![fif_help_tree](https://user-images.githubusercontent.com/7419630/42456892-a7d867c0-839e-11e8-87f2-2b9ce6b5c530.png) • `Align (r:c:l)` -     `<r:c:l>` ,   `<  >`    . : ![fif_align](https://user-images.githubusercontent.com/7419630/42616450-036e3ae6-85b7-11e8-861a-cf27a3a07c7a.png) • `Add context` -     (" "-5). 

  • 您可以记住搜索参数-进行预设 。 前五个预设通过Ctrl+1 (.. 5 )应用,其余的-从菜单或“ Presets对话框中应用


    对话预设

    fif_pset




  • 您可以记住对话框/控件的位置/大小-做布局。 前五个布局由Alt+1 (.. 5 )应用,其余-从菜单中应用。


  • 对话中几乎所有内容都可以不用鼠标完成。 为此,有


    热键

    fif_help_keys




  • 对于团队来说


    菜单

    汉堡按钮只是带有下划线的“ =”,因此Alt+=可用。
    fif_menu_find




  • 搜索过程分为三个连续的阶段:
    •生成了一组合适的文件,
    •片段是从文件中提取的,
    •填写结果报告。
    有关每个阶段及其变化的信息显示在状态控件中。
    Esc允许您仅中断当前阶段,并使用累积的数据进入下一个阶段


  • 除了用户定义的常规参数外,还有许多很少更改的选项。 现在有19个对话,并为他们进行单独的对话


    选项对话框

    fif_opts
    例如,在这些选项中有:
    •打开对话框时,使用选定的文本填写“ Find what字段。
    •用一个ESC中断搜索的所有阶段。
    •搜索结果并将其输出到文件时,请关闭对话框。
    •将新结果添加到同一文件时,收起以前的结果。
    •将所有搜索参数保存在结果的第一行。 这使您以后可以将它们加载到对话框中。
    •跳过大于指定大小的文件。
    •为找到的片段设置样式。 文本的可用颜色/粗体/倾斜度,背景颜色,每侧的框架样式。 在上面的图片中,设置了“片段下面有点的框架”样式。




  • 一些插件命令在对话框之前和之后都可以使用。

cuda_menu


从CudaText主菜单
 • `Find in *` -        . • `Navigate to *` -     ,    ,   . • `Jump to *` -   /    ,     ,     . • `Configure *` -        ,       ![fif_dclk](https://user-images.githubusercontent.com/7419630/42460070-aa1c5f26-83a5-11e8-9103-11f676dcf08a.png) 



CudaText和Python


关于我的插件所基于的平台的几句话。


Alexey Torgashin在Delphi制作了SynWrite 。 该编辑器的一半代码是由另一位开发人员许可的,这阻止了新想法的实施。 而德尔福得到了报酬。 因此,Alex转而使用Free Pascal和IDE Lazarus ,自己实现了缺少的部分,并在2015年创建了CudaText ,SynWrite冻结了。 从头开始的机会被明智地利用了-他对设计进行了几项重大改进。


  1. 设置开始分层叠加: defaultgenerallexcurrent file 。 它们开始存储在json ,但不存储在ini 。 更改设置已成为json格式的常规文本编辑。
  2. 内核摆脱了大量非关键服务。 特别是从文件搜索,宏,调用外部实用程序,菜单配置器,代码片段,排序,收藏夹等中。
  3. 为了创建此类服务,内核提供了Python API,其中包括GUI库。 现在,插件已实现了所有以前的服务,并添加了许多新服务。
  4. 此外,核心本身已成为多模块。 有标记,书签,方括号等的组成部分。

崇高文字的影响在这里清晰可见。 据我所知,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的用户的愿望和抱怨。 顺便说一句,在同一把拉撒路上写着《 总指挥官》


比较SublimeCudaText的Python API很有趣。 他们是完全不同的。


•Sublime具有DOM类型的对象样式。


•CudaText具有程序风格,例如API OS,例如WIN3​​2。


显然,这种差异来自实现语言。 如果编辑器本身是用Python实现的,那么API的DOM样式就很自然-您可以存储指向对象的链接。 如果编辑器位于Pascal中,则只能由处理程序存储。


•Sublime API没有GUI。 该插件显然可以使用Python GUI(Tk?WxPython?Qt?),但是样式将与Sublime形成对比。


•CudaText提供应用程序整体样式的GUI插件。 首先,有丰富的基本控件库: checklistboxlistviewchecklistviewtreeview当然还有普通按钮,检查,单行和多行编辑器,组合框等。其次,可以将CudaText组件嵌入GUI中。 在上面的图片中,它是一个状态控件,一个本地菜单和带有结果/源的编辑器控件。 完全不可能用纯Python GUI进行这种补充。


没有GUI就可以生活

由于我已经为CudaText创建了十二个插件,并且它们中的大多数都通过对话框与用户进行了交流,所以现在我很难想象没有这些财富如何创建插件。 当然,如果插件只有一个对话框可让您指定设置,则编辑json将提供足够的替代方法。 但是,这种编辑是在插件“启动前”执行的;如果需要实时运行时用户的反应,它将无济于事。




有限制吗?


我记得大约每两到三个月一次,持续了两年半,在我看来,“这是最终的决定”-对话被舔了,结果以各种方式显示,所有有用的命令。 但是由于该工具一直在使用,几乎所有功能都在使用中,而手按下下一个搜索或研究下一个结果时,机头正在寻找新的改进方法。 并发现!


有新想法

例如,在撰写本文时,以下是出生的:
•您可以在“结果”或“源”控件中选择文本,然后发出命令进行搜索。
•您可以截取结果中的“打开文件”事件,并恢复找到的片段的样式。


此外,我有兴趣了解集体意识是否可以在游戏中提出新的建议。 因此,我对其他程序员提出了一个问题:
还可以在文本编辑器内的“文件搜索”中添加什么?




CudaText插件实现的技术细节

•语言:Python 3.5
•GUI库: CudaText API
•开发人员: Andrey Kvichansky
•代码大小:> 300 Kb
•插件的待办事项数量:> 250
•CudaText API的错误/愿望编号:> 150
•插件论坛: GitHub问题


如何尝试

•为您的操作系统下载CudaText程序集 ,解压缩或安装。
•启动CudaText并调用菜单命令Plugins/Addons Manager/Install...
•输入“查找”,以便过滤器仅FindInFile进行安装(可能有必要重新调用CudaText,而在Win上则没有必要)。
•调用菜单命令Plugins/Find in Files/Find in files...

Source: https://habr.com/ru/post/zh-CN417367/


All Articles