多年以后,面对台下五彩斑斓的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
分析对比windows原装的emacs与wsl2上运行的GUI版本 - #6,来自 DR_MING
@Dr_Ming 的很简单,对我的核弹轰炸余波,现在还嗡嗡作响。
三、求更多核弹轰炸
基于以上两枚核弹,请教诸位,您觉得,您正在用的 emacs 功能,哪些是核弹级别的呢?
只要你自己觉得就行,哪怕 1+1 =2,简要说明下理由,咱也感激不尽。
这些收集起来的核弹,日后就是我们布道的弹药库。
另外,感谢捧场,Master-Emacs这个小小的repo眼看着要破200stars了。
15 个赞
第一枚核弹今年2021年才体验到,让我余生难忘,效率提升数十倍,不夸张。
1 个赞
用 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的博文,附上可能是最早的文章:
6 个赞
哈哈哈哈, rssfeed 里面看到标题,就猜出是他了。
Action
12
Amazing, so popular is He! 发这个帖子是来学习的,盼不要灌水。He本人没脸没皮,从不在乎皮囊面子,只在乎是否能学到硬核的里子。
2 个赞
mezi
13
跑题了。只要楼主是在分享实在的内容。应该欢迎才对。我们不喜欢的是空洞的头重脚轻的帖子,浪费时间的水贴。
3 个赞
经过思考,最好是深入思考的发言我觉得都是值得鼓励的,剩下的问题就是如果通过技术手段判断这个发言有没有经过思考!
1 个赞
cosven
17
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'
vim, emacs or vscode? - 笑一笑,十年少 我前几年也在 vscode/vim/emacs 几个编辑器中折腾,然后这是一个简单的总结,欢迎评论交流 ~
1 个赞
Emacs 的理念是自由开放,这是它的核心竞争力。论单个功能,其他编辑器基本也都有(甚至更好用),比如上面说的 ivy-occur + wgrep 实现的多文件文本替换,在 jetbrains 全家桶也能轻易实现(也能一个个地确认是不是替换),而且还能区分语法的 scope,参考:
而且由于 Emacs 对各种编程语言的支持基本都是靠正则表达式(LSP 是一个希望),很难达到专业 IDE 语义级别的功能,具体可以参考 rust-analyzer 作者的这个文章:
我在 Emacs 入门指南:Why & How 一文中犯过类似的“错误”,后来逐渐意识到了这种思想是与 Emacs 开放、自由的思想相悖的。
感觉 Emacser 很容易陷入自我陶醉的状态,以上共勉之。
3 个赞
Action
20
Emacs入门的文章写得真详细,先收藏。
速读了一遍jetbrain的replace,竟然也有对搜索结果二次展示的mini-buffer,之前不了解。
第一个功能 multiple-editing,大家认为其功能炸开之处,可能不在于是否能完成任务,而是对搜索结果,作二次处理。
在counsel-rg这一步就可以直接anzu-query-replace-regexp执行可视化的替换。
ivy-occur 是将第一次搜索的结果作为输入,进入到二次编辑的管道。
大致相当于
grep | 停止在这里让你对结果看得仔细
sed regexp 又停止在这里让你仔细核对结果
| .....