centos在文本中搜索字符串_高效编程要诀3:在多个文件中搜索文本

见 陈斌:我一年的Emacs使用数据 my-multi-purpose-grep 被调用2280次。以一年220个工作日计算,我一天要调用10次此功能。

我知道很多VSCode/Vim甚至Emacs用户使用此命令的次数远小于10次。之前我做过调查,有vscode用户告诉我他一年内都很少使用此命令。

关键在于我认识到此功能是提高效率的关键。所以我把编辑器或插件提供的在多个文件中搜索文本的命令当作API做了二次开发。

例如在React JS开发中,如果有个组件名叫MyComp.component.js,那么很可能它的用法是<MyComp /> ,所以我自己拓展的my-multi-purpose-grep虽然默认和一般的搜索命令没什么区别,但当喂给它额外的参数如1时,它会以<MyComp 作为关键字来搜索。

可以举一反三, 根据自己的需要定制关键字。

搜索结果可以和wgrep 的插件组合。这个技巧被很多高手称为文本编辑的核武器。注意这些高手都身经百战,在用Emacs前用过很多其他IDE和编辑器了。我在很多地方反复强调过这个技巧的威力,技术细节见 Nuclear weapon multi-editing via Ivy and Ag

简单地讲就是把搜索的结果(文件路径,行号,该行内容)放到一个文本buffer(buffer对非Emacs用户可以认为是一个子窗口)里,用户修改这个buffer的内容就可一次修改存在于不同文件的所有匹配行。这就是查找后紧接着替换了。

grep的命令行程序不一定是ag,可以是grep,ripgrep。

强烈建议有进取心的高级用户去读wgrep和ivy的代码。让后自己做个查找替换的实现,至少也应该修改已有代码做些实验。

在我的教程里封面介绍就是用查找替换作为例子,在教程里我也用了“非常”,“经典”等词汇来强调其重要性。而且在不同的章节里我强调了多次。因为它太重要,可拓展性太强,但是又被大多数程序员忽视。如果这还不叫秘笈,我不知道什么叫秘笈了。

我建议,初级用户尽量多用此技巧,高级用户集中精力优化它

这是我进一步改进ivy和wgrep的结合的例子。Emacs is easy if you read code 。此文还说明了如何整合perforce的命令行程序p4 。这个例子也说明了Emacs加上命令行知识可以给用户充分自由。用过IntelliJ IDEA或其他编辑器的人都知道,有些版本控制软件如perforce在用户编辑文件前会强迫用户执行额外的步骤,我的文章演示了如何自动执行这些额外操作。

在 Use wgrep and evil to replace text efficiently一文中我又演示了如何结合ivy/grep/evil进一步改进效率。

注意我的文章需要读原始的ivy/wgrep代码才能看懂。

我为多文件替换研发的技巧也适用于单文件搜索,因为由于Emacs的简洁的设计,所有的buffer就是一可编辑文本的子窗口而已。接口简单,所以技巧都是通用的。

这篇文章也能回答使用我教程 如何提高编程速度 - Emacs高手教授轻松精通所有编辑器和IDE的秘诀 的读者一些问题。

Emacs没有panel,sidebar这些UI设计是Richard Stallman的设计。我完全明白Emacs的UI是古老的。但是塞翁失马,一些意外的好处使我对这个问题不是很感冒。

由于教程篇幅所限,我一般就是给出结论和怎么做。事情的来龙去脉我就从简了。我的教程肯定是一家之言,但我读过4000~5000篇Emacs文章,基本囊括所有技巧了。教程总要作出取舍。

教程看起来容易,但水平对Emacs专家来讲也不低。在教程里我对所有编辑器的命令都做了点评。例如我强调了搜索文本的重要性。对于multi-cursor我认为没有搜索的潜力大。这是指出了继续优化效率的方向。遗憾的是往往高级用户反而会忽略我的点评。

高级用户已经熟悉特定领域,有了成见,所以很难接受偏离“正确方向”的建议。实际上有价值的地方就在于这些建议。至少应该照着做一遍。

现在几乎所有流行的编辑器或IDE都逃不过Emacs/Vim/VSCode这套编辑模式,所以我都能很快上手。

但是当Andrey Orst给我推荐一个颠覆已有模式的编辑器Kakoune - Official site 时,我完全不能理解。https://www.reddit.com/r/emacs/comments/ck78f2/features_from_other_editors_one_should_consider/evo3xjy/?context=3

这是Andrey Orst批评我的话:“The thing is, that once you have become fluent with your current tools you start to think around those tools. And (most of the time) no one can really explain something to you unless you try it yourself.”。

从技术上来讲我还是不明白Kakoune到底是什么,我也有充足的信心去证明。Vim/Emacs那套文本文件操作术是最优的。但是Andrey Orst的话打动了我,对Vim/Emacs的信心显然已阻碍我理解一个全新的编辑器。

对我的教程的读者的建议也是这样的:不要急着质疑,先照着做一遍。做完你自然就明白其中的妙处了。我以前在“一年成为Emacs高手”一文中的核心观点是,先照抄高手的配置坚持一段时间,不要急着改高手的配置。道理是相通的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值