ホームページ >バックエンド開発 >C++ >GNU Emacs による C 開発

GNU Emacs による C 開発

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-28 08:28:12696ブラウズ

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 設定ファイルを作成または編集するには、ファイル パス ~/.emacs.d/init.el を入力し、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 セットアップであり、その目的を理解するのに役立つように明確に説明されています。この構成により、使いやすさが向上し、インターフェイスが簡素化され、効率的なコーディング エクスペリエンスが確保されます。

この行は、すべてのバックアップ ファイルを 1 つのディレクトリ (~/.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-font-lock-mode を使用してグローバルに有効になります。長い行は、visual-line-mode を使用すると自然に折り返されます。カーソルが括弧の近くにあると括弧が強調表示され、すぐにアクセスできるように最近開いたファイルが追跡されます。

(global-display-line-numbers-mode t)
(column-number-mode t)

tangotango テーマは、視覚的に魅力的な配色を提供します。フォントは、長時間のコーディング セッションでも読みやすいように、太字の太さとサイズ 15.2 pt の「Consolas」に設定されています。

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

: Emacs の設定には関数型プログラミング言語である Emacs Lisp (Elisp) を使用していることを思い出してください。これは、非常に柔軟でプログラム可能なカスタマイズを可能にするため、大きな利点です。強力な Lisp 方言でロジックを記述する機能により、Emacs は単なるエディターではなく、パーソナライズされたワークフローのためのプラットフォームになります。


Linux カーネルコーディングスタイルパターンの追加

以下に示す設定は、Linux カーネルのコーディング スタイルに厳密に準拠するように Emacs をセットアップし、8 文字のタブ、K&R 中括弧の配置、および明確な読みやすさを強調します。これには、引数リストのカスタム位置合わせ機能、カーネル関連ファイル (Kbuild、Kconfig、またはカーネル ヘッダーを含むファイルなど) の自動検出が含まれており、適切なスタイルを自動的に適用します。これにより、一貫性が確保され、Emacs でのカーネル コードの編集が簡素化されます。

linux-kernel-coding-style/setup 関数は、indent-tabs-mode、tab-width、c-basic-offset などのカーネル固有の設定を Emacs に設定します。一方、linux-kernel-coding-style/ c-lineup-arglist-tabs-only 関数は、タブを使用して引数リストを整列させ、カーネル ガイドラインへの準拠を維持します。これらのフックは、Linux カーネル ファイルの編集時にスタイルを C モードに自動的に適用し、生産性とコーディング標準への準拠を向上させます。

(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:
    • 公式 Web サイトから 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)

FreeBSD

  • clangd をインストールします:
(setq cursor-type 'box
      blink-cursor-mode nil
      electric-pair-mode 1
      electric-indent-mode 1)

手順:

  • lsp モードと company-mode をインストールします:
(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 を使用するのでしょうか?

言語サーバー プロトコル (LSP) は、エディターとプログラミング言語の間のギャップを埋め、オートコンプリート、エラー チェック、コード ナビゲーションなどの機能を提供します。これは、ヘッダーの管理、デバッグ、大規模なコードベースのナビゲートが困難な C/C 開発に特に役立ちます。

Emacs で LSP を設定すると、次のことが可能になります。

  • 入力中にリアルタイムの構文エラーを表示します。
  • 関数または変数の定義に即座にジャンプします。
  • コードを完成させるためのインテリジェントな提案にアクセスします。

これにより、Emacs は軽量でカスタマイズ可能な性質を維持しながら、最新の IDE と競合することができます。

会社、投射物、Treemacs、および Magit

C 開発用に Emacs セットアップを強化するには、CompanyProjectileTreemacs、および Magit の統合が含まれます。 Company は、C プログラミングのオートコンプリートを提供し、関数、変数、キーワードのリアルタイムの提案を可能にし、コーディングをより迅速かつ効率的にします。 company-clang を使用するように構成すると、C 開発に合わせた堅牢なサポートが保証されます。

Projectile は、素早いナビゲーション、ファイル検出、プロジェクトのコンパイルを可能にすることで、プロジェクト管理を合理化します。 Treemacs とシームレスに連携し、プロジェクト構造をツリーベースで視覚的に表現し、ファイルを直感的に見つけて管理できるようにします。最後に、Magit は Git の高度なインターフェイスであり、Emacs 内で直接バージョン管理を行うための強力なツールを提供します。

C-x g などのショートカットを使用すると、コミット、分岐、マージなどの操作を対話的に実行でき、ワークフローと生産性が向上します。 Emacs 環境でこれらのツールをセットアップするための完全な構成は次のとおりです:

(setq user-emacs-directory "~/.emacs.d/")

実践的なワークフロー例

実際のシナリオでこれらのツールをどのように組み合わせることができるかを見てみましょう:

  1. プロジェクトを開く:
    • Projectile を使用してプロジェクト ディレクトリ内のファイルをすばやく見つけるには、C-c p f を使用します。
  2. ファイルを視覚的にナビゲートします:
    • M-0 で Treemacs を開き、矢印キーを使用してプロジェクト構造を参照します。ファイルをダブルクリックして開きます。
  3. Magit を使用した Git ワークフロー:
    • ステージ変更: C-x g で Magit を開き、s を押してファイルをステージングします。
    • コミット: c c を押して、メッセージ付きで変更をコミットします。
    • プッシュ: P を使用して変更をリモート リポジトリにプッシュします。
  4. コード補完:
    • .c ファイルの編集中に、関数名の一部を入力し、TAB キーを押してカンパニー モードの提案を使用します。

記事に追加する機能強化

  1. GNU グローバルと GTags の構成:
    • コード ナビゲーション用に GNU Global と GTag をセットアップする手順を追加します。
(setq user-emacs-directory "~/.emacs.d/")
  1. Helm と Gtag の統合:
    • プロジェクトのナビゲーションを強化するために 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. 追加のコード ナビゲーション機能:
    • 参照収集のために semantic-symref について言及します。
(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
  • company-mode: コンテキスト認識型オートコンプリート。 GitHub
  • lsp-ui: lsp-mode の UI の機能強化。 GitHub
  • projectile: プロジェクトのナビゲーションと管理。 GitHub
  • treemacs: ツリーベースのファイルエクスプローラー。 GitHub
  • magit: Emacs 用の Git インターフェイス。 GitHub
  • ggtags: コード ナビゲーションのための GNU グローバル統合。 GitHub
  • helm-gtags: GNU Global と Helm によるナビゲーション。 GitHub
  • yasnippet: 再利用可能なコードのスニペット管理。 GitHub
  • セマンティック: 高度なコード解析とナビゲーション。 GNU CEDET

追加の学習リソース

  • 初心者向け Emacs: Emacs のセットアップと使用についての初心者向けガイド。リンク
  • Emacs Lisp の紹介: Lisp を使用して Emacs をカスタマイズする方法を学びます。リンク
  • Linux カーネル コーディング スタイル: カーネル コーディング標準に関する公式ドキュメント。リンク
  • C 開発用の Emacs のセットアップ: C/C プログラミング用に Emacs を設定するための実践的なガイド。リンク

以上がGNU Emacs による C 開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。