關於我

kuanyui.jpeg

  • kuanyui (Github: @kuanyui)
  • Use Emacs since Feb, 2012 (5.5 years)
  • 大學唸園藝
  • 工作是前端
    • Web frontend (Angular + Vue)
    • QML / Qt C++ (?!)
  • 業餘古典作曲家
    • 超愛 Alkan 跟 Brahms

    「哇你手指怎么这么长!好秀气喔!你弹钢琴吧?」
    「不,我用 Emacs 的」

從完全不會寫程式到
每天用 Emacs 過生活

為什麼會想學編輯器?

  • 當初並不是為了要寫程式
  • 根本不會寫程式
  • 上課做筆記不想帶滑鼠(gedit 太陽春)
  • 評估了 Vim / Emacs
  • 就開始學 Emacs 了
    • 或許是種很浪費青春的決定

Emacs icon

  • 現在的 GNU Emacs icon 長這樣:

    favicon.png

  • 但曾經長成這個樣子過:

    KitchenSinkBW.png

    • 據說是因為廚房洗碗槽是 Emacs 極少數尚未實作出的功能。

Vim?

  • 常常會有人拿 Vim 跟 Emacs 比較
  • 不要拿 Vim 的使用邏輯放在 Emacs 上,兩者設計理念差太多了。
  • 如果你使用 Vim,你可能不會每天開 Vim 寫程式
  • 如果你使用 Emacs,你每天都會把 Emacs 開著放在桌面上。
Emacs 到底是什麼?

Emacs 到底是什麼

  • Editor MACroS 的縮寫
    • 沒經歷過 ed 年代…
    • 有興趣的請自行考古
  • 我領悟出來的感覺是: 「Emacs 是一個剛好具有文字編輯功能的 Lisp 環境」

"Emacs Is A Lisp Machine"

Emacs 做了太多的事情,与采用搭积木哲学的 UNIX 格格不入。但事实上,「违背了 UNIX 的哲学」恰好是 Emacs 的价值所在,因为它的血统本身就在 UNIX 之外,它传承自 MIT 实验室的 Lisp Machine。

「用过 LISP 机器的人自然不习惯 UNIX 这种看上去『低级』的操作系统。」

结果是,用过 LISP Machine 的用户除了抱怨 UNIX 外,只能寻求在 UNIX 上构建一个新的层,来弥补 UNIX 的不足。这事情的一个结果就是造就了 Emacs 这个怪兽,到最后几乎所有能在 UNIX 里做的事情,都能在 Emacs 里完成。

从图灵机到 Emacs 乃至 FPGA - Emacs & Emacsist

還真的內建了不少怪東西

  • sunrise-sunset:計算當地日出日落時間以及日照長度
  • spook:「調戲」網路言論審查員
    • (後來自己搞了 fsc.el - Fuck the Speeching Censorship)
  • tetris:就是你想的那個
  • doctor:心情不好時可以跟你講講話的弱智AI
  • 對編輯器而言很奇怪
  • 但對一個「操作平台」而言就很可以理解了
  • 就有點像這幾年「瀏覽器」所扮演的角色

Q: 還有人在用 Emacs 這種古董喔?

Q: 你會推薦別人用嗎?

  • A: 不會。
    • 其實我還蠻常靠北 Emacs 的
    • VS Code 好像很厲害…
    • 如果已經有很順手的工具就別換
    • 沒有的話才來考慮 Emacs

使用 Emacs 的第一年

熟悉基本操作

  • 我大概花了一年多才有辦法不假思索地按 Emacs 的按鍵
  • 到處找別人的設定檔複製貼上
  • 為了一個功能 Google 五六個小時看有沒有人寫過。

這期間我不斷複製貼上設定檔

  • 就這樣過了一年
  • 不斷複製貼上也不是辦法
  • 要學 Lisp 嗎?
    • 心理障礙很大
    • 害怕數學
    • 被 Paul Graham 的 「Hackers & Painters」 洗腦過
    • Paul Graham - ANSI Common Lisp
    • 超 - 痛 - 苦 - 的 -
  • 感謝 #emacs.tw 上的 letoh 和 Ethan- 大大教我寫 Lisp <(_ _)>
  • Emacs Lisp 成為了我學會的第一個程式語言。

自訂的漫漫長路

陸陸續續寫了十幾個 Emacs Packages

  • moe-theme.el
  • moedict.el
  • fsc.el
  • ta.el
  • tldr.el
  • hexo.el
  • kaomoji.el
  • writing-utils.el
  • fm-bookmarks.el
  • ox-ioslide.el (As contributor)

Emacs 日常向應用

跟寫程式無關的 Emacs 相關應用

Org-mode (內建)

  • 類似 Markdown 的標記語言,以及衍生出的記事本、行事曆、出版系統…etc
  • 等下 @coldnew (摳妞)有議程專門講這個,有興趣的可以去聽

Dired (內建)

  • 有一天同事跑來找我
  • 要把一大堆編號格式不統一、副檔名不同的檔案重新命名成 001.jpg , 002.png
  • 我當然可以用 Bash 的 for x in *; do... 搭配 awk (之類早就忘記該怎麼用的東西)來作
  • 功能完整的檔案管理員 "DirEd"
  • Directory Editor
  • 批次重新命名
    • 3.jpg 5.png… 檔名換成 003.jpg 005.png
    • a.jpgb.jpg 檔名互換
    • 直接用 regexp replace 做出複雜的檔名修改
  • 巧妙利用 Emacs 編輯環境設計的工具

wgrep: Writable Grep

  • 概念類似 Dired
  • 直接編輯 Grep/Ag/Ack 的搜尋結果並寫入回檔案。

ag.png

Serial Term (內建)

  • 工作需要
  • ZOC on OSX
  • 突然想起 Emacs 好像有
  • M-x serial-term
  • scriptable

magit.el

在 Emacs 裡用 git

聽音樂 (EMMS)

moedict.el

萌典的 Emacs 版客戶端。

ta.el

新酷音輸入法無法搞定的同音字,丟給 Emacs 處理

ta.gif

Hexo

  • Jekyll, Octopress, Hugo…
  • 寫文章很方便
  • 整理文章是惡夢
  • 寫個獨立的桌面app?
    • 自找麻煩
    • 另外呼叫使用者偏好的編輯器?
    • 內建編輯器?
  • 非常適合用 Emacs 來做的任務

hexo.el

tldr.el

同場加映:修改 .mscz 檔

  • MuseScore 的原生格式
  • zip 裡面包一些 .xml
  • 不解壓直接修改 xml !

    musescore_bug.jpg

什麼時候不該用 Emacs?

  • 看圖
  • PDF Reader
    • 請千萬別嘗試
    • 圖片顯示是惡夢
  • 網頁瀏覽器(例如內建的 eww
    • 別傻了
  • RSS Reader
  • Qt Programming
    • (坐等 Language Server 出來…)
  • 當你試用覺得用起來根本就不順手時

在學校的時候

  • 蠻常有同學問我我在用的東西是什麼

是否出現了一種

  • 0 的轉移

automata.png

讓整個科系都變成 Emacser ?

mj.jpg

並沒有

  • 有一定的耐心
  • 自訂狂
  • GNU 原教旨主義份子
    • (RMS 把維護 Emacs 的工作交給別人後,Emacs 的發展速度突然突飛猛進…)

結論

  • 雖然 Emacs 不一定是程式設計師的專用工具
  • 雖然他自由度非常高
  • 但也不代表他適合每個人
  • 花那麼多時間值得嗎?
    • 什麼用不順手,立刻寫幾個 function 立刻生效
    • 當你越常用 Emacs,你自訂的每個功能都越有它的價值
    • Emacs 絕對不是什麼適合所有人用的工具,口味對很重要

結論

  • Un*x 界很多地方都是可以用 Emacs-style 的 key-binding 的
  • e.g. bash, zsh, less, info,….
  • GTK, 甚至 macOS 原生應用程式的文字框…

Matz: "Emacs Has Changed My Life, Forever"

Matz Said…

  1. Emacs taught me freedom for software
  2. Emacs taught me how to read code
  3. Emacs taught me power of Lisp
  4. Emacs taught me how toimplement a language core
  5. Emacs taught me how toimplement a garbage collector
  6. Emacs helped me to code and debug
  7. Emacs helped me to writeand edit text/mails/documents
  8. Emacs helped me to be a effective programmer
  9. Emacs made me a hacker
  10. Emacs has changed my life

結論

  • Emacs 是個 Lisp 環境、一個生態系完整的「平台」
  • 拿來當另一個 OS 用
  • 想像就像是瀏覽器一般的地位
  • 裝好 Linux / Windows / OSX 後,第一件事就是裝 Firefox、輸入法跟 Emacs
  • 這是一個學一次就可以用一輩子的工具
  • 至少 Emacs 也確實改變了我的人生啦

Thank You slide