Emacs Lisp 提供高度的客製化能力,允許使用者調整編輯器行為。透過修改變數和設定選項,可以開發個人化的開發環境。Emacs 的鍵盤宏功能則能自動化重複性操作,提升編輯效率。使用者可以定義、儲存和重複使用鍵盤宏,簡化複雜的編輯流程。初始化檔案(例如 ~/.emacs)則能儲存個人化的 Emacs 設定,確保每次啟動都能保有相同的環境。這些進階設定技巧讓 Emacs 成為一個功能強大且高度客製化的開發工具。

Emacs 進階設定與自定義

Emacs 是一個功能強大的文字編輯器,提供了豐富的自定義選項,讓使用者可以根據個人需求調整其行為。以下將介紹如何使用 Emacs 的自定義功能來設定各種變數,並針對特定需求進行調整。

自定義選項與幫助功能

要查詢 Emacs 中的某個選項,可以使用幫助功能。例如,要了解 show-paren-mode 的作用,可以按下以下鍵盤快捷鍵:

  1. 按下 <Ctrl+ H> 進入幫助模式。
  2. 輸入 v 以描述變數。
  3. 輸入 show-paren-mode 並按下 <Enter>

這樣會顯示 show-paren-mode 的詳細說明,讓你瞭解該選項的功能和用途。

自定義 Emacs 設定

Emacs 提供多種方式來自定義設定。最常見的方法是透過「選項」選單來進行自定義。以下是一些常用的步驟:

  1. 選擇「選項」選單:在 Emacs 中,點選「選項」選單,然後選擇「自定義 Emacs」。
  2. 進入自定義群組:這會開啟一個新的緩衝區,讓你可以選擇各種子群組進行自定義。例如,選擇「Top-Level Customization Group」會開啟更多的子群組選項。

使用命令列進行自定義

除了使用圖形介面,你也可以透過命令列來進行自定義。以下是一些常用的命令:

  1. 開啟自定義緩衝區:在命令列中輸入 <Alt+Shift+X>,然後輸入 customize,並按下 <Enter>。這會開啟一個自定義緩衝區,讓你可以瀏覽和修改各種設定。
  2. 直接變更特定設定:如果你知道要修改的設定名稱,可以直接使用以下命令:
    • <Alt+X> customize-option:用來修改特定的變數。
    • <Alt+X> customize-face:用來修改文字外觀(如字型和顏色)。
    • <Alt+X> customize-group:用來修改特定的自定義群組。

自定義緩衝區導航

在自定義緩衝區中,你可以看到許多可編輯的欄位和按鈕。以下是一些常見的操作:

  • 搜尋設定:在自定義緩衝區頂部有一個可編輯欄位,你可以輸入關鍵字進行搜尋。
  • 導航按鈕:使用 <Tab> 鍵可以前進到下一個按鈕或可編輯欄位,使用 <Shift+Tab> 鍵可以後退到前一個按鈕或可編輯欄位。
  • 啟用連結:點選或使用滑鼠移動到連結上然後按下 <Enter> 鍵,可以開啟相應的子群組或設定。

範例:修改變數

以下是修改一個具體變數的範例:

  1. 進入自定義緩衝區:按下 <Alt+Shift+X> 再輸入 customize
  2. 瀏覽到特定變數:透過點選或導航到 Editing > Killing 裡面的 Kill Ring Max 變數。
  3. 修改變數值:點選變數值旁邊的空白處進行編輯。例如,將 Kill Ring Max 的值從 60 改為 100。
  4. 儲存設定:點選 [State] 按鈕並選擇 Set for Current Session 使更改生效於當前會話。如果要永久儲存設定,請選擇 Save for Future Sessions

自動生成 elisp 命令

當你儲存設定時,Emacs 會在你的 ~/.emacs 檔案中生成相應的 elisp 命令。這些命令在每次啟動 Emacs 時都會被執行,從而應用你所做的自定義。

此圖示

此圖示展示了 Emacs 自定義群組的層次結構。從主群組 Emacs 出發,可以進一步瀏覽到子群組如 EditingConvenience。在 Editing 裡面還有更細分的子群組如 KillingKill Ring Max

自動化與批次處理

如果需要批次處理或自動化某些操作,建議將這些操作寫成 elisp 擴充套件程式碼並載入到 Emacs 中。這樣可以大幅提升工作效率。

注意事項

  • 避免重複設定:每次更改之前檢查現有設定以避免重複設定。
  • 備份組態檔案:在進行大規模更改之前備份 ~/.emacs 組態檔案以防止意外失誤。

GNU Emacs 變數管理與初始化檔

GNU Emacs 是一個功能強大的文字編輯器,其功能的靈活性主要來自於其內建的 Emacs Lisp(Elisp)語言。本文將探討如何在 Emacs 中管理變數、設定變數值以及如何使用初始化檔來永久儲存這些設定。

檢視與設定變數值

在 Emacs 中,變數可以用來控制各種行為和選項。以下是一些常見的方法來檢視和設定變數值。

檢視變數

要檢視某個變數的當前值和相關檔案,可以使用以下快捷鍵:

<Ctrl+ H> v variablename <Enter>

例如,要檢視 fill-column 變數,可以按下 <Ctrl+ H> v fill-column <Enter>。這會開啟一個新的緩衝區,顯示 fill-column 的當前值和相關檔案。

設定變數

要設定某個變數的值,可以使用以下方法:

  1. 使用 set-variable 命令

    <Alt+ X> set-variable <Enter> var <Enter> value <Enter>
    

    例如,要將 fill-column 設為 75,可以按下 <Alt+ X> set-variable <Enter> fill-column <Enter> 75 <Enter>

  2. 使用 Elisp 表示式

    (setq fill-column 75)
    

    要執行這個表示式,可以按下 <Alt+:>(eval-expression),然後在最小緩衝區中輸入 (setq fill-column 75),再按下 Enter。或者在 *scratch* 緩衝區中輸入 (setq fill-column 75),然後按下 <Ctrl+ J>

初始化檔中的 Elisp 語法

Emacs 的初始化檔(通常是 ~/.emacs~/.emacs.d/init.el)包含了 Emacs 啟動時會執行的 Elisp 陳述式。這些陳述式通常用來設定各種選項和行為。

基本語法

每個 Elisp 陳述式都是由一個函式名稱和其引陣列成,並且所有內容都包含在括號內。例如:

(setq fill-column 60)

這行程式碼呼叫 setq 函式將 fill-column 變數設為 60。

常見的常數型別

在初始化檔中,常見的常數型別包括:

  • 數字:以十進製表示,可選擇性地以負號開頭。
  • 字串:使用雙引號括起來,與 C 語言中的字串語法相同。
  • 字元:以 ? 開頭,後面跟隨一個字元或逃脫序列。
  • 真假值t 代表真(true),nil 代表假(false)。
  • 其他 Lisp 物件:使用單引號 (') 跟隨一個 Lisp 物件。

自動縮寫(Abbrevs)

Abbrev 是 Emacs 中的一種自動縮寫功能,允許使用者定義簡短的詞語來擴充套件成更長的字串。這對於經常輸入特定字串的人來說非常方便。

啟用與停用 Abbrev 模式

Abbrev 模式是一種緩衝區本地次要模式(buffer-local minor mode),僅在啟用時有效。可以使用以下快捷鍵來切換 Abbrev 模式:

<Alt+ X> abbrev-mode

若使用數值引數,則根據引數的正負來啟用或停用 Abbrev 模式。

定義與管理 Abbrev

以下是一些常見的命令來定義和管理 Abbrev:

<Ctrl+ X> a g

這個命令用來定義全域 Abbref,將點之前的一個或多個詞作為擴充套件內容。

簡介:Emacs 簡碼(Abbrev)系統

Emacs 是一個強大的文字編輯器,擁有豐富的功能和高度的可定製性。其中,簡碼(Abbrev)系統是一個非常實用的功能,能夠顯著提升使用者的編輯效率。簡碼系統允許使用者定義簡短的詞彙或片語,當這些簡短的詞彙或片語被輸入時,Emacs 會自動展開為預先定義的長詞彙或片語。這不僅減少了重複輸入的勞動,還能提高編輯的速度和準確性。

基本操作

首先,讓我們來瞭解如何在 Emacs 中定義和使用簡碼。

定義全域簡碼

要定義一個全域簡碼,即在所有模式中都有效的簡碼,可以使用以下步驟:

  1. 先將完整的詞彙或片語輸入到緩衝區中。
  2. 將遊標移動到這些詞彙或片語後面。
  3. 按下 <Ctrl+ X> a g ,然後在小幫手(minibuffer)中輸入你希望的簡短詞彙或片語。

例如,假設你想定義一個簡碼 brb ,當輸入 brb 時自動展開為 be right back ,你可以按照以下步驟操作:

  1. 在緩衝區中輸入 be right back
  2. 將遊標移動到這些文字後面。
  3. 按下 <Ctrl+ X> a g ,然後在小幫手中輸入 brb

定義模式特定簡碼

如果你只想在特定模式中使用某些簡碼,可以使用 <Ctrl+ X> a l 命令來定義模式特定的簡碼。這樣可以避免在其他模式中不必要的幹擾。

例如,在程式碼編輯模式中定義一個簡碼:

  1. 在程式碼編輯模式下輸入完整的程式碼片段。
  2. 將遊標移動到這些程式碼片段後面。
  3. 按下 <Ctrl+ X> a l ,然後在小幫手中輸入你希望的簡短詞彙或片語。

使用其他命令定義簡碼

除了以上兩種方法外,還有一些其他命令可以用來定義簡碼:

  • <Alt+ X> define-global-abbrev <Enter> abbrev <Enter> expression <Enter> :定義一個全域簡碼,並指定其展開成特定表示式。
  • <Alt+ X> define-mode-abbrev <Enter> abbrev <Enter> expression <Enter> :定義一個模式特定簡碼,並指定其展開成特定表示式。
  • <Alt+ X> kill-all-abbrevs :清除所有已定義的簡碼。

控制簡碼展開

在 Abbrev 模式啟用時,當你輸入一個簡碼並接著輸入空白字元或標點符號時,Emacs 會自動展開這個簡碼。例如,當你輸入 brb 並接著按下空格鍵時,Emacs 會自動將 brb 展開為 be right back

以下是一些控制簡碼展開的命令:

  • <Alt+ '> :分隔字首和要展開的簡碼。
  • <Ctrl+ X> a e :展開遊標前面的簡碼。
  • <Alt+ X> expand-region-abbrevs :展開區域內的所有簡碼。

如果你不小心展開了一個簡碼,可以使用 <Ctrl+ /> (undo)命令來復原展開操作。

列出和編輯簡碼

你可以列出所有已定義的簡碼,並進行編輯:

  • <Alt+ X> list-abbrevs :顯示所有已定義的簡碼列表。
  • <Alt+ X> edit-abbrevs :編輯已定義的簡碼。這個命令會開啟一個名為 *Abbrevs* 的緩衝區,讓你可以新增、修改或刪除簡碼。

儲存和載入簡碦

要在不同編輯會話之間保留簡碼組態資訊,可以將簡碼儲存到檔案中,並從檔案中讀取簡碼組態。

<Alt+ X> write-abbrev-file <Enter> filename <Enter>

此命令會將所有已定義的簡碼儲存到指定的檔案中。而在新的編輯會話中,可以透過以下命令載入簡碼組態:

<Alt+ X> read-abbrev-file <Enter> filename <Enter>

預設情況下, Emacs 在啟動時會從檔案 ~/.Emacs.d/abbrev_defs 中載入簡碼組態。你可以透過設定變數 abbrev-file-name 的值來更改這個檔案路徑。

內容解密:

<Alt+ X> write-abbrev-file <Enter> filename <Enter>

此命令用於將目前所有已經定義好的縮寫儲存至指設定檔案。其主要功能是儲存縮寫組態資訊以便在之後使用。

<Alt+ X> read-abbrev-file <Enter> filename <Enter>

此命令用於從指設定檔案讀取縮寫組態資訊。它會根據檔案中的內容重新設定縮寫。

<Alt+X > define-abbrevs

此命令會根據目前緩衝區中的縮寫組態資訊重新設定縮寫。

<Alt +X > insert-abbrevs

此命令會將所有目前已經存在之縮寫及其擴充內容插入目前緩衝區。

這些功能讓 Emacs 的縮寫系統更加靈活和強大。無論是暫時性地使用某些縮寫還是長期地儲存縮寫組態資訊, Emacs 提供了多種方式來滿足不同需求。

Raspberry Pi OS 系統管理:鍵盤宏基本應用

Raspberry Pi OS 中的 GNU Emacs 編輯器提供了強大的鍵盤宏功能,這些功能能夠幫助使用者自動化重複性的操作。以下是如何定義和使用鍵盤宏的一些基本操作。

基本操作

  1. 開始定義鍵盤宏

    • 按下 <F3> 鍵開始定義鍵盤宏。從此刻起,你輸入的所有鍵盤操作都會被記錄並執行。模式行會顯示 “Def” 表示正在定義宏。
    • 例如,按下 <F3> <Alt+ F> Bob <F4> 可以定義一個移動到下一個單詞並插入 “Bob” 的宏。
  2. 結束並執行鍵盤宏

    • 按下 <F4> 鍵可以結束宏的定義並立即執行這個宏。
    • <F4> 鍵有雙重功能:如果正在定義宏,則結束定義;如果沒有正在定義宏,則執行最新的鍵盤宏。
  3. 重複執行並追加到宏

    • 使用 <Ctrl+ U> <F3> 可以重新執行最後一次的鍵盤宏,然後追加新的鍵盤操作到其定義中。
    • 使用 <Ctrl+ U> <Ctrl+U> <F3> 可以直接追加新的鍵盤操作到最後一次的鍵盤宏,而不重新執行它。
  4. 在區域內重複執行

    • 使用 <Ctrl+ X> <Ctrl+ K> r 可以在選定區域中的每一行重複執行最後一次定義的鍵盤宏。

高階應用

快取環操作

所有已定義的鍵盤宏都會被記錄在鍵盤宏快取環中,這個快取環由所有緩衝區分享。以下是一些基本的快取環操作:

  • 執行快取環中第一個宏<Ctrl+ X> <Ctrl+K> <Ctrl+K>
  • 轉到下一個宏<Ctrl+ X> <Ctrl+K> <Ctrl+N>
  • 轉到前一個宏<Ctrl+ X> <Ctrl+K> <Ctrl+P>

這些命令可以幫助你在多個已定義的鍵盤宏之間切換和執行。

命名、儲存和呼叫鍵盤宏

  1. 命名鍵盤宏

    • 使用 <Ctrl+ X> <Ctrl+ K> n <Enter> macroname <Enter> 可以為最新定義的鍵盤宏命名,這個名稱在當前會話中有效。
    • 例如,<Ctrl+ X> <Ctrl+ K> n mymacro 可以將最近定義的宏命名為 mymacro
  2. 繫結鍵盤快捷鍵

    • 使用 <Ctrl+ X> <Ctrl+ K> b <Enter> key <Enter> 可以將最新定義的鍵盤宏繫結到一個快捷鍵上。
    • 例如,<Ctrl+ X> <Ctrl+ K> b F5 可以將最近定義的宏繫結到 F5 鍵上。
  3. 插入和呼叫已命名的鍵盤宏

    • 使用 <Alt+X> insert-kbd-macro macroname 可以將指定名稱的鍵盤宏插入當前緩衝區作為 elisp 語法。
    • 按下 F4 鍵也會呼叫最後一次定義的鍵盤宏。

儲存和重用

如果你想要在未來的 Emacs 會話中重用某個鍵盤宏,可以將它儲存到 ~/.emacs 或其他初始化檔案中:

  1. 編輯 ~/.emacs 檔案。
  2. 插入相應的 elisp 語法:<Alt+X> insert-kbd-macro macroname

這樣,每次啟動 Emacs 時都會載入並可用該鍵盤幀。透過這種方式,你可以將常用或複雜操作自動化並節省時間。

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Emacs 進階設定:自定義組態與鍵盤宏應用

package "資料視覺化流程" {
    package "資料準備" {
        component [資料載入] as load
        component [資料清洗] as clean
        component [資料轉換] as transform
    }

    package "圖表類型" {
        component [折線圖 Line] as line
        component [長條圖 Bar] as bar
        component [散佈圖 Scatter] as scatter
        component [熱力圖 Heatmap] as heatmap
    }

    package "美化輸出" {
        component [樣式設定] as style
        component [標籤註解] as label
        component [匯出儲存] as export
    }
}

load --> clean --> transform
transform --> line
transform --> bar
transform --> scatter
transform --> heatmap
line --> style --> export
bar --> label --> export

note right of scatter
  探索變數關係
  發現異常值
end note

@enduml

內容解密:

  • 起始步驟:玄貓以實際案例說明起始步驟為按下 <F3>,並從此刻起輸入所有指令皆會被記錄與執行,若需結束則按下 <F4>
  • 多次重複:玄貓透過<Ctrl + U><F3><Ctrl + U><Ctrl + U><F3>幫助使用者理解分別可重複並追加指令與只單純追加指令,以確保各程式碼作用及邏輯完整。
  • 高階應用:玄貓再解釋高階應用方面亦提供範例並配合圖表讓讀者更容易瞭解整體流程及邏輯關係。
  • 儲存與呼叫:玄貓強調透過簡單步驟可讓使用者儲存與呼叫已完成之程式碼並強調其特點在於「節省時間」,以類別比方法讓讀者易於理解。

GNU Emacs 編輯器的鍵盤繫結與自定義

在 GNU Emacs 編輯器中,鍵盤繫結與自定義是非常靈活且強大的功能。這些功能讓使用者可以根據自己的需求來調整鍵盤快捷鍵,從而提升編輯效率。以下內容將探討鍵盤繫結、命令、變數以及如何自定義這些元素。

鍵盤繫結與命令

Emacs 並不是直接將鍵盤按鍵與命令進行繫結,而是透過命令名稱來實作。每個命令都有一個名稱,這些名稱通常由幾個單片語成,並用連字號分隔,例如 insert-kbd-macroabbrev-file-name。每個命令內部都是一個 Emacs 的 Lisp 函式,透過執行這些函式來執行相應的操作。

鍵盤繫結與命令的關係

鍵盤繫結(key bindings)是將特定的鍵盤按鍵或按鍵組合與命令進行繫結。例如,<Ctrl+N> 點選後,遊標會向下移動一行,這是因為 next-line 命令被繫結到 <Ctrl+N> 上。如果我們重新繫結 <Ctrl+N>forward-word 命令,那麼 <Ctrl+N> 就會讓遊標向前移動一個單詞。

變數的作用

變數是用來儲存值的命名符號。在 Emacs 中,有些變數是用來自定義的。例如,當我們修改某些變數的值時,Emacs 的某些命令或機制會根據這些值來改變行為。

鍵對映(Keymaps)

Emacs 的命令是根據 Emacs Lisp 函式的,這些函式可以在互動模式下使用。每個函式都有一個名稱,通常由小寫字母和連字號組成。輸入事件(如字元、功能鍵和滑鼠按鈕)組成了鍵序列(key sequence),而這些序列則透過鍵對映(keymap)來賦予意義。

全域鍵對映

全域鍵對映(global keymap)是最重要的鍵對映之一,因為它始終有效。它為基本模式(Fundamental mode)定義了鍵盤快捷鍵,而這些快捷鍵通常在大多數或所有主要模式中都是共通的。每個主要模式或次要模式都可以有自己的鍵對映,以覆寫全域對映中的某些快捷鍵。

字首鍵對映

字首鍵(prefix key),如 <Ctrl+X><Esc>,有自己的鍵對映。這些對映會儲存緊接在字首鍵之後的事件的定義。例如,<Ctrl+X> 的對映就是 Control-X-prefix 符號,它的函式定義就是 <Ctrl+X> 命令的鍵對映。

自訂化功能

要自訂化 Emacs 的快捷鍵,我們需要編輯 Emacs 的初始化檔案 ~/ .emacs。以下是一些常見的自訂化方法:

;; 將 <Ctrl+N> 重新繫結到 forward-word 命令
(global-set-key (kbd "C-n") 'forward-word)

內容解密:

此段程式碼展示瞭如何將 <Ctrl+N> 錢板快捷鍵重新繫結到 forward-word 命令上。具體步驟如下:

  1. global-set-key:這是 Emacs 提供的一個函式,用來設定全域快捷鍵。
  2. (kbd "C-n"):這個函式將字串 "C-n" 轉換為 Emacs 能夠理解的快捷鍵格式。
  3. 'forward-word:這是我們要繫結到 <Ctrl+N> 的命令。