6 件你應該用 Emacs 做的事
下面六件事情你可能都沒有意識到可以在 Emacs 下完成。此外還有我們的新備忘單,拿去,充分利用 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 中國”官方小程式來檢視
相關文章
- 你應該知道的關於SEO和Javascript的6個事實JavaScript
- 關於大資料你應該瞭解的五件事兒大資料
- 作為軟體工程師你應該知道的100件事 - Harish軟體工程工程師
- 你應該知道的Redis事務Redis
- 測試Leader應該做哪些事?
- 關於工業物聯網,你應該瞭解的3件事
- 高能預警:2019年程式設計師最應該做這8件事!!程式設計師
- 遷移學習:該做的和不該做的事遷移學習
- 成為前端,你不該學的東西,以及不該做的事兒!前端
- IT安全專業人員應該知道的12件事
- 專案經理應該知道的97件事 --譯者序
- 你應該知道的6大資料中心趨勢大資料
- 用友雲開發者中心,你應該知道的那些事
- 使用 Emacs 進行社交併跟蹤你的待辦事項列表Mac
- 初識python你應該知道的6個知識點!Python
- 你怎麼知道萬豪沒有洩露你的隱私?快做5件事!
- 每個Java軟體架構師都應該知道的20件事Java架構
- [Flutter翻譯]開始使用Flutter Web之前應該知道的7件事FlutterWeb
- 關於JavaScript的作用域你應該瞭解的那點事!JavaScript
- 秒殺系統流量削峰這事應該怎麼做?
- 驅動你做一件事的動力來源是什麼?
- 6種為你的laravel應用提速的方式Laravel
- 每個黑帶大師都應該知道的10件事(建議收藏)
- DOM和Diff演算法你應該知道的那些事,快收藏!演算法
- 函式節流你應該知道的那點事,建議收藏!函式
- 你應該知道的FlutterFlutter
- 你應該知道的RocketMQMQ
- 確保Web應用程式安全應該考慮哪些事項Web
- 邦芒面試:每次面試結束後都應做的四件事面試
- 建立高效的團隊,可以做這七件事
- 你的應用應該如何收費?它的價值是什麼?
- 不想讓流片打水漂?做自動駕駛汽車晶片前你應該知道這五件要事!自動駕駛晶片
- 關於Git小白應該知道的事Git
- 自學中應該注意的事項
- 關於製造業中物聯網的未來應該瞭解的7件事
- 【專案經理應該知道的97件事】三位一體的專案管理專案管理
- 你應該知道的JS —— 物件JS物件
- 【架構設計】你的應用該如何分層呢?架構