幫你精通Emacs:兩枚核彈級的應(yīng)用及求問英雄帖
多年以后,面對臺下五彩斑斕的Jetbrain和Vscode用戶,這位曾經(jīng)的資深的vim追隨者將會回想起在本論壇里見識Emacs核彈級應(yīng)用的這個(gè)遙遠(yuǎn)的下午(北京時(shí)間)。
一、第一枚核彈
幾個(gè)月前讀到下面的帖子,內(nèi)心的激蕩似乎至今余波未平。
- counsel-rg 出結(jié)果之后,按 C-c C-o 進(jìn)入 ivy-occur,然后按 w 進(jìn)入編輯模式,然后 M-x % 批量替換,然后 C-x C-s 保存。
- 這是大招。被稱為核武器級別的技巧(
- https://sam217pa.github.io/2016/09/11/nuclear-power-editing-via-ivy-and-ag/)。值得深入鉆研??梢砸? https://blog.binchen.org/posts/emacs-is-easy-if-you-read-code.html 研究相關(guān)的occur的技術(shù)。
沖破當(dāng)時(shí)思維藩籬的有三點(diǎn):
第一點(diǎn): counsel-rg 搜索結(jié)果的mini-buffer,不能全屏展示。

在 mini-buffer 中 按鍵 C-0 1,什么都不會發(fā)生,這個(gè)痛點(diǎn)困擾許久。不曾想,ivy-occur輕松解決。按鍵 C-c C-o 之后,mini-buffer立刻懸停住,當(dāng)時(shí)停在下面的界面中,端玩了好久。
這是一種怎樣的體驗(yàn)?zāi)?你想象一下“大鬧天宮”中的蟠桃園,孫悟空朝著前來采摘蟠桃的七仙女,口揭咒語,念一聲“定!”,接著這只沒教養(yǎng)的野猴子飛身上去,將這七位神仙姐姐挨個(gè)挨個(gè),仔仔細(xì)細(xì)瞧得個(gè)清楚,看得個(gè)明白。
然后,便可以 C-0 1 全屏。

image961×721 189 KB
第二點(diǎn):竟然能對搜索結(jié)果二次編輯,在mini-buffer窗口中按鍵 w h或者 C-x C-q 調(diào)用
ivy-wgrep-change-to-wgrep-mode,能夠直接對結(jié)果作修改。

以我有限的認(rèn)知,感覺似乎一道閃電劈下,無機(jī)的機(jī)械體與有機(jī)的生命體之間的界限徹底打破,上一回類似的感受還是在dired中用這個(gè)模式的那一刻。
- 項(xiàng)目 步步為營,零秒精通Emacs 的第三章“03.God’
- s-Eyes-and-Hands-by-Dired-and-Bookmarks” 宕延半年多,遲遲寫出來。因?yàn)槭冀K沒有思路,怎樣寫好司空見慣簡單,而往往不見其革命性突破的Dired。 我希望別人從這篇文章的視角審視dired的時(shí)候,會第一時(shí)間發(fā)出“哇!”的一聲。就如每時(shí)每刻的呼吸,在幼兒園的某一天,我們突然知道“哇,原來空氣存在”。 Take everything for granted 的朋友請務(wù)必忍耐不要留言。 亙古以來,有機(jī)世界與無機(jī)世界之間有一道無法跨越的鴻溝。上帝吹入生命而成有機(jī),而礦物則是沒有“活力”的無機(jī)物。因此,無機(jī)物與有機(jī)物毫不相干,無機(jī)物只能制造無機(jī)物,似乎正如石頭原料只能制造出更加精美的石頭,卻萬萬不能生產(chǎn)出“天價(jià)豬肉”。 然而,公元1828年,上帝改變了主意,人類跨越天塹。 1.跨越鴻溝
第三點(diǎn),在編輯模式下,執(zhí)行 replace-regex替換。

搜索出來的結(jié)果立即完成替換。這一點(diǎn),平淡無奇,常見常用,我可能就此復(fù)制粘帖出來,用在別處。
神奇的是,當(dāng) C-c C-c 保存之后,所有源文件中的關(guān)鍵詞同時(shí)被修改好。
這一點(diǎn)震撼,就如我從上海黃浦江口,舀了一瓢水喝,哪曾想,竟然影響到萬里之外寧夏的三江源地區(qū)干涸了。
以上三點(diǎn),就是個(gè)人對multi-editing這項(xiàng)核彈級應(yīng)用,彼時(shí)彼刻的直覺感受。
這一項(xiàng)能在對Emacs傳道布教的時(shí)候用到,一拿出手,核彈之下,灰飛煙滅,焦土不存。
二、第二枚核彈
前兩天讀到另外的帖子,簡單的設(shè)置時(shí)候就能從wsl2-gui-emacs打開原生的windows程序。
- # 先設(shè)置 ~/.zshrc
- # fix interop
- fix_wsl2_interop() {
- for i in $(pstree -np -s $ | grep -o -E '[0-9]+'); do
- if [[ -e "/run/WSL/${i}_interop" ]]; then
- export WSL_INTEROP=/run/WSL/${i}_interop
- fi
- done
- }
- ~/.emacs.d/bin/doom env > /dev/null 2>&1
- # 然后定義自動打開的函數(shù)
- # autoload
- (defmacro wsl--open-with (id &optional app dir)
- (defun (intern (format "wsl/%s" id)) ()
- (interactive)
- (wsl-open-with ,app ,dir)))
- (defun wsl-open-with (&optional app-name path)
- "Send PATH to APP-NAME on WSL."
- (interactive)
- (let* ((path (expand-file-name
- (replace-regexp-in-string
- "'" "\\'"
- (or path (if (derived-mode-p 'dired-mode)
- (dired-get-file-for-visit)
- (buffer-file-name)))
- nil t)))
- (command (format "%s `wslpath -w %s`" (shell-quote-argument app-name) path)))
- (shell-command-to-string command)))
- (wsl--open-with open-in-default-program "explorer.exe" buffer-file-name)
- (wsl--open-with reveal-in-explorer "explorer.exe" default-directory)
這項(xiàng)配置對我的核彈轟炸余波,現(xiàn)在還嗡嗡作響。
三、求更多核彈轟炸
基于以上兩枚核彈,請教諸位,您覺得,您正在用的 emacs 功能,哪些是核彈級別的呢?
只要你自己覺得就行,哪怕 1+1 =2,簡要說明下理由,咱也感激不盡。
這些收集起來的核彈,日后就是我們布道Emacs的彈藥庫。
另外,感謝捧場,Master-Emacs這個(gè)小小的repo眼看著要破200stars了。
- https://github.com/AbstProcDo/Master-Emacs-From-Scratch-with-Solid-Procedures
【編輯推薦】