各位大佬好,我是一位emacs新手,想知道大家为什么喜爱emacs,它有什么优点,为什么不选择它的同类型编辑器:vim, vscode, neovim… 希望大佬们解惑,同时也交流一些emacs的技巧
Emacs 是世界上打猴子补丁最容易的编辑器没有之一,所以比其它编辑器折腾空间更多一些。
不愿意折腾的话,用基于 VSCode 的编辑器会更合适。
我觉得对比其他的文本编辑器,Emacs 最本质的差别是它是披着编辑器外衣的Lisp 解释器,假设你有一个 Python 解释器,有什么功能是无法实现的呢?
只要你能想到,基本都能实现出来(实现得好不好另说),所以这赋予了 Emacs无与伦比的扩展性,这也是为什么 Emacs的插件这么强大的原因。
论坛有非常多的帖子介绍Emacs不同的技巧
能考虑vscode,那就用吧,省心,现在其实除了org-mode,其他的都有一些替代品
Emacs 可以完成其它编辑器胜任不了的工作.
比如:
当你想要从很多文件中查找内容, 这些文件编码类型非常多而且不统一, 然后你查找的内容是 中文字符, 这时你怎么借用工具? 怎么能确认 找完了? 并能确认有没有 找到/有没有?
这时 Emacs 就派上用场了, 你写了一个函数, 将所有文件打开, 并且 Emacs 保持文件对应编码打开了文件, 所以你不会从 Emacs 打开文件后看到 中文乱码, 然后你使用 consult-line-multi 搜索所有buffer查找对应中文, 搞定.
While any text editor can save your files, only Emacs can save your soul. ![]()
工作不写代码,我只用org-mode,越用越好用
有个词叫奇技淫巧,一般用于否定某些事物, 如果现在这个世界还有什么东西可以称为奇技淫巧的,我感觉emacs lisp就是其中集大成者。
所以奇技淫巧有什么迷人之处?如果你觉的没有,那基本也就发现不了emacs有什么迷人之处了
类似钓鱼,打坐之类的。。。。
对我其实就是读lisp和写lisp很爽
纯粹当年不懂,误入歧途,网上吹的(神之编辑器
用习惯了又很难改掉
自由度高,比如:
- 可以hack各种mode下的键位启动哪个命令,也可以自己定义mode。由于极高的自由度,甚至有插件可以几乎完整地还原vim的几操作方式。
- 内置的quail可以自己定制输入法(当然这玩意平时基本用不到)
- transient和repeat-mode也是杀手锏功能
- 菜单栏也可自由定制
感觉主要是自带“文档”这一点吧, 我已经快是用什么都下意识C-h k了🤣 还有就是有一个不错的的gui,因为我平时会记不少数学公式,但是vim的tui属性决定了预览一定很丑, 然后转入emacs发现了org,就顺手把markdown也给抛弃了
用 Emacs 就像吸毒,会容易上瘾。
歡迎新人
非大佬,但以前也寫過這類問題的回答:
但我以前的回答比較抽象,具體到特定的功能的話……我先問下 AI:Emacs 有什麼 vim/vscode/neovim 等沒有的常用功能嗎?
ChatGPT 的回答放到最後,我覺得總結得還不錯,自己再補充一些:
-
wdired 這類,把某個命令的結果當作 text 編輯、保存、生效,可以極爲容易地批量修改文件名、在多多文件中替換文本等
-
emms 等,直接在 emacs 中做各種音樂播放的處理,例如從 dired 中選中後直接生成 playlist 播放 → 在一個插件中積累的經驗往往可以在使用另一個插件時疊加,類似的例子如 magit commit 時用 flyspell 做拼寫檢查,而 flyspell 又可以做很多配置……company、yasnippet 等同理
-
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 的存在,同樣的方案在手機上也能用,產生的筆記是純文本,便於搜索、直接看)……
-
keepass mode 作爲一個簡單的鍵盤操作的 keepass 密碼管理器
-
基於拼音首字母、雙拼字母等搜索(我是用 pyim 實現的)
-
輸入法,我用魔然(自然碼的一個變體),加上 emacs-rime 的探針之類的功能,文字錄入體驗甚佳
-
lisp 編程的體驗大概是最好的?至少是之一
-
gdb-many-windows + eglot + citre,對我偶爾 hack C/C++ 而言很好用 → 非特別優勢,只是說我需要的功能 emacs 能做到
-
elfeed(RSS 訂閱)、email、IRC、Telegram、Matrix 等
這個列表可以列很長,單是 org-mode 就還有很多,但我想最主要的是:
- emacs 本質上是一個 lisp machine,幾乎想改什麼改什麼,改完立刻可以驗證,對於 hack 一些自己想要的功能非常便宜
- 很多功能一旦掌握了,就可以與其他功能疊加使用(應用於同一抽象層),在使用的過程中又對這些已經掌握的功能變得更熟悉,一次投資,長遠收益,而且是複利
- 長久以來積累了很多好用的功能
這三者相輔相成,互相促進
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 幾乎唯一選擇
这才应该是绝大多数人的感受吧 ![]()
谢谢,受益匪浅
感性评价:Emacs 比较黏我。
我这几星期刚刚从 VS Code 迁移过来(去年夏天初学 Common Lisp 时在 Emacs 中用过 SLY,对 Lisp 这种“活着的”开发体验印象极好),虽然 Code 和 Emacs 都强调类似于“可插拔”的概念,但我并没有觉得 Emacs 的包离我有多少距离,毕竟我的配置文件是 ELisp,(M)ELPA 包也是 ELisp 写成的,很容易接触到插件内部的原理。
回想用 Code 时的情境,我当时觉得插件就是插件,虽然许多插件源代码也是公开的,我却倾向于将它们看成黑盒,点点鼠标安装,and it just works. 要是不够满意,我懒得动,受着,等作者修。
接触到插件内部的原理有什么好处呢?请看例子:
我想要将平滑滚动适用于 C-v、M-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
对我来说,这种亲近的感觉,确实很妙
pyim不止支持首字母搜索,全拼音搜索,双拼搜索,型码搜索应该也支持,只不过知道的人少 ![]()
可能emacs 用户参与度高也有这方面的原因吧,听说论比率,所有编辑器中,用户给编辑器或者编辑器插件贡献代码,emacs 用户是最高的,而且高得多,甩开其它编辑器一大截。以我自己为例,刚开始折腾自己的配置文件,然后尝试给几个用的package 提交pr, 然后居然做了自己的package.
