GNU Emacs 32.0.50 (9008bf64c3) のマニュアルを PLaMo 翻訳で機械翻訳したものです。誤訳を含むことがあります。原文: https://www.gnu.org/software/emacs/manual/html_node/emacs/Program-Modes.html ・ emacs-doc.conao3.com

28.1 プログラミング言語のメジャーモード

Emacsには、多くのプログラミング言語向けに専用のメジャーモード(メジャーモードを参照)が用意されています。プログラミング言語モードでは通常、式の構文、インデントの慣習的なルール、その言語の構文ハイライトの方法、および関数定義の開始位置や終了位置の特定方法が規定されています。また、プログラムのコンパイルやデバッグのための機能を備えていることも多くあります。各言語のメジャーモードはその言語の名前にちなんで命名されており、例えばC言語のメジャーモードはc-modeです。

Emacsには、Lisp、Scheme、SchemeベースのDSSSL式言語、Ada、ASM、AWK、C、C++、C#、Elixir、Fortran、Icon、IDL (CORBA)、HEEx、Java、Javascript、Lua、M4、Makefile、Metafont (TeXのフォント作成用コンパニオン)、Modula2、Object Pascal、Objective-C、Octave、Pascal、Perl、PHP、Pike、PostScript、Prolog、Python、Ruby、Simula、SQL、Tcl、TypeScript、Verilog、およびVHDL用のプログラミング言語モードが用意されています。Perl向けに推奨されているモードはCPerlモードと呼ばれます。また、一般的なGNUおよびUnixシェルのスクリプト言語や、MS-DOS/MS-Windowsの‘BAT’ファイル、JSON、DNSマスターファイル、CSS (Cascading Style Sheets)、Dockerfile、CMakeファイル、および各種設定ファイル用のモードも利用可能です。

理想的には、Emacsには編集したい各プログラミング言語に対応したメジャーモードが用意されているべきです。もしお気に入りの言語用のモードがない場合は、そのモードがEmacsに同梱されていないパッケージで実装されている可能性があります(Emacs Lispパッケージを参照)。あるいは、自ら貢献することも可能です。

Emacsが‘tree-sitter’ライブラリを用いてコンパイルされている場合、そのライブラリに基づいた複数のオプションの編集モードが提供され、これらは‘tree-sitter’が提供するインクリメンタル構文解析機能を利用します。これらのモードの名称には‘-ts-’が含まれており、例えばc-ts-modeやpython-ts-modeなどがあります。

プログラミング言語の主要なモードでは、Eglotパッケージが提供する機能を通じて言語サーバーのサービスを利用できます。EglotはLSP(言語サーバープロトコル)を実装しており、これによりEmacsは、ソースコード編集機能を拡充・拡張する言語固有の情報やサービスを受け取ることができます。Eglot: The Emacs LSP ClientのEglot Featuresを参照してください。

In most programming languages, indentation should vary from line to line to illustrate the structure of the program. Therefore, in most programming language modes, typing TAB updates the indentation of the current line (see Indentation for Programs). Furthermore, DEL is usually bound to backward-delete-char-untabify, which deletes backward treating each tab as if it were the equivalent number of spaces, so that you can delete one column of indentation without worrying whether the whitespace consists of spaces or tabs.

プログラミング言語モードに入ると、フック変数 prog-mode-hook で指定されたカスタムLisp関数が実行され、続いてそのモード自身のモードフックで指定された関数が実行されます(メジャーモードを参照)。例えば、Cモードに入ると、フック prog-mode-hook と c-mode-hook が実行されます。フックに関する情報については、フックを参照してください。

Ada(Ada ModeのAda Modeを参照)、C/C++/Objective C/Java/Corba IDL/Pike/AWK(CC ModeのCC Modeを参照)、Octave、およびVHDLの各モード向けに、個別のマニュアルが用意されています。