首頁 > 後端開發 > C++ > 使用 GNU Emacs 進行 C 語言開發

使用 GNU Emacs 進行 C 語言開發

Patricia Arquette
發布: 2024-12-28 08:28:12
原創
695 人瀏覽過

C Development with GNU Emacs

Emacs 的設計考慮到了編程,它原生支援 C、Python 和 Lisp 等語言,提供語法高亮、可自訂的編碼風格和即時錯誤檢測等高級功能。其內建的 Lisp 解釋器使 Emacs 具有高度適應性,允許使用者塑造編輯器以適應特定的工作流程或創建全新的功能。

其豐富的擴展生態系統確保它在從學術寫作到系統程式設計的各個領域保持相關性,而其可自訂的介面使用戶能夠優化其環境以獲得最大的生產力。

對於那些重視控制和多功能性的人來說,它仍然是一個可靠的選擇,證明幾十年前設計的工具仍然可以滿足當今快速發展的技術環境的需求。

為什麼選擇 Emacs?

Emacs 不僅僅是一個文字編輯器,它還是一個強大的、可擴展的程式設計、寫作和自訂平台。與 VS Code 或 IntelliJ IDEA 等現代編輯器不同,Emacs 憑藉靈活性和可編程性而蓬勃發展。它允許用戶深度自訂他們的工作流程,將其變成適合他們確切需求的環境。無論您是用 C 語言編碼、管理大型項目,甚至是寫小說,Emacs 都可以滿足您的要求。

對於新用戶來說,這可能看起來令人難以承受,但是一旦您了解了其原理,Emacs 就會成為與您一起成長的工具。本指南旨在幫助您設定一個簡化的 Emacs 環境,從基本配置到高級集成,確保您每一步都高效。

C Development with GNU Emacs

目錄

  • 建立 init.el
  • 確保 init.el 目錄正確
  • Emacs 基本配置
  • 新增 Linux 核心編碼風格模式
  • 安裝與設定 MELPA 套件管理器
  • 安裝 Clang LSP 伺服器
  • 使用 Company、Projectile、Treemacs 和 Magit 增強 C 開發
  • 新增 GNU Global、GTag 和 Helm-Gtag
  • 使用 YASnippet 作為程式碼範本
  • 配置上下文感知導航的語意
  • 實用的開發工作流程範例
  • 備忘單
  • 外掛參考
  • 其他學習資源

步驟:

建立init.el

  1. 在您的系統上開啟 Emacs。
  2. 使用指令 C-x C-f(按 Ctrl 和 x,然後按 Ctrl 和 f),開啟一個檔案進行編輯。
  3. 輸入文件路徑 ~/.emacs.d/init.el 以建立或編輯 Emacs 設定文件,然後按 Enter。
  4. 將您想要的配置加入到緩衝區中。完成後,使用 C-x C-s 儲存變更(按 Ctrl 和 x,然後按 Ctrl 和 s)。

確保 init.el 目錄正確

為了確保 Emacs 配置始終引用 init.el 檔案的正確目錄,請將以下程式碼片段新增至 init.el 檔案的頂部:

(setq user-emacs-directory "~/.emacs.d/")
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

這明確地將 user-emacs-directory 變數設為 ~/.emacs.d/,確保 Emacs 使用指定的路徑來儲存其初始化檔案和相關配置。這種方法避免了 Emacs 可能由於環境特定設定而引用不同目錄的潛在問題。

Emacs 的基本配置

這是一個簡單實用的 Emacs 設置,清晰地解釋了以幫助您理解其用途。此配置增強了可用性、簡化了介面並確保了高效的編碼體驗。

此行將所有備份檔案合併到一個目錄(~/.saves)中。它可以讓您的專案保持乾淨並避免使您的工作空間變得混亂。

(setq backup-directory-alist `(("." . "~/.saves")))
登入後複製
登入後複製
登入後複製
登入後複製

為了減少干擾,這會刪除不必要的介面元素,例如工具列、捲軸、工具提示和功能表列。更乾淨的介面可以幫助您專注於編碼,而不會產生視覺噪音。

(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
登入後複製
登入後複製
登入後複製
登入後複製

此設定停用 Emacs 啟動畫面,刪除 *scratch* 緩衝區中的預設訊息,並使系統鈴聲靜音。它從一開始就創造了一個無幹擾的環境。

(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
登入後複製
登入後複製
登入後複製
登入後複製

遊標設定為框樣式以獲得更好的可見性,並且閃爍效果被停用。啟用括號和縮排的自動配對,讓編碼更流暢、更快。

(setq user-emacs-directory "~/.emacs.d/")
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

全域顯示行號以方便導航,狀態列中顯示列號以追蹤每行中的遊標位置。

(setq backup-directory-alist `(("." . "~/.saves")))
登入後複製
登入後複製
登入後複製
登入後複製

此配置在模式行中新增了乾淨簡潔的時間顯示,以 24 小時格式顯示星期、日期和時間。排除平均負載以保持介面最小化。

(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
登入後複製
登入後複製
登入後複製
登入後複製

輸入時選擇內容會自動替換突出顯示的文本,剪貼簿整合可確保 Emacs 和其他應用程式之間的無縫複製和貼上。

(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
登入後複製
登入後複製
登入後複製
登入後複製

所有編碼均設定為 UTF-8,確保與現代文字格式相容並避免編碼問題,特別是在處理國際文字或原始程式碼時。

(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)
登入後複製
登入後複製
登入後複製

語法突出顯示透過全域字體鎖定模式全域啟用。使用視覺線模式自然地包裹長線。當遊標靠近括號時,括號會被反白顯示,並且會追蹤最近開啟的文件以便快速存取。

(global-display-line-numbers-mode t)
(column-number-mode t)
登入後複製
登入後複製

tangotango 主題提供了視覺上吸引人的配色方案。字體設定為“Consolas”,粗體,大小為 15.2 磅,以便在長時間編碼過程中提高可讀性。

(setq display-time-format "%a %b %d %R"
      display-time-interval 60
      display-time-default-load-average nil)
(display-time-mode 1)
登入後複製
登入後複製

注意:記住,我們使用 Emacs Lisp (Elisp),一種函數式程式語言來設定 Emacs。這是一個巨大的優勢,因為它允許高度靈活的可編程自訂。用強大的 Lisp 方言編寫邏輯的能力使 Emacs 不僅僅是一個編輯器,而且是一個個性化工作流程的平台。


新增 Linux 核心編碼風格模式

下面提供的配置使 Emacs 嚴格遵守 Linux 核心編碼風格,強調 8 字元製表符、K&R 大括號放置和清晰的可讀性。它包括參數清單的自訂對齊功能,可自動偵測核心相關檔案(例如,具有 Kbuild、Kconfig 或核心標頭的檔案),並自動套用適當的樣式。這確保了一致性並簡化了 Emacs 中的核心程式碼編輯。

linux-kernel-coding-style/setup 函數將Emacs 配置為特定於內核的設置,例如indent-tabs-mode、tab-width 和c-basic-offset 為8,而linux-kernel-coding-style / c-lineup-arglist-tabs-only 函數使用製表符對齊參數列表,保持符合內核指南。這些鉤子在編輯 Linux 核心檔案時會自動將樣式應用到 c-mode,從而提高生產力並遵守編碼標準。

(setq select-enable-primary nil
      select-enable-clipboard t)
(delete-selection-mode 1)
登入後複製
登入後複製

將此設定新增至您的 Emacs 初始化檔案 (init.el) 中。 Emacs 現在將自動偵測 Linux 核心檔案並套用正確的編碼風格,節省您的時間並確保符合核心的編碼標準。


安裝和設定 MELPA 套件管理器

MELPA 可以輕鬆地在 Emacs 中安裝附加軟體套件。

步驟:

  • 將 MELPA 加入 Emacs
(setq user-emacs-directory "~/.emacs.d/")
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
  • 如果軟體包不存在,則自動安裝
(setq backup-directory-alist `(("." . "~/.saves")))
登入後複製
登入後複製
登入後複製
登入後複製

更改 init.el 檔案或新增配置後,您可以刷新 Emacs,而無需關閉並重新開啟:

  1. 重新載入 init.el 檔案:

    • 在 init.el 緩衝區中按 M-x (Alt x),輸入 eval-buffer,然後按 Enter。
    • 或者,在程式碼區塊末尾使用快捷鍵 C-x C-e 來對其進行評估。
  2. 手動評估代碼:

    • 選擇要重新載入的程式碼片段,按 M-x,輸入 eval-region,然後按 Enter。

這可讓您立即套用 Emacs 配置的更改,而無需重新啟動


安裝 Clang LSP 伺服器

語言伺服器協定(LSP)提供自動完成和即時錯誤檢查等進階功能。

必要的要求

視窗

  • LLVM/Clang
    • 從官網下載LLVM安裝程式:LLVM Releases
    • 安裝過程中,請確保將 LLVM 新增至系統 PATH。

Linux

  • Debian/Ubuntu
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
登入後複製
登入後複製
登入後複製
登入後複製
  • 軟呢帽
(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
登入後複製
登入後複製
登入後複製
登入後複製

自由BSD

  • 安裝 clangd
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)
登入後複製
登入後複製
登入後複製

步驟:

  • 安裝 lsp 模式與公司模式
(global-display-line-numbers-mode t)
(column-number-mode t)
登入後複製
登入後複製
  • 如有必要,配置 clangd 的路徑
(setq display-time-format "%a %b %d %R"
      display-time-interval 60
      display-time-default-load-average nil)
(display-time-mode 1)
登入後複製
登入後複製
  • 可選:使用 lsp-ui 設定進階語法反白
(setq select-enable-primary nil
      select-enable-clipboard t)
(delete-selection-mode 1)
登入後複製
登入後複製

什麼是 LSP 以及為什麼使用它?

語言伺服器協定(LSP)彌合了編輯器和程式語言之間的差距,提供自動完成、錯誤檢查和程式碼導航等功能。這對於 C/C 開發特別有用,因為管理標頭、偵錯和導航大型程式碼庫可能具有挑戰性。

透過在 Emacs 中設定 LSP,您可以獲得以下能力:

  • 在鍵入時查看即時語法錯誤。
  • 立即跳到函數或變數定義。
  • 取得完成程式碼的智慧建議。

這使得 Emacs 能夠與現代 IDE 競爭,同時保留其輕量級和可自訂的特性。

Company、Projectile、Treemacs 和 Magit

增強 C 開發的 Emacs 設定涉及整合 CompanyProjectileTreemacsMagitCompany 為 C 程式設計提供自動完成功能,實現函數、變數和關鍵字的即時建議,使編碼更快、更有效率。透過將其配置為使用 company-clang,您可以確保針對 C 開發量身定制的強大支援。

Projectile 透過允許快速導航、文件發現和專案編譯來簡化專案管理。它與 Treemacs 無縫配對,後者提供了專案結構的可視化、基於樹的表示,幫助您直觀地找到和管理文件。最後,Magit 是 Git 的高階介面,為直接在 Emacs 中進行版本控制提供了強大的工具。

使用 C-x g 等快捷鍵,您可以互動地執行提交、分支和合併等操作,從而增強您的工作流程和生產力。以下是在 Emacs 環境中設定這些工具的完整配置:

(setq user-emacs-directory "~/.emacs.d/")
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

實際工作流程範例

讓我們看看如何在現實場景中結合使用這些工具:

  1. 開啟項目
    • 使用 C-c p f 使用 Projectile 快速尋找專案目錄中的檔案。
  2. 直觀地導航文件
    • 使用 M-0 開啟 Treemacs,然後使用箭頭鍵瀏覽您的專案結構。雙擊文件將其打開。
  3. 使用 Magit 的 Git 工作流程
    • 暫存變更:使用 C-x g 開啟 Magit,按 s 暫存檔案。
    • 提交:按 c c 透過訊息提交更改。
    • 推送:使用 P 將變更推送到遠端儲存庫。
  4. 程式碼完成
    • 編輯 .c 檔案時,部分鍵入函數名稱,然後按 TAB 鍵使用公司模式建議。

加入到文章的增強功能

  1. GNU 全域和 GTag 配置
    • 新增設定 GNU Global 和 GTags 以進行程式碼導航的說明:
(setq user-emacs-directory "~/.emacs.d/")
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
  1. Helm-Gtags 整合
    • 包含 helm-gtags 的配置以增強項目導航:
(setq backup-directory-alist `(("." . "~/.saves")))
登入後複製
登入後複製
登入後複製
登入後複製
  1. Yasnippet 模板
    • 包含 YASnippet 作為程式碼範本:
(tool-bar-mode -1)
(scroll-bar-mode -1)
(tooltip-mode -1)
(menu-bar-mode -1)
登入後複製
登入後複製
登入後複製
登入後複製
  1. 語意配置
    • 加入上下文感知程式碼完成和解析的語意:
(setq inhibit-startup-screen t
      initial-scratch-message nil
      ring-bell-function 'ignore)
登入後複製
登入後複製
登入後複製
登入後複製
  1. 額外的程式碼導航功能
    • 提及語意符號參考收集:
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)
登入後複製
登入後複製
登入後複製

這些新增內容透過為 Emacs 中的進階導航、專案管理和自動化工具提供支援來增強現有內容,使文章與現代 C/C 開發的最佳實踐保持一致。


備忘錄

C Development with GNU Emacs

C Development with GNU Emacs


外掛參考

  • lsp-mode:語言伺服器協定支援自動完成和錯誤檢查。 GitHub
  • 公司模式:上下文感知自動完成。 GitHub
  • lsp-ui:lsp 模式的 UI 增強。 GitHub
  • projectile:專案導航與管理。 GitHub
  • treemacs:基於樹的檔案瀏覽器。 GitHub
  • magit:Emacs 的 Git 介面。 GitHub
  • ggtags:程式碼導覽的 GNU 全域整合。 GitHub
  • helm-gtags:使用 GNU Global 和 Helm 進行導航。 GitHub
  • yasnippet:可重複使用程式碼的片段管理。 GitHub
  • 語意:高階程式碼解析與導覽。 GNU 統一標準

額外的學習資源

  • Emacs for Beginners:適合初學者的設定和使用 Emacs 指南。關聯
  • Emacs Lisp 簡介:了解如何使用 Lisp 自訂 Emacs。關聯
  • Linux Kernel Coding Style:核心編碼標準的官方文件。關聯
  • 設定 Emacs 進行 C 開發:設定 Emacs 進行 C/C 程式設計的實用指南。關聯

以上是使用 GNU Emacs 進行 C 語言開發的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板