使用 GNU Emacs 進行 C 語言開發
Emacs 的設計考慮到了編程,它原生支援 C、Python 和 Lisp 等語言,提供語法高亮、可自訂的編碼風格和即時錯誤檢測等高級功能。其內建的 Lisp 解釋器使 Emacs 具有高度適應性,允許使用者塑造編輯器以適應特定的工作流程或創建全新的功能。
其豐富的擴展生態系統確保它在從學術寫作到系統程式設計的各個領域保持相關性,而其可自訂的介面使用戶能夠優化其環境以獲得最大的生產力。
對於那些重視控制和多功能性的人來說,它仍然是一個可靠的選擇,證明幾十年前設計的工具仍然可以滿足當今快速發展的技術環境的需求。
為什麼選擇 Emacs?
Emacs 不僅僅是一個文字編輯器,它還是一個強大的、可擴展的程式設計、寫作和自訂平台。與 VS Code 或 IntelliJ IDEA 等現代編輯器不同,Emacs 憑藉靈活性和可編程性而蓬勃發展。它允許用戶深度自訂他們的工作流程,將其變成適合他們確切需求的環境。無論您是用 C 語言編碼、管理大型項目,甚至是寫小說,Emacs 都可以滿足您的要求。
對於新用戶來說,這可能看起來令人難以承受,但是一旦您了解了其原理,Emacs 就會成為與您一起成長的工具。本指南旨在幫助您設定一個簡化的 Emacs 環境,從基本配置到高級集成,確保您每一步都高效。
目錄
- 建立 init.el
- 確保 init.el 目錄正確
- Emacs 基本配置
- 新增 Linux 核心編碼風格模式
- 安裝與設定 MELPA 套件管理器
- 安裝 Clang LSP 伺服器
- 使用 Company、Projectile、Treemacs 和 Magit 增強 C 開發
- 新增 GNU Global、GTag 和 Helm-Gtag
- 使用 YASnippet 作為程式碼範本
- 配置上下文感知導航的語意
- 實用的開發工作流程範例
- 備忘單
- 外掛參考
- 其他學習資源
步驟:
建立init.el
- 在您的系統上開啟 Emacs。
- 使用指令 C-x C-f(按 Ctrl 和 x,然後按 Ctrl 和 f),開啟一個檔案進行編輯。
- 輸入文件路徑 ~/.emacs.d/init.el 以建立或編輯 Emacs 設定文件,然後按 Enter。
- 將您想要的配置加入到緩衝區中。完成後,使用 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,而無需關閉並重新開啟:
-
重新載入 init.el 檔案:
- 在 init.el 緩衝區中按 M-x (Alt x),輸入 eval-buffer,然後按 Enter。
- 或者,在程式碼區塊末尾使用快捷鍵 C-x C-e 來對其進行評估。
-
手動評估代碼:
- 選擇要重新載入的程式碼片段,按 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 設定涉及整合 Company、Projectile、Treemacs 和 Magit。 Company 為 C 程式設計提供自動完成功能,實現函數、變數和關鍵字的即時建議,使編碼更快、更有效率。透過將其配置為使用 company-clang,您可以確保針對 C 開發量身定制的強大支援。
Projectile 透過允許快速導航、文件發現和專案編譯來簡化專案管理。它與 Treemacs 無縫配對,後者提供了專案結構的可視化、基於樹的表示,幫助您直觀地找到和管理文件。最後,Magit 是 Git 的高階介面,為直接在 Emacs 中進行版本控制提供了強大的工具。
使用 C-x g 等快捷鍵,您可以互動地執行提交、分支和合併等操作,從而增強您的工作流程和生產力。以下是在 Emacs 環境中設定這些工具的完整配置:
(setq user-emacs-directory "~/.emacs.d/")
實際工作流程範例
讓我們看看如何在現實場景中結合使用這些工具:
-
開啟項目:
- 使用 C-c p f 使用 Projectile 快速尋找專案目錄中的檔案。
-
直觀地導航文件:
- 使用 M-0 開啟 Treemacs,然後使用箭頭鍵瀏覽您的專案結構。雙擊文件將其打開。
-
使用 Magit 的 Git 工作流程:
- 暫存變更:使用 C-x g 開啟 Magit,按 s 暫存檔案。
- 提交:按 c c 透過訊息提交更改。
- 推送:使用 P 將變更推送到遠端儲存庫。
-
程式碼完成:
- 編輯 .c 檔案時,部分鍵入函數名稱,然後按 TAB 鍵使用公司模式建議。
加入到文章的增強功能
-
GNU 全域和 GTag 配置:
- 新增設定 GNU Global 和 GTags 以進行程式碼導航的說明:
(setq user-emacs-directory "~/.emacs.d/")
-
Helm-Gtags 整合:
- 包含 helm-gtags 的配置以增強項目導航:
(setq backup-directory-alist `(("." . "~/.saves")))
-
Yasnippet 模板:
- 包含 YASnippet 作為程式碼範本:
(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)
-
額外的程式碼導航功能:
- 提及語意符號參考收集:
(setq cursor-type 'box blink-cursor-mode nil electric-pair-mode 1 electric-indent-mode 1)
這些新增內容透過為 Emacs 中的進階導航、專案管理和自動化工具提供支援來增強現有內容,使文章與現代 C/C 開發的最佳實踐保持一致。
備忘錄
外掛參考
- 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中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

C#和C 的歷史與演變各有特色,未來前景也不同。 1.C 由BjarneStroustrup在1983年發明,旨在將面向對象編程引入C語言,其演變歷程包括多次標準化,如C 11引入auto關鍵字和lambda表達式,C 20引入概念和協程,未來將專注於性能和系統級編程。 2.C#由微軟在2000年發布,結合C 和Java的優點,其演變注重簡潔性和生產力,如C#2.0引入泛型,C#5.0引入異步編程,未來將專注於開發者的生產力和雲計算。

C#和C 的学习曲线和开发者体验有显著差异。1)C#的学习曲线较平缓,适合快速开发和企业级应用。2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

靜態分析在C 中的應用主要包括發現內存管理問題、檢查代碼邏輯錯誤和提高代碼安全性。 1)靜態分析可以識別內存洩漏、雙重釋放和未初始化指針等問題。 2)它能檢測未使用變量、死代碼和邏輯矛盾。 3)靜態分析工具如Coverity能發現緩衝區溢出、整數溢出和不安全API調用,提升代碼安全性。

C 通過第三方庫(如TinyXML、Pugixml、Xerces-C )與XML交互。 1)使用庫解析XML文件,將其轉換為C 可處理的數據結構。 2)生成XML時,將C 數據結構轉換為XML格式。 3)在實際應用中,XML常用於配置文件和數據交換,提升開發效率。

使用C 中的chrono庫可以讓你更加精確地控制時間和時間間隔,讓我們來探討一下這個庫的魅力所在吧。 C 的chrono庫是標準庫的一部分,它提供了一種現代化的方式來處理時間和時間間隔。對於那些曾經飽受time.h和ctime折磨的程序員來說,chrono無疑是一個福音。它不僅提高了代碼的可讀性和可維護性,還提供了更高的精度和靈活性。讓我們從基礎開始,chrono庫主要包括以下幾個關鍵組件:std::chrono::system_clock:表示系統時鐘,用於獲取當前時間。 std::chron

C 的未來將專注於並行計算、安全性、模塊化和AI/機器學習領域:1)並行計算將通過協程等特性得到增強;2)安全性將通過更嚴格的類型檢查和內存管理機制提升;3)模塊化將簡化代碼組織和編譯;4)AI和機器學習將促使C 適應新需求,如數值計算和GPU編程支持。

1)c relevantduetoItsAverity and效率和效果臨界。 2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

DMA在C 中是指DirectMemoryAccess,直接內存訪問技術,允許硬件設備直接與內存進行數據傳輸,不需要CPU干預。 1)DMA操作高度依賴於硬件設備和驅動程序,實現方式因係統而異。 2)直接訪問內存可能帶來安全風險,需確保代碼的正確性和安全性。 3)DMA可提高性能,但使用不當可能導致系統性能下降。通過實踐和學習,可以掌握DMA的使用技巧,在高速數據傳輸和實時信號處理等場景中發揮其最大效能。
