Emacs有哪些核弹级的功能与应用可以当作我们布道的弹药库?

多年以后,面对台下五彩斑斓的Jetbrain和Vscode用户,这位曾经的资深的vim追随者将会回想起在本论坛里见识Emacs核弹级应用的这个遥远的下午(北京时间)。

一、第一枚核弹

几个月前读到下面的帖子,内心的激荡似乎至今余波未平。

冲破当时思维藩篱的有三点:

第一点: counsel-rg 搜索结果的mini-buffer,不能全屏展示。

在 mini-buffer 中 按键 C-0 1,什么都不会发生,这个痛点困扰许久。不曾想,ivy-occur轻松解决。

按键 C-c C-o 之后,mini-buffer立刻悬停住,当时停在下面的界面中,端玩了好久。这是一种怎样的体验呢?你想象一下“大闹天宫”中的蟠桃园,孙悟空朝着前来采摘蟠桃的七仙女,口揭咒语,念一声“定!”,接着这只没教养的野猴子飞身上去,将这七位神仙姐姐挨个挨个,仔仔细细瞧得个清楚,看得个明白。

然后,便可以 C-0 1 全屏。

第二点:竟然能对搜索结果二次编辑,在mini-buffer窗口中按键 w h或者 C-x C-q 调用 ivy-wgrep-change-to-wgrep-mode,能够直接对结果作修改。

以我有限的认知,感觉似乎一道闪电劈下,无机的机械体与有机的生命体之间的界限彻底打破,上一回类似的感受还是在dired中用这个模式的那一刻。

第三点,在编辑模式下,执行 replace-regex替换。

搜索出来的结果立即完成替换。这一点,平淡无奇,常见常用,我可能就此复制粘帖出来,用在别处。

神奇的是,当 C-c C-c 保存之后,所有源文件中的关键词同时被修改好。

这一点震撼,就如我从上海黄浦江口,舀了一瓢水喝,哪曾想,竟然影响到万里之外宁夏的三江源地区干涸了。

以上三点,就是个人对multi-editing这项核弹级应用,彼时彼刻的直觉感受。

这一项能在对Emacs传道布教的时候用到,一拿出手,核弹之下,灰飞烟灭,焦土不存。

二、第二枚核弹

前两天读到另外的帖子,@Dr_Ming

@Dr_Ming 的很简单,对我的核弹轰炸余波,现在还嗡嗡作响。

三、求更多核弹轰炸

基于以上两枚核弹,请教诸位,您觉得,您正在用的 emacs 功能,哪些是核弹级别的呢?

只要你自己觉得就行,哪怕 1+1 =2,简要说明下理由,咱也感激不尽。

这些收集起来的核弹,日后就是我们布道的弹药库。

另外,感谢捧场,Master-Emacs这个小小的repo眼看着要破200stars了。

https://github.com/AbstProcDo/Master-Emacs-From-Scratch-with-Solid-Procedures

8赞

第一枚核弹今年2021年才体验到,让我余生难忘,效率提升数十倍,不夸张。

1赞

不就是 sed -i 的效果嘛…好奇十倍哪里来的

sed -i 只能对查找全部替换,比如搜出10处,你只想替换之中7个呢?如果想对其中的一处修改为另外的替换呢?

sed -i 从terminal打印出来的结果,能一键点进去直接打开正文吗?

在第一个应用中,所有的“危险修改”都是可见可控,可触可摸。

sed -i 是闭着眼替换。万一出错,排查是海量的工程。

1赞

好处是可以看准,对搜索结果进行修改。 可以比喻为跟踪导弹。 sed 和散单枪差不多,误伤不少。

2赞

第一个确实核弹,第一次在abo-abo的blog上见到,当时就是很懵,还可以这么玩啊

abo-abo创造了很多跳出盒子的技巧(也许非100%原创,但从小众思想变为了实践技能):hydra, ivy-occur等;hydra整个改变了我思考方便性的大方向。

ivy/helm 绝对算的上Emacs升级超级效率工具的大功臣之一,这种全局(全“系统”级)高定制化搜索绝对让效率有了质的变化。

关于第一枚,我看大家都没提到abo-abo的博文,附上可能是最早的文章:

4赞

滴滴,宁要的核弹发射井

https://github.com/manateelazycat/emacs-application-framework

2赞

真有压箱底的好货呀 :yum:

这是本论坛内,惹不起的项目,躲得起不置评。

哈哈哈哈, rssfeed 里面看到标题,就猜出是他了。

还截屏留念了 :)

Amazing, so popular is He! 发这个帖子是来学习的,盼不要灌水。He本人没脸没皮,从不在乎皮囊面子,只在乎是否能学到硬核的里子。

2赞

跑题了。只要楼主是在分享实在的内容。应该欢迎才对。我们不喜欢的是空洞的头重脚轻的帖子,浪费时间的水贴。

3赞

经过思考,最好是深入思考的发言我觉得都是值得鼓励的,剩下的问题就是如果通过技术手段判断这个发言有没有经过思考!

1赞

恩,但是如果没用的话少一些就更好了。

打扰了…

Tab 自动对齐,我觉得是最大核弹把。

LZ 提到的 search & replace,我感觉 vscode 和 ide 做的是不是更好一点?毕竟几乎所有的 IDE 都会做这个功能,并且天生就是图形化的。

楼上有老师提到 sed -i,我也觉得挺好的。一个文件的修改,我通常是 ivy 来完成;多个文件,一般就是 git grep + sed -i。

linux: git grep -l 'original_text' | xargs sed -i 's/original_text/new_text/g'
mac: git grep -l 'original_text' | xargs sed -i '' -e 's/original_text/new_text/g'

http://cosven.me/blogs/10008 我前几年也在 vscode/vim/emacs 几个编辑器中折腾,然后这是一个简单的总结,欢迎评论交流 ~

1赞

只要是知识分享互相帮助的讨论都欢迎。

没有必要因为这些小事抱有成见

11赞

Emacs 的理念是自由开放,这是它的核心竞争力。论单个功能,其他编辑器基本也都有(甚至更好用),比如上面说的 ivy-occur + wgrep 实现的多文件文本替换,在 jetbrains 全家桶也能轻易实现(也能一个个地确认是不是替换),而且还能区分语法的 scope,参考:

而且由于 Emacs 对各种编程语言的支持基本都是靠正则表达式(LSP 是一个希望),很难达到专业 IDE 语义级别的功能,具体可以参考 rust-analyzer 作者的这个文章:

我在 Emacs 入门指南:Why & How 一文中犯过类似的“错误”,后来逐渐意识到了这种思想是与 Emacs 开放、自由的思想相悖的。

感觉 Emacser 很容易陷入自我陶醉的状态,以上共勉之。

3赞

Emacs入门的文章写得真详细,先收藏。

速读了一遍jetbrain的replace,竟然也有对搜索结果二次展示的mini-buffer,之前不了解。

第一个功能 multiple-editing,大家认为其功能炸开之处,可能不在于是否能完成任务,而是对搜索结果,作二次处理。

在counsel-rg这一步就可以直接anzu-query-replace-regexp执行可视化的替换。

ivy-occur 是将第一次搜索的结果作为输入,进入到二次编辑的管道。

大致相当于

grep | 停止在这里让你对结果看得仔细
sed  regexp 又停止在这里让你仔细核对结果
|    .....