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

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中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C和性能:它仍然主導C和性能:它仍然主導May 01, 2025 am 12:14 AM

C 在性能優化方面仍然佔據主導地位,因為其低級內存管理和高效執行能力使其在遊戲開發、金融交易系統和嵌入式系統中不可或缺。具體表現為:1)在遊戲開發中,C 的低級內存管理和高效執行能力使得它成為遊戲引擎開發的首選語言;2)在金融交易系統中,C 的性能優勢確保了極低的延遲和高吞吐量;3)在嵌入式系統中,C 的低級內存管理和高效執行能力使得它在資源有限的環境中非常受歡迎。

C XML框架:為您選擇合適的一個C XML框架:為您選擇合適的一個Apr 30, 2025 am 12:01 AM

C XML框架的選擇應基於項目需求。 1)TinyXML適合資源受限環境,2)pugixml適用於高性能需求,3)Xerces-C 支持複雜的XMLSchema驗證,選擇時需考慮性能、易用性和許可證。

C#vs. C:為您的項目選擇正確的語言C#vs. C:為您的項目選擇正確的語言Apr 29, 2025 am 12:51 AM

C#适合需要开发效率和类型安全的项目,而C 适合需要高性能和硬件控制的项目。1)C#提供垃圾回收和LINQ,适用于企业应用和Windows开发。2)C 以高性能和底层控制著称,广泛用于游戏和系统编程。

c  怎麼進行代碼優化c 怎麼進行代碼優化Apr 28, 2025 pm 10:27 PM

C 代碼優化可以通過以下策略實現:1.手動管理內存以優化使用;2.編寫符合編譯器優化規則的代碼;3.選擇合適的算法和數據結構;4.使用內聯函數減少調用開銷;5.應用模板元編程在編譯時優化;6.避免不必要的拷貝,使用移動語義和引用參數;7.正確使用const幫助編譯器優化;8.選擇合適的數據結構,如std::vector。

如何理解C  中的volatile關鍵字?如何理解C 中的volatile關鍵字?Apr 28, 2025 pm 10:24 PM

C 中的volatile關鍵字用於告知編譯器變量值可能在代碼控制之外被改變,因此不能對其進行優化。 1)它常用於讀取可能被硬件或中斷服務程序修改的變量,如傳感器狀態。 2)volatile不能保證多線程安全,應使用互斥鎖或原子操作。 3)使用volatile可能導致性能slight下降,但確保程序正確性。

怎樣在C  中測量線程性能?怎樣在C 中測量線程性能?Apr 28, 2025 pm 10:21 PM

在C 中測量線程性能可以使用標準庫中的計時工具、性能分析工具和自定義計時器。 1.使用庫測量執行時間。 2.使用gprof進行性能分析,步驟包括編譯時添加-pg選項、運行程序生成gmon.out文件、生成性能報告。 3.使用Valgrind的Callgrind模塊進行更詳細的分析,步驟包括運行程序生成callgrind.out文件、使用kcachegrind查看結果。 4.自定義計時器可靈活測量特定代碼段的執行時間。這些方法幫助全面了解線程性能,並優化代碼。

C  中的chrono庫如何使用?C 中的chrono庫如何使用?Apr 28, 2025 pm 10:18 PM

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

C  中的實時操作系統編程是什麼?C 中的實時操作系統編程是什麼?Apr 28, 2025 pm 10:15 PM

C 在實時操作系統(RTOS)編程中表現出色,提供了高效的執行效率和精確的時間管理。 1)C 通過直接操作硬件資源和高效的內存管理滿足RTOS的需求。 2)利用面向對象特性,C 可以設計靈活的任務調度系統。 3)C 支持高效的中斷處理,但需避免動態內存分配和異常處理以保證實時性。 4)模板編程和內聯函數有助於性能優化。 5)實際應用中,C 可用於實現高效的日誌系統。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境