6 件你應該用 Emacs 做的事
想像一下使用 Python 的 IDLE 界面來編輯文本。你可以將文件載入到內存中,編輯它們,並保存更改。但是你執行的每個操作都由 Python 函數定義。例如,調用 upper()
來讓一個單詞全部大寫,調用 open
打開文件,等等。文本文檔中的所有內容都是 Python 對象,可以進行相應的操作。從用戶的角度來看,這與其他文本編輯器的體驗一致。對於 Python 開發人員來說,這是一個豐富的 Python 環境,只需在配置文件中添加幾個自定義函數就可以對其進行更改和開發。
這就是 Emacs 對 1958 年的編程語言 Lisp 所做的事情。在 Emacs 中,運行應用程序的 Lisp 引擎與輸入文本之間無縫結合。對 Emacs 來說,一切都是 Lisp 數據,因此一切都可以通過編程進行分析和操作。
這造就了一個強大的用戶界面(UI)。但是,如果你是 Emacs 的普通用戶,你可能對它的能力知之甚少。下面是你可能沒有意識到 Emacs 可以做的六件事。
使用 Tramp 模式進行雲端編輯
Emacs 早在網路流行化之前就實現了透明的網路編輯能力了,而且時至今日,它仍然提供了最流暢的遠程編輯體驗。Emacs 中的 Tramp 模式(以前稱為 RPC 模式)代表著 「 透明的遠程(文件)訪問,多協議 」,這準確說明了它提供的功能:通過最流行的網路協議輕鬆訪問你希望編輯的遠程文件。目前最流行、最安全的能用於遠程編輯的協議是 OpenSSH,因此 Tramp 使用它作為默認的協議。
在 Emacs 22.1 或更高版本中已經包含了 Tramp,因此要使用 Tramp,只需使用 Tramp 語法打開一個文件。在 Emacs 的 「File」 菜單中,選擇 「Open File」。當在 Emacs 窗口底部的小緩衝區中出現提示時,使用以下語法輸入文件名:
/ssh:user@example.com:/path/to/file
如果需要互動式登錄,Tramp 會提示你輸入密碼。但是,Tramp 直接使用 OpenSSH,所以為了避免交互提示,你可以將主機名、用戶名和 SSH 密鑰路徑添加到你的 ~/.ssh/config
文件。與 Git 一樣,Emacs 首先使用你的 SSH 配置,只有在出現錯誤時才會停下來詢問更多信息。
Tramp 非常適合編輯並沒有放在你的計算機上的文件,它的用戶體驗與編輯本地文件沒有明顯的區別。下次,當你 SSH 到伺服器啟動 Vim 或 Emacs 會話時,請嘗試使用 Tramp。
日曆
如果你喜歡文本多過圖形界面,那麼你一定會很高興地知道,可以使用 Emacs 以純文本的方式安排你的日程(或生活),而且你依然可以在移動設備上使用開源的 Org 模式查看器來獲得華麗的通知。
這個過程需要一些配置,以創建一個方便的方式來與移動設備同步你的日程(我使用 Git,但你可以調用藍牙、KDE Connect、Nextcloud,或其他文件同步工具),此外你必須在移動設備上安裝一個 Org 模式查看器(如 Orgzly)以及 Git 客戶程序。但是,一旦你搭建好了這些基礎,該流程就會與你常用的(或正在完善的,如果你是新用戶)Emacs 工作流完美地集成在一起。你可以在 Emacs 中方便地查閱日程、更新日程,並專註於任務上。議程上的變化將會反映在移動設備上,因此即使在 Emacs 不可用的時候,你也可以保持井然有序。
感興趣了?閱讀我的關於使用 Org mode 和 Git 進行日程安排的逐步指南。
訪問終端
有許多終端模擬器可用。儘管 Emacs 中的 Elisp 終端模擬器不是最強大的通用模擬器,但是它有兩個顯著的優點:
- 打開在 Emacs 緩衝區之中:我使用 Emacs 的 Elisp shell,因為它在 Emacs 窗口中打開很方便,我經常全屏運行該窗口。這是一個小而重要的優勢,只需要輸入
Ctrl+x+o
(或用 Emacs 符號來表示就是C-x o
)就能使用終端了,而且它還有一個特別好的地方在於當運行漫長的作業時能夠一瞥它的狀態報告。 - 在沒有系統剪貼板的情況下複製和粘貼特別方便:無論是因為懶惰不願將手從鍵盤移動到滑鼠,還是因為在遠程控制台運行 Emacs 而無法使用滑鼠,在 Emacs 中運行終端有時意味著可以從 Emacs 緩衝區中很快地傳輸數據到 Bash。
要嘗試 Emacs 終端,輸入 Alt+x
(用 Emacs 符號表示就是 M-x
),然後輸入 shell
,然後按回車。
使用 Racket 模式
Racket 是一種激動人心的新興 Lisp 方言,擁有動態編程環境、GUI 工具包和充滿激情的社區。學習 Racket 的默認編輯器是 DrRacket,它的頂部是定義面板,底部是交互面板。使用該設置,用戶可以編寫影響 Racket 運行時環境的定義。就像舊的 Logo Turtle 程序,但是有一個終端而不是僅僅一個海龜。
由 PLT 提供的 LGPL 示例代碼
基於 Lisp 的 Emacs 為資深 Racket 編程人員提供了一個很好的集成開發環境(IDE)。它尚未附帶 Racket 模式,但你可以使用 Emacs 包安裝程序安裝 Racket 模式和輔助擴展。要安裝它,按下 Alt+X
(用 Emacs 符號表示就是 M-x
),鍵入 package-install
,然後按回車。接著輸入要安裝的包 racet-mode
,按回車。
使用 M-x racket-mode
進入 Racket 模式。如果你是 Racket 新手,而對 Lisp 或 Emacs 比較熟悉,可以從這份優秀的圖解 Racket 入手。
腳本
你可能知道,Bash 腳本在自動化和增強 Linux 或 Unix 體驗方面很流行。你可能聽說過 Python 在這方面也做得很好。但是你知道 Lisp 腳本可以用同樣的方式運行嗎?有時人們會對 Lisp 到底有多有用感到困惑,因為許多人是通過 Emacs 來了解 Lisp 的,因此有一種潛在的印象,即在 21 世紀運行 Lisp 的惟一方法是在 Emacs 中運行。幸運的是,事實並非如此,Emacs 是一個很好的 IDE,它支持將 Lisp 腳本作為一般的系統可執行文件來運行。
除了 Elisp 之外,還有兩種流行的現代 Lisp 可以很容易地用來作為獨立腳本運行。
- Racket:你可以通過在系統上運行 Racket 來提供運行 Racket 腳本所需的運行時支持,或者你可以使用
raco exe
產生一個可執行文件。raco exe
命令將代碼和運行時支持文件一起打包,以創建可執行文件。然後,raco distribution
命令將可執行文件打包成可以在其他機器上工作的發行版。Emacs 有許多 Racket 工具,因此在 Emacs 中創建 Racket 文件既簡單又有效。 - GNU Guile:GNU Guile( GNU 通用智能語言擴展 的縮寫)是 Scheme 編程語言的一個實現,它可以用於為桌面、互聯網、終端等創建應用程序和遊戲。Emacs 中的 Scheme 擴展眾多,使用任何一個擴展來編寫 Scheme 都很容易。例如,這裡有一個用 Guile 編寫的 「Hello world」 腳本:
#!/usr/bin/guile -s
!#
(display "hello world")
(newline)
用 guile
編譯並允許它:
$ guile ./hello.scheme
;;; compiling /home/seth/./hello.scheme
;;; compiled [...]/hello.scheme.go
hello world
$ guile ./hello.scheme
hello world
無需 Emacs 允許 Elisp
Emacs 可以作為 Elisp 的運行環境,但是你無需按照傳統印象中的必須打開 Emacs 來運行 Elisp。--script
選項可以讓你使用 Emacs 作為引擎來執行 Elisp 腳本,而無需運行 Emacs 圖形界面(甚至也無需使用終端)。下面這個例子中,-Q
選項讓 Emacs 忽略 .emacs
文件,從而避免由於執行 Elisp 腳本時產生延遲(若你的腳本依賴於 Emacs 配置中的內容,那麼請忽略該選項)。
emacs -Q --script ~/path/to/script.el
下載 Emacs 備忘錄
Emacs 許多重要功能都不是只能通過 Emacs 來實現的;Org 模式是 Emacs 擴展也是一種格式標準,流行的 Lisp 方言大多不依賴於具體的應用,我們甚至可以在沒有可見或可互動式 Emacs 實例的情況下編寫和運行 Elisp。然後若你對為什麼模糊代碼和數據之間的界限能夠引發創新和效率感到好奇的話,那麼 Emacs 是一個很棒的工具。
幸運的是,現在是 21 世紀,Emacs 有了帶有傳統菜單的圖形界面以及大量的文檔,因此學習曲線不再像以前那樣。然而,要最大化 Emacs 對你的好處,你需要學習它的快捷鍵。由於 Emacs 支持的每個任務都是一個 Elisp 函數,Emacs 中的任何功能都可以對應一個快捷鍵,因此要描述所有這些快捷鍵是不可能完成的任務。你只要學習使用頻率 10 倍於不常用功能的那些快捷鍵即可。
我們匯聚了最常用的 Emacs 快捷鍵成為一份 Emacs 備忘錄以便你查詢。將它掛在屏幕附近或辦公室牆上,把它作為滑鼠墊也行。讓它觸手可及經常翻閱一下。每次翻兩下可以讓你獲得十倍的學習效率。而且一旦開始編寫自己的函數,你一定不會後悔獲取了這個免費的備忘錄副本的!
via: https://opensource.com/article/20/1/emacs-cheat-sheet
作者:Seth Kenlon 選題:lujun9972 譯者:lujun9972 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive