疑惑🤔:Emacs为什么迷人?

各位大佬好,我是一位emacs新手,想知道大家为什么喜爱emacs,它有什么优点,为什么不选择它的同类型编辑器:vim, vscode, neovim… 希望大佬们解惑,同时也交流一些emacs的技巧

1 个赞

Emacs 是世界上打猴子补丁最容易的编辑器没有之一,所以比其它编辑器折腾空间更多一些。
不愿意折腾的话,用基于 VSCode 的编辑器会更合适。

4 个赞

我觉得对比其他的文本编辑器,Emacs 最本质的差别是它是披着编辑器外衣的Lisp 解释器,假设你有一个 Python 解释器,有什么功能是无法实现的呢?

只要你能想到,基本都能实现出来(实现得好不好另说),所以这赋予了 Emacs无与伦比的扩展性,这也是为什么 Emacs的插件这么强大的原因。

论坛有非常多的帖子介绍Emacs不同的技巧

4 个赞

能考虑vscode,那就用吧,省心,现在其实除了org-mode,其他的都有一些替代品

1 个赞

Emacs 可以完成其它编辑器胜任不了的工作.

比如:
当你想要从很多文件中查找内容, 这些文件编码类型非常多而且不统一, 然后你查找的内容是 中文字符, 这时你怎么借用工具? 怎么能确认 找完了? 并能确认有没有 找到/有没有?
这时 Emacs 就派上用场了, 你写了一个函数, 将所有文件打开, 并且 Emacs 保持文件对应编码打开了文件, 所以你不会从 Emacs 打开文件后看到 中文乱码, 然后你使用 consult-line-multi 搜索所有buffer查找对应中文, 搞定.

While any text editor can save your files, only Emacs can save your soul. :wink:

一些链接
8 个赞

工作不写代码,我只用org-mode,越用越好用

1 个赞

有个词叫奇技淫巧,一般用于否定某些事物, 如果现在这个世界还有什么东西可以称为奇技淫巧的,我感觉emacs lisp就是其中集大成者。

所以奇技淫巧有什么迷人之处?如果你觉的没有,那基本也就发现不了emacs有什么迷人之处了

类似钓鱼,打坐之类的。。。。

1 个赞

对我其实就是读lisp和写lisp很爽

1 个赞

纯粹当年不懂,误入歧途,网上吹的(神之编辑器

用习惯了又很难改掉

17 个赞

自由度高,比如:

  • 可以hack各种mode下的键位启动哪个命令,也可以自己定义mode。由于极高的自由度,甚至有插件可以几乎完整地还原vim的几操作方式。
  • 内置的quail可以自己定制输入法(当然这玩意平时基本用不到)
  • transient和repeat-mode也是杀手锏功能
  • 菜单栏也可自由定制

感觉主要是自带“文档”这一点吧, 我已经快是用什么都下意识C-h k了🤣 还有就是有一个不错的的gui,因为我平时会记不少数学公式,但是vim的tui属性决定了预览一定很丑, 然后转入emacs发现了org,就顺手把markdown也给抛弃了

用 Emacs 就像吸毒,会容易上瘾。

歡迎新人

非大佬,但以前也寫過這類問題的回答:

但我以前的回答比較抽象,具體到特定的功能的話……我先問下 AI:Emacs 有什麼 vim/vscode/neovim 等沒有的常用功能嗎?

ChatGPT 的回答放到最後,我覺得總結得還不錯,自己再補充一些:

  1. wdired 這類,把某個命令的結果當作 text 編輯、保存、生效,可以極爲容易地批量修改文件名、在多多文件中替換文本等

  2. emms 等,直接在 emacs 中做各種音樂播放的處理,例如從 dired 中選中後直接生成 playlist 播放 → 在一個插件中積累的經驗往往可以在使用另一個插件時疊加,類似的例子如 magit commit 時用 flyspell 做拼寫檢查,而 flyspell 又可以做很多配置……company、yasnippet 等同理

  3. org-mode 和其生態,例如 org-capture 隨時記錄想法、org2blog 把文章輕鬆發佈到 wordpress、org-publish 制作靜態網站(又可以利用 pandoc 轉成 epub 電子書)、與 gpg 結合成爲日記軟件(直接編輯 gpg 文件好像是 emacs 特有的)、與 orgzly (Android)結合作爲手機筆記軟件(電腦端、移動端一體的知識管理系統、calendar 系統)、org-remark 作爲閱讀筆記軟件(我把電子書轉成 html,然後用 hack 過的 eww 打開,再用 org-remark-eww-mode,而因爲 Android Emacs 的存在,同樣的方案在手機上也能用,產生的筆記是純文本,便於搜索、直接看)……

  4. keepass mode 作爲一個簡單的鍵盤操作的 keepass 密碼管理器

  5. 基於拼音首字母、雙拼字母等搜索(我是用 pyim 實現的)

  6. 輸入法,我用魔然(自然碼的一個變體),加上 emacs-rime 的探針之類的功能,文字錄入體驗甚佳

  7. lisp 編程的體驗大概是最好的?至少是之一

  8. gdb-many-windows + eglot + citre,對我偶爾 hack C/C++ 而言很好用 → 非特別優勢,只是說我需要的功能 emacs 能做到

  9. elfeed(RSS 訂閱)、email、IRC、Telegram、Matrix 等

這個列表可以列很長,單是 org-mode 就還有很多,但我想最主要的是:

  1. emacs 本質上是一個 lisp machine,幾乎想改什麼改什麼,改完立刻可以驗證,對於 hack 一些自己想要的功能非常便宜
  2. 很多功能一旦掌握了,就可以與其他功能疊加使用(應用於同一抽象層),在使用的過程中又對這些已經掌握的功能變得更熟悉,一次投資,長遠收益,而且是複利
  3. 長久以來積累了很多好用的功能

這三者相輔相成,互相促進


ChatGPT 的回答:

有,而且是結構性差異,不是插件能完全補齊的那種。重點如下:


1. 同一語言(Elisp)貫穿「用/改/擴」

  • Emacs 的配置、命令、插件、即時改行為,全是 Emacs Lisp
  • 不是「寫配置」而是「改正在跑的程式」。
  • Vim/Neovim:Lua/Vimscript + 外部插件邊界明顯 VS Code:API + JSON + TypeScript,重啓/Reload 成本高

結果:Emacs 能做到 live system hacking


2. 真正的「可編程編輯器」,不是插件平台

  • 任何操作=函數=可組合

  • 任意命令可:

    • 記錄(kmacro)
    • 改寫
    • 掛 advice
    • 動態替換

在 Vim/VSCode,很多核心行為是「不可攔截黑盒」。


3. Org-mode:不是 TODO,而是一個 DSL

Org-mode 是 Emacs 獨有,且不可被等價複製

  • 文檔 = 結構化資料

  • 同時是:

    • 任務管理
    • 筆記系統
    • 表格 / 輕量資料庫
    • Literate programming(Babel)
    • 發佈系統(HTML / PDF / EPUB)

VS Code / Vim 的 markdown + 插件 ≠ Org-mode。


4. Magit:Git 的「語義級 UI」

  • 不是「git 命令包一層 UI」
  • 是把 Git 抽象成操作狀態機
  • 每個操作可回溯、可組合、可精確控制

很多資深 Git 用戶在 Emacs 才「真正理解 Git」。


5. Buffer ≠ 檔案(核心觀念差異)

  • Emacs 操作的是 buffer
  • 檔案、shell、REPL、log、diff、help 都是 buffer
  • 同一套鍵位 / 編輯模型適用所有東西

VS Code / Vim:

  • 檔案是核心
  • 其他東西是「面板」「特殊視圖」

6. 長時間運行的個人計算環境

  • Emacs 常年不關
  • 累積狀態、歷史、上下文
  • 像一個「個人 OS 內核」

Vim/Neovim 偏 session VS Code 偏 project lifecycle


7. 非文本任務也能「一等公民化」

  • Email(mu4e / notmuch)
  • IRC / Matrix / Telegram
  • RSS
  • 日程
  • 文件管理
  • 甚至 window manager(EXWM)

不是「整合」,是「同一抽象層」。


一句話總結

Vim / Neovim / VS Code:高效的編輯器 Emacs:一個你可以隨時間「長成自己形狀」的可編程系統

如果你只是「寫代碼」→ 不一定需要 Emacs 如果你想把 寫作 / 研究 / 任務 / 思考 / 系統操作 合成一個可演化工具 → Emacs 幾乎唯一選擇

5 个赞

这才应该是绝大多数人的感受吧 :joy:

谢谢,受益匪浅

感性评价:Emacs 比较黏我。

我这几星期刚刚从 VS Code 迁移过来(去年夏天初学 Common Lisp 时在 Emacs 中用过 SLY,对 Lisp 这种“活着的”开发体验印象极好),虽然 Code 和 Emacs 都强调类似于“可插拔”的概念,但我并没有觉得 Emacs 的包离我有多少距离,毕竟我的配置文件是 ELisp,(M)ELPA 包也是 ELisp 写成的,很容易接触到插件内部的原理。
回想用 Code 时的情境,我当时觉得插件就是插件,虽然许多插件源代码也是公开的,我却倾向于将它们看成黑盒,点点鼠标安装,and it just works. 要是不够满意,我懒得动,受着,等作者修。

接触到插件内部的原理有什么好处呢?请看例子: 我想要将平滑滚动适用于 C-vM-v参考文献),又觉得滚动一屏太长了,所以我就自己改成了75%(参考了原生的C-v/M-v实现,顺手把C-u也支持了):

;; Scroll
(pixel-scroll-precision-mode 1)
(setq pixel-scroll-precision-interpolate-page t)

(defun +pixel-scroll-interpolate-down (&optional arg)
  (interactive "P")
  (if pixel-scroll-precision-interpolate-page
      (pixel-scroll-precision-interpolate
       (if arg
           (* -1 (prefix-numeric-value arg) (pixel-line-height))
         (- (* 0.75 (window-text-height nil t)))) nil 1)
    (condition-case nil
	(scroll-up arg)
      (end-of-buffer (goto-char (point-max))))))

(defun +pixel-scroll-interpolate-up (&optional arg)
  (interactive "P")
  (if pixel-scroll-precision-interpolate-page
      (pixel-scroll-precision-interpolate
       (if arg
           (* (prefix-numeric-value arg) (pixel-line-height))
         (* 0.75 (window-text-height nil t))) nil 1)
    (condition-case nil
	(scroll-down)
      (beginning-of-buffer (goto-char (point-min))))))

(defalias 'scroll-up-command '+pixel-scroll-interpolate-down)
(defalias 'scroll-down-command '+pixel-scroll-interpolate-up)

再如,我在使用markdown-toc时发现锚点生成不支持中文,由于 MELPA 包安装好时,源代码就在我的手边,于是我顺手打开、搞明白了问题所在,接着拼尽全力向上游提交了补丁: https://emacs-china.org/t/markdown-toc/30904

对我来说,这种亲近的感觉,确实很妙

5 个赞

pyim不止支持首字母搜索,全拼音搜索,双拼搜索,型码搜索应该也支持,只不过知道的人少 :rofl:

1 个赞

可能emacs 用户参与度高也有这方面的原因吧,听说论比率,所有编辑器中,用户给编辑器或者编辑器插件贡献代码,emacs 用户是最高的,而且高得多,甩开其它编辑器一大截。以我自己为例,刚开始折腾自己的配置文件,然后尝试给几个用的package 提交pr, 然后居然做了自己的package.

2 个赞