「Emacs」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(Pkg/AUR テンプレートの更新)
(→‎派生: 情報を更新)
 
(4人の利用者による、間の34版が非表示)
8行目: 8行目:
 
[[sr:Emacs]]
 
[[sr:Emacs]]
 
[[zh-hans:Emacs]]
 
[[zh-hans:Emacs]]
[[Wikipedia:ja:Emacs|Emacs]] は拡張性があり、カスタマイズ可能な、セルフドキュメント方式のリアルタイム表示エディタです。Emacs のコアには、多数の Emacs の内蔵機能や拡張を実装するのに使われている言語である、[[Wikipedia:ja:Emacs Lisp|Emacs Lisp]] のインタプリタが存在します。GNU Emacs 22 から GTK がデフォルトの X ツールキットとして使われていますが、CLI 環境でも負けず劣らずに機能します。Emacs のテキスト編集機能はしばしば [[vim]] と比較されることがあります。
+
[[Wikipedia:ja:Emacs|Emacs]] は拡張性があり、カスタマイズ可能な、セルフドキュメント方式のリアルタイム表示エディタです。Emacs のコアには、多数の Emacs の内蔵機能や拡張を実装するのに使われている言語である、[[Wikipedia:ja:Emacs Lisp|Emacs Lisp]] のインタプリタが存在します。GNU Emacs 22 から GTK がデフォルトの X ツールキットとして使われていますが、CLI 環境でも負けず劣らずに機能します。
   
 
== インストール ==
 
== インストール ==
   
  +
次のパッケージのいずれかを [[インストール]] して下さい。:
Emacs には複数の種類があります (時々 ''emacsen'' と呼ばれます)。その中で最も一般的なのは [https://www.gnu.org/software/emacs/ GNU Emacs] です。
 
   
  +
* {{Pkg|emacs}} - 安定したリリース、
{{Pkg|emacs}} パッケージを[[インストール]]してください。いつもターミナルで作業をする場合は、GTK+ がいらない {{Pkg|emacs-nox}} の方が良いでしょう (サウンドなどの装飾的な機能もありません)。
 
  +
* {{Pkg|emacs-nativecomp}} - [https://www.emacswiki.org/emacs/GccEmacs ネイティブコンパイル] が有効
ただしテキストバージョンにはいくつか欠点が存在します: サポートしている色やフォント処理の機能 (実行中にサイズを変更したり、単一の文章で複数のサイズを使うなど) が少なくなっています。その上、emacs-nox には Speedbar や GUD (デバッグ環境) などの高度な機能について制限があり、複雑なフェイスを使おうとするとやや遅くなります ("フェイス"とは Emacs におけるテキストの外観のことです)。
 
  +
* {{Pkg|emacs-nox}} - X11 サポートなし、
  +
* {{Pkg|emacs-wayland}} - ネイティブコンパイルと PGTK が有効になっています。
   
  +
他のバリエーションも検索できます。例として、{{AUR|emacs-git}} は GNU Emacs の開発ブランチを提供します。
極めて重い依存パッケージをインストールすることなく Emacs の拡張機能を全て完全に使いたい場合、必要に応じて PKGBUILD をカスタマイズすることができます。{{ic|gtk3}} 以外を使えば gconf を排除することが可能です。画像や音声のサポートも同じように無効にできます。Emacs のソースフォルダで {{ic|./configure --help}} を実行して利用可能なオプションを表示してみて下さい。
 
{{hc|PKGBUILD|<nowiki>
 
# ...
 
./configure --prefix=/usr --sysconfdir=/etc --libexecdir=/usr/lib \
 
--localstatedir=/var --with-x-toolkit=gtk2 --with-xft \
 
--without-gconf --without-sound
 
# ...
 
</nowiki>}}
 
 
他に {{AUR|xemacs}}{{Broken package link|パッケージが存在しません}} もよく使われています。
 
   
 
== Emacs の実行 ==
 
== Emacs の実行 ==
   
 
emacs を起動する前に、終了の方法を知っておきましょう (特にターミナルで実行する場合): {{ic|Ctrl+x}}{{ic|Ctrl+c}} キーシーケンスを使って下さい。
 
emacs を起動する前に、終了の方法を知っておきましょう (特にターミナルで実行する場合): {{ic|Ctrl+x}}{{ic|Ctrl+c}} キーシーケンスを使って下さい。
 
=== 通常の方法 ===
 
   
 
Emacs を起動するには次を実行:
 
Emacs を起動するには次を実行:
142行目: 133行目:
   
 
GUI の Emacs のスタートメニューエントリなども emacs ではなく emacsclient が使われるように変更することを推奨します。
 
GUI の Emacs のスタートメニューエントリなども emacs ではなく emacsclient が使われるように変更することを推奨します。
  +
  +
== ヘルプを見る ==
  +
  +
Emacs にはチュートリアルが組み込まれており、スプラッシュ画面の最初のリンクをクリックし、メニューから ''Help->Emacs Tutorial'' を選択するか、{{ic|C-h t}} を押してアクセスすることができます。
  +
  +
Emacsは設計上、セルフ・ドキュメンテーションです。そのため、例えば特定のコマンドの名前やキーバインドを決定するために、非常に多くの情報を利用することができます。{{ic|C-h C-h}} ですべてのコンテキスト・ヘルプのバインディングを見ることができます。
  +
  +
Emacs にはリファレンスカードも含まれており、初心者にも上級者にも便利です。{{ic|/usr/share/emacs/<バージョン>/etc/refcards/}} (<バージョン> はあなたの emacs のバージョンに置き換えます) をご覧ください。
  +
  +
=== マニュアル ===
  +
  +
Emacsを本当に使いこなしたいのであれば、やはり公式のマニュアルが一番おすすめです。
  +
  +
* Emacs: コンプリート Emacs ユーザーマニュアル
  +
* Emacs FAQ
  +
* Emacs Lisp: イントロ プログラミング言語を使ったことがない人向け
  +
* Elisp: 既にプログラミング言語に慣れている人向け
  +
  +
[https://www.gnu.org/software/emacs/manual/ GNU.org] から PDF としてアクセスすることもできますし、組み込まれた ''info'' リーダーのおかげで Emacs 自体から直接アクセスすることも可能です。{{ic|C-h i}} を使ってください。 ブックを選ぶには {{ic|m}} を押してください。
  +
  +
一部のユーザーは、便利なショートカット、ウィンドウ幅に合わせた段落、現在の画面解像度に合わせたフォントのために、''info'' を使用してブックを読むことを好みます。目に刺激が少ないと感じる人もいます。最後に、本から任意の Emacs バッファーにコンテンツを簡単にコピーでき、例から直接 Lisp コードスニペットを実行することもできます。
  +
  +
詳しくは '''Info''' を読むといいかもしれません。{{ic|C-h i m info <RET>}} です。
  +
情報モード中に {{ic|?}} を押すと、ショートカットのクイックリストが表示されます。
  +
  +
== 設定 ==
  +
  +
Emacs の大きな特徴の一つは、その拡張性と設定のしやすさです。Emacs にはカスタマイズエンジンが組み込まれています。カスタマイズのオプションのリストを表示するには、{{ic|M-x customize}} を実行します。このインタフェースの使い方については Easy Customization 情報ノードを参照してください。{{ic|(info "(emacs) Easy Customization")}} をご覧下さい。カスタマイズを適用したら 1つの Emacs セッションに対してのみ設定することも、[[Emacs#設定ファイル|設定ファイル]] に保存して Emacs セッションにまたがって保存することもできます。"適用して保存" を選択した場合、カスタマイズ・インタフェースが適用されることに注意してください。
  +
  +
Emacs を起動するとき、通常は ''初期化ファイル'' 、略して ''initファイル'' から Lisp プログラムを読み込もうとします。 このファイルは、もし存在すれば、あなたのために Emacs を初期化する方法を指定します。 Emacs は '~/.emacs', '~/.emacs.el', '~/.emacs.d/init.el', または '~/.config/emacs/init.el' というファイル名であなたの init ファイルを検索します。詳しくは info ノードの ''初期化ファイル'' を見て下さい。参照:{{ic| (info "(emacs) Init File")}}
   
 
== クイックスタート ==
 
== クイックスタート ==
207行目: 228行目:
 
=== kill と yank とリージョン ===
 
=== kill と yank とリージョン ===
   
  +
リージョンとは、2点間にあるテキストです。2点のうちの1つは、''マーク'' と呼ばれ、もう1つはポイントです。 '''C-<SPC>''' によってマークの位置がセットされ、その後でポイントが移動することでリージョンが作られます。GNU Emacs 23.1 以降、リージョンはデフォルトで可視化されます。リージョン上で動作する多くのコマンドがあり、もっともよく使われるコマンドに ''killing'' コマンドがあります。
A region is a section of text between two positions. One of those positions is referred to as ''mark'', and the other is point. '''C-<SPC>''' is used to set the position of mark, after which point can be moved to create a region. Within GNU Emacs 23.1 onwards, this region is visible by default. There are a number of commands which act upon regions, among the most commonly used are ''killing'' commands.
 
   
  +
Emacs では、カット&ペーストはそれぞれ、''kill'' と ''yank'' と呼ばれます。1文字以上の文字を削除するコマンド( '''C-k''' や '''M-d''' といった上で記述したコマンドも含めて)は、実際にテキストをカットし、''kill-ring'' として知られるものに追加します。kill-ring は、単に kill されたテキストのリストです。kill-ring は、デフォルトでは直近60個の kill されたテキストを保存します。kill に成功すると、リストの先頭に接続されて保存されます。
In Emacs, cut and paste are referred to as ''kill'' and ''yank'', respectively. Many commands which delete more than one character (including many of those in the above section, such as '''C-k''' and '''M-d''') actually cut the text and append it to what is known as the ''kill-ring''. The kill-ring is simply a list of killed text. The kill-ring stores up to the last 60 kills by default. Successive kills are concatenated and stored at the head of the list.
 
   
'''C-w''' and '''M-w''' can be used to kill and copy a region, respectively.
+
'''C-w''' '''M-w''' によって、それぞれリージョンの kill とコピーができます。
   
  +
kill されたテキストをバッファに挿入する('yanking' として知られます)ためには、'''C-y''' を使います。 '''C-y''' は、複数回使用することで、繰り返しテキストを yank できます。前述の通り、以前の kill は、リストに保存されます。しかし、'''C-y''' は、そのうち最初のものしか取得しません。それより前の kill は、'''M-y''' によってアクセスすることができます。これによって、'yank' で挿入されたテキストをリストの先頭に移動させます。 '''M-y''' は '''C-y''' に続けて使われなければならず、kill-ring をたどるために何度でも使えます。
To insert killed text into a buffer (known as 'yanking'), use '''C-y'''. '''C-y''' can be used multiple times in succession to yank text repeatedly. As mentioned, previous kills are stored in a list, however '''C-y''' only retrieves the first of them. The earlier kills can be accessed via '''M-y'''. This will remove the text inserted by 'yank' initially, replacing it with the text killed earlier. '''M-y''' must be used immediately following '''C-y''' and can be used in many times succession to cycle through the kill-ring.
 
   
 
=== 検索と置換 ===
 
=== 検索と置換 ===
   
  +
文字列を検索することは、テキストの編集において一般的な作業です。検索は、'''C-s''' (後方検索) または '''C-r''' (前方検索) によって実行されます。これらのコマンドは、検索する文字列を入力するプロンプトを表示します。検索は1文字入力するごとに実行され、タイプごとに次に(あるいは前に)一致した文字列にマッチします。次の検索結果に行くには C-s を、前の検索結果に行くには C-r を押します。 もし探しているものが見つかったのであれば、'''<RET>''' を押すことで検索を終了できます。一方、検索を開始した場所に戻りたければ '''C-g ''' を押します。
Searching for a string is common practise in text-editing. This can be performed using '''C-s''' (to search forward) or '''C-r''' (to search backward). These commands prompt for the string for which to search. Searching is performed incrementally, and so it will match the next (or previous) occurrence as you type. To move to the next or previous match, press '''C-s''' or '''C-r''' again, respectively. Once a match has been found, '''<RET>''' can be used to end the search. Alternatively, should you wish to return to the location you initiated the search, use '''C-g'''.
 
   
  +
いったん検索が完了すると (たとえば '''C-g''' 等で中断していない場合)、検索された文字列は、次の検索のデフォルト検索文字となります。検索された文字を使用するには、後方検索なら '''C-s C-s''' , 前方検索なら '''C-r C-r''' をそれぞれ押します。
Once a search is completed (i.e., was not aborted with '''C-g''' or similar), the string which was searched for will be the default for any following search. To make use of this, press '''C-s C-s''' or '''C-r C-r''' to search forward or backward again, respectively.
 
   
  +
I-search には、いくつかの有用なコマンドがあります。 '''M-e''' によって、検索文字列の編集が可能です。 '''M-c''' によって、大文字小文字を区別するか、しないかを切り替えることができます。
I-search has some useful commands. Use '''M-e''' to edit the search field. Use
 
'''M-c''' to toggle case-sensitive matching.
 
   
  +
正規表現検索は、検索の開始コマンド以外、上述の検索と同様に動作します。 '''C-M-s''' あるいは '''C-M-r''' によって、それぞれ正規表現による後方検索、前方検索を開始します。いったん正規表現検索を開始すると、文字列検索と同様に '''C-s''' と '''C-r''' を後方検索、前方検索に使用することができます。
Regular Expression searches behave identically to the searching described above except for the command to initiate the search. Use '''C-M-s''' or '''C-M-r''' to initiate a regexp search forward or backward, respectively. Once a Regular Expression search has commenced, '''C-s''' and '''C-r''' can be used to search forward or backward, just as with string searches.
 
   
  +
検索に加え、文字列や正規表現を置換することができます(それぞれ '''M-%''' および '''C-M-%''' によって実行されます)。元のテキストと変換後のテキスト用にプロンプトが表示され、それからハイライトされた一致箇所に対する動作のために別のプロンプトが表示されます。多くのオプションが使用できますが(使用できるオプションの完全なリストは '''?''' を押してください)、もっとも一般的に使われるのは、変換を実行する '''y''' と、スキップする '''n''' 、そしてハイライトされている文字列を含め、以降すべての一致に対して変換する '''!''' になります。
In addition to searching, it is also possible to perform string and regular expression replacement (via '''M-%''' and '''C-M-%''', respectively). Prompts are provided for both the initial and replacement text, and then another prompt for the action to perform on the highlighted match. Although many options are available (the full list is available by pressing '''?'''), the most commonly used are '''y''', to perform replacement, '''n''', to skip this match, and '''!''' to replace this, and all following matches.
 
   
 
=== 前置引数 ===
 
=== 前置引数 ===
   
  +
'''C-u''' は、'universal-argument' コマンドに対応づけられています。'universal-argument' を渡すことによって、より多くの情報をコマンドに提供できます(この情報を '前置引数' と呼びます)。たとえば
'''C-u''' corresponds to the 'universal-argument' command. Providing a 'universal-argument' is a way to provide more information to a command (this information is referred to as a 'prefix argument'). For instance
 
   
 
C-u 80 %
 
C-u 80 %
   
  +
は、%記号の行を挿入します。また、
will insert a line of percent signs. Or
 
   
 
C-u 4 M-d
 
C-u 4 M-d
   
  +
は4単語を削除します。この場合、'''M-d''' によって実行されるコマンドへ、要求する単語の数を渡しています。
Will delete 4 words. In this case, we provided the amount of words desired to the command invoked by '''M-d'''.
 
   
  +
universal argument は、'''M-<数字>''' によって少し早く入力することができます。
You can make it a little quicker by using the equivalent '''M-<number>''' as universal argument.
 
   
 
M-80 %
 
M-80 %
246行目: 266行目:
 
=== インデント ===
 
=== インデント ===
   
  +
インデントは、1行をインデントする '''<TAB>''' やリージョンをインデントする '''C-M-\''' によって実行されます。リージョンが有効(''たとえば''ハイライトされている)場合、'''<TAB>''' はリージョンもインデントします。
Indentation is usually performed with either '''<TAB>''', to indent a single line, or with '''C-M-\''', to indent a region. If the region is active (''i.e.'' highlighted), then '''<TAB>''' will also indent region.
 
   
  +
テキストがどのようにインデントされるかは、正確には有効になっている ''メジャーモード'' に依ります。メジャーモードは、しばしば特定の種類のテキストをインデントするときに特化したインデントスタイルを定義します。(より詳しくは [[#モード|Modes]] を見てください。)
Exactly how text is indented usually depends on the ''major-mode'' which is active. Major-modes often define indentation styles specialising in indenting a certain type of text. (See [[#モード|Modes]] for more information.)
 
   
  +
いくつかの場合、ファイルタイプに対して適したメジャーモードがありません。その場合、手動でのインデントが必要になります。リージョンを作成( [[#kill と yank とリージョン|kill と yank とリージョン]] 参照)し、'''C-u <n> C-x <TAB>''' でインデントを実行してください。(ここで、'<n>' はリージョンに含まれるテキストがインデントされる列の数です。)例えば、
In some cases, a suitable major-mode may not exist for a file type, in which case, manual indentation may be necessary. Create a region (see [[#kill と yank とリージョン|Killing, yanking and regions]]) then perform indentation with '''C-u <n> C-x <TAB>''' (where '<n>' is the number of columns which the text within the region should be indented). For example:
 
   
  +
リージョンのインデントを4列追加する:
Increase the region's indentation by four columns:
 
   
 
C-u 4 C-x <TAB>
 
C-u 4 C-x <TAB>
   
  +
リージョンのインデントを2列減らす:
Decrease the region's indentation by two columns.
 
   
 
C-u -2 C-x <TAB>
 
C-u -2 C-x <TAB>
262行目: 282行目:
 
=== ウィンドウとフレーム ===
 
=== ウィンドウとフレーム ===
   
  +
Emacs は、多くのファイルを同時に編集するために便利であるよう設計されています。これは、Emacs のインタフェースを3つの階層にわけることで実現されています。つまり、すでに紹介済みのバッファ、''ウィンドウ'' と ''フレーム'' です。
Emacs is designed for convenient editing of many files at a time. This is achieved by dividing the Emacs interface into three levels. Namely, buffers, which have already been introduced, as well as ''windows'' and ''frames''.
 
   
  +
'''ウィンドウ''' とは、Emacsでバッファを表示している場所のことです。1つのウィンドウは、一度に1つのバッファしか表示できません。しかし、1つのバッファは複数のウィンドウに表示できます。それぞれのウィンドウの下には、''モードライン'' があります。モードラインには、そのバッファの情報が表示されています。
A ''window'' is a viewport used for displaying a buffer. A window can display only one buffer at a time, however one buffer can be displayed in many windows. Beneath each window exists a ''mode-line'', which displays information for that buffer.
 
   
  +
'''フレーム''' とは、Emacs の"ウィンドウ"(一般的な意味。たとえば最近のデスクトップパラダイムの意味での 'ウィンドウ')です。フレームには、タイトルバー、メニューバー、1つ以上の 'ウィンドウ' (Emacs 的な意味。たとえば上で定義した 'ウィンドウ') が含まれます。
A ''frame'' is an Emacs "window" (in standard terminology. i.e., 'window' in the sense of the modern desktop paradigm) which contains a title bar, menu bar and one or more 'windows' (in Emacs terminology. i.e., the above definition of 'window').
 
   
  +
以降では、これらの単語は Emacs に存在するものでの定義として使用します。
From now on the definition of these terms as they exist in Emacs will be used.
 
   
  +
ウィンドウを水平あるいは垂直に分割するには、それぞれ '''C-x 2''' あるいは '''C-x 3''' を使います。これは、現在のフレームにもう1つのウィンドウを生成する効果があります。複数のウィンドウ間を巡回するには、'''C-x o''' を使用します。
To split the window horizontally or vertically use '''C-x 2''' or '''C-x 3''', respectively. This has the effect of creating another window in the current frame. To cycle between multiple windows, use '''C-x o'''.
 
   
  +
ウィンドウ分割の反対は、ウィンドウを削除することです。現在のウィンドウを削除するには '''C-x 0''' を使い、現在のウィンドウ以外を削除するには '''C-x 1''' を使います。
The opposite of splitting a window, is deleting it. To delete the current window, use '''C-x 0''' and '''C-x 1''' to delete all windows except the current.
 
   
  +
ウィンドウと同様に、フレームも生成や削除が可能です。 '''C-x 5 2''' によってフレームを生成できます。 '''C-x 5 0''' によって現在のフレームを削除し、'''C-x 5 1''' によってr現在のフレーム以外のすべてのフレームを削除します。
As with windows, it is also possible to create and delete frames. '''C-x 5 2''' creates a frame. With '''C-x 5 0''' to delete the current frame and '''C-x 5 1''' to delete all except the current frame.
 
   
  +
{{Note|これらのコマンドはバッファには影響しません。たとえば、ウィンドウを削除しても表示されているバッファは kill されません。}}
{{Note|These commands do not affect buffers. For example, deleting a window does not kill the buffer it displays.}}
 
   
 
=== モード ===
 
=== モード ===
292行目: 312行目:
 
'''M-x line-number-mode <RET>'''
 
'''M-x line-number-mode <RET>'''
   
  +
sh-mode は、''メジャーモード'' の1つです。メジャーモードは Emacs を調整し、時には、特定の種類のテキストの編集用に特別なコマンドを提供します。それぞれのバッファでは、メジャーモードは1つだけが有効です。シンタックスハイライトやインデントサポートに加えて、sh-mode はシェルスクリプトを書く助けになるいくつかのコマンドを定義しています。以下に、それらの内のいくつかを示します。
sh-mode is a ''major-mode''. Major-modes adjust Emacs, and often also provide a specialised set of commands, for editing a particular type of text. Only one major-mode can be active in each buffer. In addition to syntax highlighting, and indentation support, sh-mode defines several commands to help write shell scripts. The following shows a few of those commands:
 
   
'''C-c (''' Insert a function definition
+
'''C-c (''' 関数定義を挿入する
 
 
'''C-c C-f''' Insert a 'for' loop
+
'''C-c C-f''' 'for' ループを挿入する
 
 
'''C-c TAB''' Insert an 'if' statement
+
'''C-c TAB''' 'if' 文を挿入する
 
 
'''C-c C-w''' Insert a 'while' loop
+
'''C-c C-w''' 'while' ループを挿入する
 
 
  +
'''C-c C-l''' 1 から n までの番号付きループを挿入する
'''C-c C-l''' Insert an indexed loop from 1 to n
 
   
 
'line-number-mode' と 'column-number-mode' は''マイナーモード''です。マイナーモードはメジャーモードを拡張することができ、同時に任意の数のマイナーモードを有効にできます。
 
'line-number-mode' と 'column-number-mode' は''マイナーモード''です。マイナーモードはメジャーモードを拡張することができ、同時に任意の数のマイナーモードを有効にできます。
309行目: 329行目:
   
 
Emacs を本当にマスターしたいのであれば、一番よく読むべき文章はやはり公式マニュアルです:
 
Emacs を本当にマスターしたいのであれば、一番よく読むべき文章はやはり公式マニュアルです:
* Emacs: the complete Emacs user manual.
+
* Emacs: 完全な Emacs ユーザーマニュアル
* Emacs FAQ.
+
* Emacs FAQ
* Emacs Lisp Intro: if you never used any programming language before.
+
* Emacs Lisp Intro: プログラミング言語を使用したことがない場合
  +
* Elisp: プログラミング言語をよく知っている場合
* Elisp: if you are already familiar with a programming language.
 
   
You can access them as PDFs from [http://www.gnu.org/software/emacs/manual/ GNU.org] or directly from Emacs itself thanks to the embedded 'info' reader: '''C-h i'''. Press '''m''' to choose a book.
+
これらは、 [http://www.gnu.org/software/emacs/manual/ GNU.org] から PDF として入手できます。あるいは Emacs 自身にて組み込みの 'info' リーダー '''C-h i''' を用いて直接読むこともできます。本を選択するには '''m''' を押してください。
   
  +
ユーザーの幾人かは、'info' で読むことを好みます。便利なショートカットであり、段落はウィンドウ幅に調整され、フォントは現在の画面解像度に調整されるためです。何人かは目に優しいと気づいています。最後に、本の内容を任意の Emacs バッファへ簡単にコピーでき、さらに例示されている Lisp コードを直接実行することさえできます。
Some users prefer to read books using 'info' because of its convenient shortcuts, its paragraphs adapting to window width and the font adapted to current screen resolution. Some find it less irritating to the eyes. Finally you can easily copy content from the book to any Emacs buffer, and you can even execute Lisp code snippets directly from the examples.
 
   
You may want to read the '''Info''' book to know more about it: '''C-h i m info <RET>'''.
+
'''info''' 本について、もっとよく知りたいなら、'''C-h i m info <RET>''' を実行してください。
  +
info モードで '''?''' を押すと、ショートカットの簡易リストが表示されます。
Press '''?''' while in info mode for a quick list of shortcuts.
 
  +
  +
== カスタマイズ ==
  +
  +
Emacs は {{ic|~/.emacs}} を編集するか '''M-x customize''' を使うことで設定をすることができます。このセクションでは手動で {{ic|~/.emacs}} を編集する方に焦点をあて、いくつかのカスタマイズ例を示すことで、一般的な Emacs の設定をデモンストレーションします。customize コマンドは調整を行うためのシンプルなインターフェイスを提供しますが、おそらく Emacs に慣れてくるにつれて制約を感じるようになるでしょう。
  +
  +
ここでの例は、すべて Emacs が動作している間に動作します。Emacs 内で式を評価するには、以下を使います。
  +
  +
'''C-M-x''' ポイントがある式を評価する
  +
  +
あるいは、
  +
  +
'''C-x C-e''' ポイントの直前の ')' を最後のカッコとする式を評価する
  +
  +
何人かのユーザーは、プロンプトで 'yes' や 'no' をタイプすると、すぐに疲れます。その代わりに 'y' や 'n' を使うために:
  +
  +
(defalias 'yes-or-no-p 'y-or-n-p)
  +
  +
カーソルの点滅を止めるには、次を使用:
  +
  +
(blink-cursor-mode -1)
  +
  +
同じく、前のセクションにある column-number-mode を有効にするには:
  +
  +
(column-number-mode 1)
  +
  +
前の2つのコマンドに類似性があるのは偶然ではありません。blink-cursor-mode と column-number-mode は、共にマイナーモードです。ルールとして、マイナーモードは正の数を引数にとると有効になり、負の数で無効になります。引数が省略された時、マイナーモードは on/off を切り替えます。
  +
  +
マイナーモードのその他いくつかの例を示します。以下はそれぞれ、スクロールバー、メニューバー、ツールバーを無効にします。
  +
  +
(scroll-bar-mode -1)
  +
(menu-bar-mode -1)
  +
(tool-bar-mode -1)
  +
  +
変数 'auto-mode-alist' によって、特定のファイル名に対してデフォルトで使われるメジャーモードを変更することができます。以下の例では、'.tut' および '.req' ファイルのデフォルトのメジャーモードを 'text-mode' にします。
  +
  +
(setq auto-mode-alist
  +
(append
  +
'(("\\.tut$" . text-mode)
  +
("\\.req$" . text-mode))
  +
auto-mode-alist))
  +
  +
設定は、基底となるモードごとに適用することもできます。基本的な方法は、''hook'' に関数を追加することです。例えば、text-mode でだけインデントをタブの代わりに強制的にスペースを使用するためには:
  +
  +
(add-hook 'text-mode-hook (lambda () (setq indent-tabs-mode nil)))
  +
  +
同様に、場所によらずインデントにてスペースを使用するには:
  +
  +
(setq-default indent-tabs-mode nil)
  +
  +
キーバインドは、2つの方法で調整できます。1つ目の方法は 'define-key' です。'define-key' は、コマンドに対するキーバインドを作成できますが、1つのモードに対してだけ作成します。以下の例では、'''F8''' に、'text-mode' バッファでは行末のホワイトスペースを除去するよう割り当てます。
  +
  +
(define-key text-mode-map (kbd "<f8>") 'delete-trailing-whitespace)
  +
  +
もう1つの方法は、'global-set-key' です。これによって、場所によらずキーにコマンドを割り当てることができます。'query-replace-regexp' ('''C-M-%''') を '<f7>' に割り当てるには:
  +
  +
(global-set-key (kbd "<f7>") 'query-replace-regexp)
  +
  +
他のキーにコマンドを割り当てることは、既存の割当を入れ替えるわけではありません。たとえば、上記例の後、'query-replace-regexp' は、'''F7''' と '''C-M-%''' の両方に割り当てられます。
  +
  +
Emacs のほとんどすべてがカスタマイズできます。[http://emacswiki.org/ Emacs Wiki] を通して見ることが基礎固めに適しています。
  +
  +
=== マルチ設定 ===
  +
  +
複数の設定を使い、Emacs にどれか一つをロードさせることができます。
  +
  +
例えば、2つの設定ファイルを定義してみましょう。
  +
  +
{{hc|.emacs|
  +
(load "~/.emacs.d/main" nil t)
  +
(load "~/.emacs.d/functions" nil t)
  +
(load "~/.emacs.d/modes" nil t)
  +
(load "~/.emacs.d/plugins" nil t)
  +
(load "~/.emacs.d/theme" nil t)
  +
}}
  +
  +
これによって、デーモンとしての起動用にフルカスタムをロードします。しかし、''plugins'' ファイルは巨大で、ロードが遅いです。''plugins'' 機能が不要な新しい Emacs インスタンスを生成したい場合、''plugins'' を毎回ロードすることは面倒です。
  +
  +
{{hc|.emacs-light|
  +
(load "~/.emacs.d/main" nil t)
  +
(load "~/.emacs.d/functions" nil t)
  +
(load "~/.emacs.d/modes" nil t)
  +
(load "~/.emacs.d/theme" nil t)
  +
}}
  +
  +
Emacs を以下のコマンドで起動します。
  +
emacs -q -l ~/.emacs-light
  +
これによって、エイリアスを生成して、呼び出しを簡単にすることができます。
  +
  +
=== ローカル・カスタム変数 ===
  +
  +
設定ファイル内で変数を定義することができます。この変数はファイル内でローカルに変更することができます。
  +
  +
(defcustom my-compiler "gcc" "Some documentation")
  +
  +
どんなファイルでもローカル変数を定義するには2つの方法があります。[https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html 完全な詳細のマニュアル ] を参照してください
  +
  +
* {{ic| M-x add-file-local-variable-prop-line}} は、ファイルの先頭に以下のようなコメント行を追加します。
  +
// -*- my-compiler:g++; mode:c++ -*-
  +
* {{ic| M-x add-file-local-variable}} は、ファイルの末尾付近に行を追加します。
  +
// Local Variables:
  +
// my-compiler: g++
  +
// mode: c++
  +
// End:
  +
  +
変数の効果を得るためには、{{ic|M-x revert-buffer}} を実行する必要あることに注意してください。
  +
  +
カスタム変数は、デフォルトでは安全でないと考えられています。もしカスタム変数によって再定義されたローカル変数を含むファイルを開こうとすると、Emacs は確認するよう通知します。
  +
  +
変数を安全であるとして宣言することもできます。これによって確認のためのプロンプトを除去することができます。新しい変数が安全と考えられるためには検証されなければならない、と述語を指定する必要があります。
  +
  +
(defcustom my-compiler "gcc" "Some documentation" :safe 'stringp)
  +
  +
この例では、文字列以外の何かにセットしようとすると、Emacs は安全でないと考えます。
  +
  +
=== カスタムカラーとテーマ ===
  +
  +
''face'' を使うことで簡単に色をカスタマイズすることができます:
  +
(set-face-background 'region "color-17")
  +
(set-face-foreground 'region "white")
  +
(set-face-bold-p 'font-lock-builtin-face t )
  +
  +
ポイントがある場所の face の名前を Emacs に表示させることができます。そのためには ''customize-face'' を使います。どのように色、太字、下線、等が設定されているかを示すことができます。
  +
  +
コンソール上の Emacs は、256色を扱うことができます。しかし、それには適したターミナルを使わなければなりません。たとえば URxvt は256色をサポートしています。''list-colors-display'' によって、サポートされる色の包括的なリストが表示できます。これは強くターミナルに依存します。
  +
  +
=== SyncTeX サポート ===
  +
  +
Emacs は強力な LaTeX エディタです。LaTeX モードを必要に応じて自由に編集・作成することができます。
  +
  +
SyncTeX サポートといった、まだいくつかの挑戦があります。最初に TeX ディストリビューションに SyncTeX があるかを確認する必要があります。もし TeX Live を手動でインストールした場合、''synctex'' パッケージをインストールする必要があるかもしれません。
  +
# umask 022 && tlmgr install synctex
  +
  +
SyncTeX サポートは、ビューア依存です。ここでは例として Zathura を使用します。他の PDF ビューアを使用する場合、コードを変更する必要があります。
  +
  +
(defcustom tex-my-viewer "zathura --fork -s -x \"emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"'\"'\"%{input}\"'\"'\")) (goto-line %{line}))'\""
  +
"TeX 文書用 PDF ビューア。
  +
同じドキュメントを2回起動したこと検出する、または Emacs を
  +
閉じても表示を継続するためにビューアを fork したい場合、
  +
  +
シンプルなコマンド:
  +
  +
zathura --fork
  +
  +
SyncTex を用いて pdf を逆検索するために以下が使用できる。
  +
  +
emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'
  +
  +
引用符および二重引用符は必須で、適切にエスケープされなければならない点に注意。"
  +
:safe 'stringp)
  +
  +
カスタム変数を定義します。もし AucTeX や Emacs 標準の LaTeX-mode を使用しているなら、それに応じてビューアを設定する必要があります。
  +
  +
LaTeX ソースファイルを Emacs で開き、文書をコンパイルし、ビューアを起動します。Zathura が起動します。{{ic|Ctrl+Left click}} を押すと、Emacs は対応する位置にポイントを移動させます。
  +
  +
=== Systemd ファイルのシンタックスハイライト ===
  +
  +
[https://github.com/holomorph/systemd-mode systemd-mode] を使うことができます。
  +
  +
もしくは init ファイルに以下を追加することで、簡単に emacs で systemd のファイル (サービスやタイマーなど) をカラー表示できます:
  +
  +
(add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
  +
(add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))
  +
  +
=== emacs-nox のクリップボードサポート ===
  +
  +
emacs-nox で [[Xorg]] クリップボードを使うには、{{Pkg|xclip}} を[[インストール]]して以下の関数を {{ic|~/.emacs}} に追加してください [https://lists.gnu.org/archive/html/help-gnu-emacs/2014-08/msg00189.html]:
  +
  +
{{bc|1=
  +
;; use xclip to copy/paste in emacs-nox
  +
(unless window-system
  +
(when (getenv "DISPLAY")
  +
(defun xclip-cut-function (text &optional push)
  +
(with-temp-buffer
  +
(insert text)
  +
(call-process-region (point-min) (point-max) "xclip" nil 0 nil "-i" "-selection" "clipboard")))
  +
(defun xclip-paste-function()
  +
(let ((xclip-output (shell-command-to-string "xclip -o -selection clipboard")))
  +
(unless (string= (car kill-ring) xclip-output)
  +
xclip-output )))
  +
(setq interprogram-cut-function 'xclip-cut-function)
  +
(setq interprogram-paste-function 'xclip-paste-function)
  +
))
  +
}}
  +
  +
{{Tip|以下を追加することでターミナルマウスサポートも有効にできます:
  +
{{bc|1=
  +
;; xterm mouse support
  +
(require 'mouse)
  +
(xterm-mouse-mode t)
  +
}}
  +
[http://www.opensource.apple.com/source/emacs/emacs-51/emacs/lisp/mwheel.el mwheel.el] を参照。}}
   
 
== ヒントとテクニック ==
 
== ヒントとテクニック ==
342行目: 562行目:
   
 
TRAMP のパスは '/[protocol]:[[user@]host]:<file>' という形式で指定します。TRAMP がサポートしているのは上記の例に限りません。詳しくは TRAMP の info マニュアルを参照してください。マニュアルは Emacs に付属しています。
 
TRAMP のパスは '/[protocol]:[[user@]host]:<file>' という形式で指定します。TRAMP がサポートしているのは上記の例に限りません。詳しくは TRAMP の info マニュアルを参照してください。マニュアルは Emacs に付属しています。
  +
  +
=== Emacs を git のマージツールとして使う ===
  +
  +
デフォルトでは、git はマージツールとして Emacs の Emerge モードをサポートしています。しかしながら、Ediff モードの方をより好むかもしれません。不幸にも、このモードは技術的な理由により git によってサポートされていません。Ediff モードを使用する方法はまだあります。emacs call 上で以下の elisp コードを評価します。
  +
  +
{{hc|.gitconfig|<nowiki>
  +
[mergetool.ediff]
  +
cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
  +
  +
[merge]
  +
tool = ediff
  +
</nowiki>}}
  +
  +
コマンドは1行で書かれなければならない点に注意してください。
  +
上の例では、Emacs を新たに起動します。より早く起動するために emacsclient を使いたいかもしれませんが、推奨されていません。なぜなら Ediff 呼び出しは実際にはクリーンではないためで、現在の Emacs セッションを混乱させる可能性があります。
  +
  +
'''-q''' オプションを使用して、即席で起動することができます。設定の一部を残したまま Emacs を素早く起動するには、Emacs を以下のように呼び出します。
  +
emacs -q -l ~/.emacs-light
  +
ここで、Ediff のために必要なことのみを記した軽量な設定ファイルがロードされます。
  +
  +
このトリックおよび Ediff の問題点についての詳細は、[http://kerneltrap.org/mailarchive/git/2007/7/1/250424 kerneltrap.org] および [https://stackoverflow.com/questions/1817370/using-ediff-as-git-mergetool stackoverflow] を参照してください。
  +
  +
=== Caps Lock キーを Control キーとして使う ===
  +
いわゆる 'emacs 小指' にならないようにこちらの挙動を好むユーザーもいます。X で試用してみたいときは、次を実行:
  +
$ setxkbmap -option 'ctrl:nocaps'
  +
  +
また、キーを'''交換'''するには、次を実行:
  +
$ setxkbmap -option 'ctrl:swapcaps'
  +
  +
永続的に設定したくなったら、{{ic|.xinitrc}} ファイルに上のコマンドを追加してください。
  +
  +
リージョンを小文字から大文字にする必要がある場合は、デフォルトの {{ic|C-x C-u}} キーバインディングを使って下さい、{{ic|upcase-region}} 関数が呼び出されます。
  +
  +
Caps Lock がない場合は、両方の "Shift" にマッピングしてください:
  +
$ setxkbmap -option "shift:both_capslock"
  +
  +
一部のデスクトップ環境にはキーボードのマッピングを変更するためのグラフィカルなツールが含まれています。例えば [[Plasma|Plasma 5]] ならシステム設定を開いて入力デバイスをクリックしてください。キーボードを選択して高度な設定タブから Caps Lock を Ctrl として使用するように設定できます。
   
 
=== キーボードマクロとレジスタ ===
 
=== キーボードマクロとレジスタ ===
   
  +
このセクションでは、2, 3の強力な編集機能に対する実用的なデモンストレーションを示します。つまり、''keyboard macros'' と ''registers'' です。
This section will provide a practical demonstration of the use of a couple of more powerful editing features. Namely, ''keyboard macros'' and ''registers''.
 
   
  +
目的は、一連の文字のリストとこのリスト内での対応する位置を作ることです。それらは手動で成形することもできますが、遅く、間違いをおこしやすいです。その代わりに、Emacs のよりパワフルないくつかの編集機能によって、レバレッジを効かせられます。答えの前に、以下で使うテクニックの背景について詳細を示します。
The aim will be to produce a listing of a series of characters and their corresponding position in this list. While it is possible to format each of them by hand, this would be slow and error-prone. Alternatively, some of Emacs' more powerful editing functionality could be leveraged. Before describing a solution, some details behind the techniques which will be used follow.
 
   
  +
1つ目の機能は ''レジスタ'' です。レジスタ は、数字からウィンドウコンフィグまでに及ぶ様々なデータ型を格納し取得するために使われます。それぞれのレジスタには、1文字の名前が与えられます。この文字はレジスタへのアクセスに使われます。
The first feature which will be introduced is ''registers''. Registers are used to store and retrieve a variety of data types ranging from numbers to window configurations. Each register is given a name of a single character: this character is used to access the register.
 
   
  +
もう1つの機能は、''キーボードマクロ'' です。キーボードマクロは、一連のコマンドを格納します。それによって後で簡単に繰り返すことができます。これらの変化を、ここでステップバイステップで実施してみます。
The other which will be demonstrated is ''keyboard macros''. A keyboard macro stores a sequence of commands so they can be easily repeated later. These changes will now be performed step-by-step.
 
   
  +
文字集合を含むバッファから始めます。
Starting with a buffer containing our set of characters:
 
 
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
 
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
   
Prepare a register by invoking the `number-to-register' command ('''C-x r n''') then storing the number '0' in register 'k':
+
'number-to-register' コマンド('''C-x r n''')を呼び出してレジスタを準備します。それから数字 '0' をレジスタ 'k' に保存します。
   
 
C-x r n k
 
C-x r n k
   
  +
バッファの先頭にポイントを移動させ、キーボードマクロ('''C-x (''')を実行開始し、文字のフォーマットを始めます。
With point at the beginning of the buffer, start a keyboard macro ('''C-x (''') and begin to format the characters:
 
   
 
C-x ( C-f M-4 .
 
C-x ( C-f M-4 .
   
Insert ('''C-x r i''') and increment ('''C-x r +''') the register 'k'. The prefix argument ('''C-u''') is used to leave point positioned after the inserted text:
+
レジスタ 'k' に挿入 ('''C-x r i''') とインクリメント ('''C-x r +''') を行います。前置引数 ('''C-u''') によって、テキストを挿入した後でポイント位置を離します。
   
 
C-u C-x r i k C-x r + k
 
C-u C-x r i k C-x r + k
   
  +
改行を入れることでフォーマットを完了させます。残りの文字に対しては、Emacs はキーボードマクロを定義したポイント位置から始まるこのプロセスを繰り返すことができます。'''C-x e''' はキーボードマクロを完了して呼び出します。前置引数 '''M-0''' によって、エラーが起きるまでマクロを繰り返します。この場合、バッファの最後に到着すると中断します。
Complete the formatting by inserting a newline. Emacs can then repeat that process, beginning from the point where we started defining the keyboard macro, for the rest of the characters. '''C-x e''' completes then invokes the keyboard macro. The prefix argument, '''M-0''', causes the macro to repeat until it comes across an error. In this case it aborts once it reaches the end of the buffer.
 
   
 
<RET> M-0 C-x e
 
<RET> M-0 C-x e
   
  +
結果は以下のようになります:
The result:
 
   
 
A....0
 
A....0
382行目: 639行目:
 
z....51
 
z....51
   
  +
もし、後々使うためにマクロを保存したいなら、名前をつけて設定ファイルに保存する必要があります。
If you want to save your macro for later use, you must give it a name and save it to your configuration file:
 
 
name-last-kbd-macro
 
name-last-kbd-macro
 
insert-kbd-macro
 
insert-kbd-macro
   
  +
定義したマクロは、すべてマクロリングに格納されます。マクロを巡回するには、
All defined macros are stored in the macro ring. To cycle between macros, use
 
'''C-x C-k C-n''' next macro
+
'''C-x C-k C-n''' 次のマクロ
'''C-x C-k C-p''' previous macro
+
'''C-x C-k C-p''' 前のマクロ
   
  +
同様に、仮想的に何でも保存するためにレジスタを使えます。
You can also use registers to save virtually anything.
 
   
'''C-x r SPC''' Copy current point (position) to register
+
'''C-x r SPC''' 現在のポイント(位置)をレジスタにコピーする
'''C-x r w''' Copy current window configuration to register.
+
'''C-x r w''' 現在のウィンドウ設定をレジスタにコピーする
'''C-x r j''' Restore register.
+
'''C-x r j''' レジスタに再保存する。
 
 
  +
しばしば異なるプロジェクトごとにウィンドウを行ったり来たりして作業をするなら、別のプロジェクトのために設定を保存し、ある画角から別の画角へ簡単に切り替えることができます。
So if you often work with windows side by side, for different project, you can save the configuration for the different projects and easily switch from one view to the other.
 
   
  +
'''list-registers''' コマンドによって、使用したレジスタをリストにして表示することができます。
You can list used registers with the '''list-registers''' command.
 
   
 
=== 正規表現 ===
 
=== 正規表現 ===
404行目: 661行目:
 
Emacs Manual より: "正規表現 (''regexp'' と略す) とは、一致する可能性がある一連の (無限個でもよい) 文字列を表現するパターンである"。このセクションでは正規表現自体には深くは立ち入りません (単純に説明しきれない)。そのかわり正規表現のパワーを簡単にデモンストレーションします。詳しい説明は Emacs Manual の [https://www.gnu.org/software/emacs/manual/html_node/elisp/Regular-Expressions.html#Regular-Expressions Regular Expressions] セクションを見て下さい。
 
Emacs Manual より: "正規表現 (''regexp'' と略す) とは、一致する可能性がある一連の (無限個でもよい) 文字列を表現するパターンである"。このセクションでは正規表現自体には深くは立ち入りません (単純に説明しきれない)。そのかわり正規表現のパワーを簡単にデモンストレーションします。詳しい説明は Emacs Manual の [https://www.gnu.org/software/emacs/manual/html_node/elisp/Regular-Expressions.html#Regular-Expressions Regular Expressions] セクションを見て下さい。
   
  +
上と同じシナリオが与えられた場合、つまり複数文字のリストがあり、そのリスト内に複数文字の相対位置を持つリストを考えます。(参照 [[#キーボードマクロとレジスタ|キーボードマクロとレジスタ]]) 再度、以下を含むバッファから開始します。
Given the same scenario presented above: A list of characters which are to be formatted to represent their respective position in the list. (see [[#キーボードマクロとレジスタ|Keyboard macros and registers]]). Again, starting with a buffer containing.
 
   
 
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
 
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
   
  +
バッファの最初に '''C-M-%''' を使用します。(もしキー列が実行するには難しいなら、'''M-x query-replace-regexp''' を使う方がより快適かもしれません。)プロンプトには以下を入力します:
At the beginning of the buffer, use '''C-M-%''' (if the key-sequence is difficult to perform, it may be more comfortable to use '''M-x query-replace-regexp'''). At the prompt:
 
 
\(.\)
 
\(.\)
  +
これは、単に1文字にマッチします。それから置換先のプロンプトには:
which simply matches one character. Then, when prompted for the replacement:
 
 
\1....\#^J
 
\1....\#^J
  +
{{Note|'^J' は、改行を配置することを意味します。改行は、プロンプト内で入力できません。改行記号は、その他に '''C-q C-j''' を使って入力することもできます。}}
{{Note|'^J' represents where a newline should be placed, it should not be entered into the prompt. The newline must instead be inserted literally using '''C-q C-j'''.}}
 
  +
置換先の表現は、以下のように読みます: "最初のカッコに囲まれた部分にマッチするテキストを挿入しなさい (今回は1文字)。次にピリオドを4文字挿入し、それから自動的にインクリメントされた数を挿入し、改行が続きます。"
The replacement expression reads: "Insert the matched text between the first set of parentheses (in this case, a single character), followed by 4 periods then insert an automatically incremented number followed by a newline.
 
   
  +
最後に、'''!''' を押すことで、バッファ全体に渡って適用します。前のセクションで実行したすべてのフォーマットが、1つの正規表現置換で実行できます。
Finally, press '''!''' to apply this across the entire buffer. All of the formatting that was performed in the previous section was performed with a single regexp replacement.
 
   
 
=== 矩形選択 ===
 
=== 矩形選択 ===
423行目: 680行目:
 
Emacs でも矩形選択は可能です。'''C-SPC''' で普通にテキストを選択してから、複数の矩形コマンドを使うことができます。
 
Emacs でも矩形選択は可能です。'''C-SPC''' で普通にテキストを選択してから、複数の矩形コマンドを使うことができます。
   
'''C-x r t''' Replace rectangle with text.
+
'''C-x r t''' 矩形領域にテキストを挿入する
'''C-x r k''' Kill (and save in kill-ring) rectangle.
+
'''C-x r k''' 矩形領域を kill する (kill-ring に保存する)
'''C-x r y''' Yank rectangle.
+
'''C-x r y''' 矩形領域を Yank する
'''C-x r o''' Blank out rectangle.
+
'''C-x r o''' 矩形領域にスペースを挿入する
   
たとえハイライトされていても、上記のコマンドが矩形の外のテキストに影響を与えることはありません。
+
たとえ矩形の外のテキストがハイライトされていても、上記のコマンドが影響を与えることはありません。
   
 
=== ブックマーク ===
 
=== ブックマーク ===
   
Emacs は開いたファイルのリストを記録できます。
+
Emacs は開いたファイルのリストを保存できます。
   
 
'''C-x r m''' カレントバッファをブックマークに追加。
 
'''C-x r m''' カレントバッファをブックマークに追加。
440行目: 697行目:
 
=== Elisp インタプリタ ===
 
=== Elisp インタプリタ ===
   
  +
'''eval-last-sexp''' ('''C-x C-e''') を使うことで、elisp 式を評価することができます。Emacs は、開始時に常に '''*scratch*''' バッファを生成します。*scratch* バッファはディスクに保存されず、自由にテキストやコードを記述することができます。これは特にelispの評価に有用です。このバッファは、デフォルトで '''lisp-interaction-mode''' 有効で開始することに注意してください。
Evaluate an elisp expression using '''eval-last-sexp''' ('''C-x C-e'''). Emacs always spawns a '''*scratch*''' buffer when started. It will not be saved to disk, feel free to add any text / code you want. It is especially useful for elisp evaluation. Note that this buffer starts using '''lisp-interaction-mode''' by default.
 
   
  +
その他に、Emacs は、'''ielm''' コマンドでトップレベルの elisp インタプリタを提供します。
Alternatively, Emacs provides a top-level elisp interpreter with the '''ielm''' command.
 
   
 
=== スマートなウィンドウ切り替え ===
 
=== スマートなウィンドウ切り替え ===
457行目: 714行目:
 
=== シェルコマンドの実行 ===
 
=== シェルコマンドの実行 ===
   
  +
'''M-!''' を使うことで、外部コマンドを呼び出すことができます。前置引数を使用する('''C-u M-!''')ことで、結果を現在のバッファのポイント位置に出力することができます。
Use '''M-!''' to call an external command. Use a prefix argument ('''C-u M-!''') to output the result to current buffer at point.
 
   
  +
リージョン上で '''M-|''' を使うことで、リージョンをコマンドの入力として使うことができます。たとえば、
You can use '''M-|''' on a region to use it as input for a command. For instance
 
   
 
'''C-u M-| sort -u RET'''
 
'''C-u M-| sort -u RET'''
   
  +
によって、リージョンがソートされ、重複を除去して、リージョンをその結果で置き換えることができます。
will sort region, remove duplicates and replace the region with the result.
 
   
 
=== シェルバッファ ===
 
=== シェルバッファ ===
   
  +
シェルバッファを生成することで、ターミナルと同様にコマンドを実行することができます。
You can spawn a shell buffer and execute commands just like you would do in any terminal.
 
  +
昔ながらのシェルバッファは、'''shell''' コマンドによって生成することができます。
A classic shell buffer can be spawned with the '''shell''' command.
 
   
  +
Emacs は、すべて Emacs Lisp で書かれた非常に強力なシェル '''eshell''' を機能として持っています。csh や zshといったシェルに対する主な優位点は、ネイティブなシェル言語が elisp そのものである点です。そのため、シェル関数として elisp のすべての先進的な機能を使用できます。
Emacs features a very powerful shell entirely written in Emacs Lisp, the '''eshell'''. The major advantage over shells like csh or zsh is that the native shell language is elisp itself. So you can use all advanced feature of elisp for your shell functions.
 
   
 
=== 対応する括弧のハイライト ===
 
=== 対応する括弧のハイライト ===
486行目: 743行目:
 
'''M-x ispell-change-dictionary'''
 
'''M-x ispell-change-dictionary'''
   
  +
一単語をチェックするには '''M-$''' を使います。
To check a single work use '''M-$'''.
 
  +
バッファ全体をチェックするには、
You can start checking the whole buffer with
 
 
'''M-x ispell-buffer'''
 
'''M-x ispell-buffer'''
   
  +
'''flyspell-mode''' を有効にすることで、入力と同時に (on-the-fly) スペルチェックができます。ソースコードに対しては、代わりに '''flyspell-prog-mode''' を使うことで、コメントに限定して有効にできます。Emacs でスペルチェックをするには ''aspell'' パッケージも必要になります。それぞれの言語に対応したパッケージがあります。英語に対しては、(''aspell'' と共に)''aspell-en'' が必要になります。
You can enable on-the-fly spell checking by enabling the '''flyspell-mode'''. For source code files you can restrict the mode to comments by using the '''flyspell-prog-mode''' instead. You will also need the ''aspell'' package for spelling in Emacs. There are corresponding packages for each language, so for English, you'd also want ''aspell-en'' (as well as ''aspell'').
 
   
 
=== テーブル ===
 
=== テーブル ===
   
  +
Emacs は、様々な言語での一般的なテーブルを扱う居力な機能を備えています。例を見てみましょう。
Emacs comes with some powerful functions to handle and generate tables for various languages. Let's show an example.
 
   
 
Fruits Quantity
 
Fruits Quantity
500行目: 757行目:
 
Melons 2
 
Melons 2
   
  +
この内容をリージョンで選択して、以下を実行します。
Now select the previous content in a region, and run
 
 
table-capture
 
table-capture
   
  +
半角スペース2文字を列の区切りとして、改行 ('''C-q C-j''') を行の区切りとして使用します。
Use two spaces for the column delimiter, and a line break ('''C-q C-j''') for the row delimiter.
 
  +
以下の結果を得ます。
This will lead to the following result.
 
   
 
+------+--------+
 
+------+--------+
514行目: 771行目:
 
+------+--------+
 
+------+--------+
   
  +
以下の操作で元に戻せます。
You can revert back the operation with
 
 
table-release
 
table-release
There is a lot of handy ''table-*'' functions, like ''table-insert-row'', ''table-span-cell'', ''table-widen-cell'', etc.
+
''table-insert-row'', ''table-span-cell'', ''table-widen-cell'' といったような、たくさんの便利な ''table-*'' 関数があります。
   
  +
最後に、''table'' 関数の究極の目的は、指定されたマークアップ言語に変換することです。
Finally, the ultimate purpose of the ''table'' functions is to convert it to the desired markup language.
 
Use the ''table-generate-source'' for that.
+
それには、''table-generate-source'' が使われます。
  +
LaTeX に対しては、前のテーブルは、以下の結果となります。
For LaTeX, the previous table would result in
 
   
 
% This LaTeX table template is generated by emacs 24.2.1
 
% This LaTeX table template is generated by emacs 24.2.1
533行目: 790行目:
 
\end{tabular}
 
\end{tabular}
   
  +
table mode を使用することで、行ごとおよび列ごとの和といった、スプレッドシートの作業を行うこともできます。しかし、すぐに機能が限定的であると分かるでしょう。その上、非常に遅いです。より多くの強力な可能性については、[[#予定表、スプレッドシート、文章作成|org-mode]] を見てください。
Using the table mode you can also do some spreadsheet work like sum on rows and columns, but you will quickly find it limited. Besides it is quite slow. Have a look at the [[#予定表、スプレッドシート、文章作成|org-mode]] for much more powerful possibilities.
 
   
 
=== 予定表、スプレッドシート、文章作成 ===
 
=== 予定表、スプレッドシート、文章作成 ===
   
  +
有名でパワフルな [http://orgmode.org/ Org mode] のおかげで、Emacs はパワフルなオフィス系機能をおすすめできます。このモードは、標準の Emacs ディストリビューションに含まれます。
Emacs can offer powerful office features thanks to the famous and powerful [http://orgmode.org/ Org mode]. This mode is part of the standard Emacs distribution.
 
   
  +
Org mode は元々強力な TODO およびアジェンダのエージェントですが、すぐにはるかに幅広い機能セットに進化しました。
Org mode is originally a powerful TODO and Agenda agent, but has quickly evolved to a much wider set of features.
 
  +
Org mode は単純に機能が多すぎて、すべての機能をざっと見ることすらできません。そのため、私たちはいくつかの例であなたの欲求を刺激するに留めます。
There is simply too much to tell about Org that we cannot aford even to skim over all the features. So we will only whet your appetite with a few exemples.
 
   
  +
TODO.org ファイルを新規ファイルとして開きます。Org mode がロードされるはずです。もしロードされなければ、'''M-x org-mode''' によって有効にできます。
Open a new file TODO.org file, Org mode should be loaded. If not, switch to it with '''M-x org-mode'''.
 
 
{{hc|TODO.org|
 
{{hc|TODO.org|
 
* First entry
 
* First entry
553行目: 810行目:
 
}}
 
}}
   
  +
ここで、いくつかの有用なキーバインドは以下となります:
Now a few useful bindings.
 
  +
* '''TAB''' 現在のエントリーの折りたたみ・展開を切り替えます。
* '''TAB''' to cycle-fold current entry.
 
  +
* '''S-TAB''' すべてのエントリーの折りたたみ・展開を切り替えます。
* '''S-TAB''' to cycle-fold all entries.
 
  +
* '''M-RET''' 現在の項目と同じレベルに新しい項目を開始します。
* '''M-RET''' to start a new item on the same level as the current one.
 
* '''M-<left>''' and '''M-<right>''' to change level.
+
* '''M-<left>''' および '''M-<right>''' レベルを変更します。
* '''M-<up>''' and '''M-<down>''' to move item together with all its subsections.
+
* '''M-<up>''' およb '''M-<down>''' すべてのサブセクションを含めて項目を移動します。
* '''S-<left>''' and '''S-<right>''' to change status. On list items it will change the item style.
+
* '''S-<left>''' および '''S-<right>''' ステータスを変化させます。リストアイテムでは、項目のスタイルを変更します。
* '''S-<up>''' and '''S-<down>''' to change priority.
+
* '''S-<up>''' および '''S-<down>''' 優先度を変更します。
  +
* '''C-c ^''' 現在のエントリーのすべてのサブエントリーをソートします。
* '''C-c ^''' to sort all subentries of the current entry.
 
  +
* '''C-c .''' 現在のエントリーにタイムスタンプを追加します。{{ic|Shift}} と矢印を使って、数日や数週をスキップできます。カレンダーでマウスを使ったり、特定の日で {{ic|Enter}} を押したりして、それらを選択できます。
* '''C-c .''' to add a timestamp to the current entry. Use {{ic|Shift}} and arrows to skip days or weeks. Use the mouse on the calendar or press {{ic|Enter}} on a specific day to choose it.
 
   
  +
スプレッドシート機能は、非常に包括的です。マニュアルから抜粋してみましょう:
The spreadsheet features are very comprehensive. Let's give an excerpt from the manual:
 
   
 
{{bc|<nowiki>
 
{{bc|<nowiki>
  +
Finally, just to whet your appetite for what can be done with the
 
  +
最後に、素晴らしい `calc.el 'パッケージでできることについて欲求を
fantastic `calc.el' package, here is a table that computes the Taylor
 
  +
刺激するために、いくつかの関数に対する位置 `x' で次数 `n'のテイラー級数を
series of degree `n' at location `x' for a couple of functions.
 
  +
計算する表を示します。
   
 
|---+-------------+---+-----+--------------------------------------|
 
|---+-------------+---+-----+--------------------------------------|
| | Func | n | x | Result |
+
| | 関数 | n | x | 結果 |
 
|---+-------------+---+-----+--------------------------------------|
 
|---+-------------+---+-----+--------------------------------------|
 
| # | exp(x) | 1 | x | 1 + x |
 
| # | exp(x) | 1 | x | 1 + x |
583行目: 841行目:
 
#+TBLFM: $5=taylor($2,$4,$3);n3
 
#+TBLFM: $5=taylor($2,$4,$3);n3
 
</nowiki>}}
 
</nowiki>}}
  +
Org mode は、行においてパイプ '''|''' がホワイトスペース以外の最初の文字のとき、テーブルと認識します。前のテキストでは、線を描きませんでした。セル内の内容、または '''|-''' のあとに '''TAB''' が押されたとき、線が自動的に描かれています。結果列も手動では記述しておらず、最後の行の calc 式から計算されています。'''C-u C-c C-c''' を使うことで、テーブル内のすべての値を再計算することができます。
Org mode recognizes a table when the pipe '''|''' is the first non-whitespace character on line. In the previous text, no line was drawn. This is done automatically when '''TAB''' is pressed after an entry or the '''|-''' sequence. The result column was not written by hand neither, it is computed from the calc formula on the last line. Use '''C-u C-c C-c''' to recompute all values in a table.
 
   
  +
TODO ファイルと同様に、行と列を操作するキーバインディングがあります。{{ic|Alt}} + 矢印キーで、列と行を移動することができます。
There is also some handy row and column manipulation bindings like those for the TODO file. {{ic|Alt}} plus arrows will move columns and arrows.
 
   
For more in-depth details, refer to the official manual: '''C-h i m Org mode RET'''.
+
より深く詳細を知るには、公式マニュアルを参照してください: '''C-h i m Org mode RET'''
   
 
=== リファクタリングとスマート補完 ===
 
=== リファクタリングとスマート補完 ===
593行目: 851行目:
 
(Eclipse などの) IDE が大抵備えているプログラミング機能が必要な場合、[http://cedet.sourceforge.net/semantic.shtml Semantic] ツールが役に立ちます。Semantic は Emacs の標準ディストリビューションに含まれています。現在 C, C++, Scheme, Javascript, Java, HTML, Make がサポートされています。現在のサポート状況は [http://cedet.sourceforge.net/languagesupport.shtml CEDET のページ] で確認できます。
 
(Eclipse などの) IDE が大抵備えているプログラミング機能が必要な場合、[http://cedet.sourceforge.net/semantic.shtml Semantic] ツールが役に立ちます。Semantic は Emacs の標準ディストリビューションに含まれています。現在 C, C++, Scheme, Javascript, Java, HTML, Make がサポートされています。現在のサポート状況は [http://cedet.sourceforge.net/languagesupport.shtml CEDET のページ] で確認できます。
   
  +
Semantic がサポートする好みのプログラミング言語で書かれたファイルを開きます。そして Semantic マイナーモードを起動します。
Open a file in your favorite programming language supported by Semantic and turn on the Semantic minor mode with
 
 
M-x semantic-mode
 
M-x semantic-mode
  +
Semantic will work for a few seconds parsing the libraries included from your file (in C that would mostly be the standard library for instance).
 
  +
Semantic は、あなたのファイルに含まれるライブラリ (たとえば C では、ほとんどの場合、標準ライブラリ) を2,3秒パースします。
   
 
==== 機能 ====
 
==== 機能 ====
   
  +
一旦完了すると、素晴らしい Semantic の機能が使えます。
Once done, you can start using the great Semantic features:
 
  +
;スマート補完
;Smart completion
 
  +
'''C-c , SPC''' を押すことで、ポイントにあるシンボルを補完することができます。それが引数の場合、型が正しいかチェックされます。
Press '''C-c , SPC''' to complete a symbol at point. If it is an argument, it will check for type correctness.
 
   
  +
;シンボルにジャンプする
;Jump to symbol
 
  +
'''C-c , j''' を押すことでシンボルを入力するプロンプトを表示し、その定義元にジャンプします。'''TAB''' で自動補完ができます。文字 '''J''' を押すと、シンボルを複数ファイルに渡って探索します。
Press '''C-c , j''' to prompt for a symbol and jump to its definition. You can use auto-completion with '''TAB'''. Use a capital '''J''' to search for symbol accross files.
 
   
  +
;シンボルの呼び出しをリスト表示する
;List symbol calls
 
  +
'''C-c , g''' を押すことでシンボルを入力するプロンプトを表示し、参照されている場所のリストを表示します。'''n''' と '''p''' を押すことで結果表示を巡回できます。'''RET''' を押すことで詳細をトグルし、参照箇所で再度 '''RET''' を押すことで参照元にジャンプします。'''G''' を押すことで、入力したシンボルの場所を複数ファイルに対してリスト表示します。
Press '''C-c , g''' to prompt for a symbol and list the places where it is being referred to. You can use '''n''' and '''p''' to navigate through the resulting entries. Press '''RET''' to toggle details, and '''RET''' again on a reference to jump to it. Use a capital '''G''' in the first command to work across files.
 
   
  +
;リファクタリング
;Refactoring
 
  +
最初に前述のコマンドでリファクタリングしたいシンボルの使用先をリスト化します。'''(''' を押すと、シンボルに対するマクロ定義を開始します。これは実際、リファクタリングに比べてより非常に強力です。なぜなら、シンボルに任意の関数を適用したり、周囲のシンボルに作用することさえしたりできます。'''C-x )''' を押すことで、マクロ定義を終了し、'''E''' キーにて実行します。
First list use of the symbol you want to refactor with the aforementioned command. Now press '''(''' to start defining a macro on the symbol. This is actually much more powerful than refactoring since you can apply any function to the symbol and even act on its surrounding symbols. Press '''C-x )''' to finish the macro and '''E''' to call it.
 
   
  +
;シンボルの説明
;Describe symbol
 
  +
以下の関数を呼び出すことで、シンボルの詳細を表示します。
Call the following function to display details on a symbol.
 
 
semantic-ia-show-summary
 
semantic-ia-show-summary
  +
これは複雑なデータ構造とプロトタイプに対して非常に有用です 。デフォルトではキーバインドがありません。
This can be very useful for complexe data structures and function prototypes. There is no binding by default.
 
   
 
==== 設定 ====
 
==== 設定 ====
   
  +
以下に、サポートされているすべてのプログラミング言語で Semantic を使用するためのサンプル設定を示します。キーバインディングのと表示設定の例です。
Here follows a sample configuration for use of Semantic with all supported programming languages: an example binding and a display configuration.
 
  +
;; Semantic with ghost display (allows M-n and M-p to browse completion).
 
  +
;; ghost 表示での Semantic (M-n と M-p で完了をブラウズできます)
 
(semantic-mode 1)
 
(semantic-mode 1)
 
(define-key my-keys-minor-mode-map (kbd "C-c , d") 'semantic-ia-show-summary)
 
(define-key my-keys-minor-mode-map (kbd "C-c , d") 'semantic-ia-show-summary)
 
(setq semantic-complete-inline-analyzer-displayor-class 'semantic-displayor-ghost)
 
(setq semantic-complete-inline-analyzer-displayor-class 'semantic-displayor-ghost)
   
  +
特定の言語に対して特化した設定を追加することもできます。ここでは C のために:
You can also add some specialization for a specific language. Here for C:
 
 
(add-hook
 
(add-hook
 
'c-mode-hook
 
'c-mode-hook
636行目: 896行目:
   
 
Emacs から直接 info マニュアルにアクセスすることが可能です: '''C-h i m Semantic RET'''。
 
Emacs から直接 info マニュアルにアクセスすることが可能です: '''C-h i m Semantic RET'''。
 
=== Emacs を git のマージツールとして使う ===
 
 
By default, Git provides support for using Emacs' Emerge mode as a merge tool. However you may prefer the Ediff mode. Unfortunately this mode is not supported by git for technical reasons. There is still a way to use it by evaluating some elisp code upon emacs call.
 
 
{{hc|.gitconfig|<nowiki>
 
[mergetool.ediff]
 
cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\"
 
 
[merge]
 
tool = ediff
 
</nowiki>}}
 
 
Note that the command has to be on a single line.
 
In the above example, we launch a new instance of Emacs. You might want to use emacsclient for quicker startup; it is not recommended though since the Ediff call is not really clean: it could mess with your current Emacs session.
 
 
If you want an instant startup you can use the '''-q''' parameter. If you want to launch Emacs quickly while preserving at least a part of your configuration, you can call Emacs with
 
emacs -q -l ~/.emacs-light
 
where the light configuration file loads only what you need for Ediff.
 
 
See [http://kerneltrap.org/mailarchive/git/2007/7/1/250424 kerneltrap.org] and [https://stackoverflow.com/questions/1817370/using-ediff-as-git-mergetool stackoverflow] for more details on this trick and the Ediff issue.
 
 
=== Caps Lock キーを Control キーとして使う ===
 
いわゆる 'emacs 小指' にならないようにこちらの挙動を好むユーザーもいます。X で試用してみたいときは、次を実行:
 
$ setxkbmap -option 'ctrl:nocaps'
 
 
また、キーを'''交換'''するには、次を実行:
 
$ setxkbmap -option 'ctrl:swapcaps'
 
 
永続的に設定したくなったら、{{ic|.xinitrc}} ファイルに上のコマンドを追加してください。
 
 
リージョンを小文字から大文字にする必要がある場合は、デフォルトの {{ic|C-x C-u}} キーバインディングを使って下さい、{{ic|upcase-region}} 関数が呼び出されます。
 
 
Caps Lock がない場合は、両方の "Shift" にマッピングしてください:
 
$ setxkbmap -option "shift:both_capslock"
 
 
一部のデスクトップ環境にはキーボードのマッピングを変更するためのグラフィカルなツールが含まれています。例えば [[Plasma|Plasma 5]] ならシステム設定を開いて入力デバイスをクリックしてください。キーボードを選択して高度な設定タブから Caps Lock を Ctrl として使用するように設定できます。
 
 
== カスタマイズ ==
 
 
Emacs は {{ic|~/.emacs}} を編集するか '''M-x customize''' を使うことで設定をすることができます。このセクションでは手動で {{ic|~/.emacs}} を編集する方に焦点をあて、いくつかのカスタマイズ例を示すことで、一般的な Emacs の設定をデモンストレーションします。customize コマンドは調整を行うためのシンプルなインターフェイスを提供しますが、おそらく Emacs に慣れてくるにつれて制約を感じるようになるでしょう。
 
 
All of the examples here can be performed while Emacs is running. To evaluate the expression within Emacs, use:
 
 
'''C-M-x''' with point anywhere within the expression.
 
 
or
 
 
'''C-x C-e''' with point following the last ')'
 
 
For some users, typing 'yes' and 'no' in prompts can quickly become tiring. To instead use the 'y' and 'n' keys at these prompts:
 
 
(defalias 'yes-or-no-p 'y-or-n-p)
 
 
カーソルの点滅を止めるには、次を使用:
 
 
(blink-cursor-mode -1)
 
 
同じく、前のセクションにある column-number-mode を有効にするには:
 
 
(column-number-mode 1)
 
 
The similarities between the previous two commands are not a coincidence: blink-cursor-mode and column-number-mode are both minor-modes. As a rule, minor-modes can be enabled given positive argument or disabled with a negative argument. Should the argument be omitted, the minor-mode will be toggled on/off.
 
 
Here are some more examples of minor-modes. The following will disable the scroll bars, menu-bar and tool-bar, respectively.
 
 
(scroll-bar-mode -1)
 
(menu-bar-mode -1)
 
(tool-bar-mode -1)
 
 
The variable, 'auto-mode-alist', can be modified to change the major-mode used by default for certain file names. The following example will make the default major-mode for '.tut' and '.req' files 'text-mode'.
 
 
(setq auto-mode-alist
 
(append
 
'(("\\.tut$" . text-mode)
 
("\\.req$" . text-mode))
 
auto-mode-alist))
 
 
Settings can also be applied on a per-mode basis. A common method for this is to add a function to a ''hook''. For example, to force indentation to use spaces instead of tabs, but only in text-mode:
 
 
(add-hook 'text-mode-hook (lambda () (setq indent-tabs-mode nil)))
 
 
Similarly, to only use spaces for indentation everywhere:
 
 
(setq-default indent-tabs-mode nil)
 
 
Keybindings can be adjusted in two ways. The first of which is 'define-key'. 'define-key' creates a keybinding for a command but only in one mode. The example below will make '''F8''' delete any whitespace from the end of each line of a 'text-mode' buffer:
 
 
(define-key text-mode-map (kbd "<f8>") 'delete-trailing-whitespace)
 
 
The other method is 'global-set-key'. This is used to bind a key to a command everywhere. To bind 'query-replace-regexp' ('''C-M-%''') to '<f7>'.
 
 
(global-set-key (kbd "<f7>") 'query-replace-regexp)
 
 
Binding a command to an alternate key does not replace any existing bindings. Which is to say, 'query-replace-regexp' would be bound to both '''F7''' and '''C-M-%''' after the above example.
 
 
Almost anything within Emacs can be configured. Browsing through the [http://emacswiki.org/ Emacs Wiki] should give a solid place to start.
 
 
=== マルチ設定 ===
 
 
複数の設定を使い、Emacs にどれか一つをロードさせることができます。
 
 
例えば、2つの設定ファイルを定義してみましょう。
 
 
{{hc|.emacs|
 
(load "~/.emacs.d/main" nil t)
 
(load "~/.emacs.d/functions" nil t)
 
(load "~/.emacs.d/modes" nil t)
 
(load "~/.emacs.d/plugins" nil t)
 
(load "~/.emacs.d/theme" nil t)
 
}}
 
 
This is the full configuration we load for the daemon. But the ''plugins'' file is huge and slow to load. If we want to spawn a new Emacs instance that does not need the ''plugins'' features, it can be cumbersome to load it everytime in the long run.
 
 
{{hc|.emacs-light|
 
(load "~/.emacs.d/main" nil t)
 
(load "~/.emacs.d/functions" nil t)
 
(load "~/.emacs.d/modes" nil t)
 
(load "~/.emacs.d/theme" nil t)
 
}}
 
 
And now we launch Emacs with
 
emacs -q -l ~/.emacs-light
 
You can create an alias to ease the call.
 
 
=== ローカル・カスタム変数 ===
 
 
You can define variables in your configuration file that can be later one modified locally for a file.
 
 
(defcustom my-compiler "gcc" "Some documentation")
 
 
Now in any file you can define local variables in two ways, see [https://www.gnu.org/software/emacs/manual/html_node/emacs/Specifying-File-Variables.html the manual for complete details ]
 
 
* Using {{ic| M-x add-file-local-variable-prop-line}}, which adds a commented line at the beginning similar to:
 
// -*- my-compiler:g++; mode:c++ -*-
 
* Or you can use {{ic| M-x add-file-local-variable}} to add lines near the end of the file:
 
// Local Variables:
 
// my-compiler: g++
 
// mode: c++
 
// End:
 
 
Note that for the values to take effect, you will need to call {{ic|M-x revert-buffer}}.
 
 
Custom variables are considered unsafe by default. If you try to open a file that contains local variable redefining custom variables, Emacs will ask you for confirmation.
 
 
You can declare the variable as secure, thus removing the Emacs prompt for confirmation. You need to specify a predicate that any new value has to verify so that it can be considered safe.
 
 
(defcustom my-compiler "gcc" "Some documentation" :safe 'stringp)
 
 
In the previous example, if you attempt to set anything else than a string, Emacs will consider it insecure.
 
 
=== カスタムカラーとテーマ ===
 
 
''face'' を使うことで簡単に色をカスタマイズすることができます:
 
(set-face-background 'region "color-17")
 
(set-face-foreground 'region "white")
 
(set-face-bold-p 'font-lock-builtin-face t )
 
 
You can have let Emacs tell you the name of the face where the point is. Use the ''customize-face'' function for that. The facility will show you how to set colors, bold, underline, etc.
 
 
Emacs in console can handle 256 colors, but you will have to use an appropriate terminal for that. For instance URxvt has support for 256 colors. You can use the ''list-colors-display'' for a comprehensive list of supported colors. This is highly terminal-dependent.
 
 
=== SyncTeX サポート ===
 
 
Emacs は強力な LaTeX エディタです。LaTeX モードを必要に応じて自由に編集・作成することができます。
 
 
Still, there might be some challenges, like SyncTeX support. First you need to make sure your TeX distribution has it. If you installed TeX Live manually, you may need to install the ''synctex'' package.
 
# umask 022 && tlmgr install synctex
 
 
SyncTeX support is viewer-dependent. Here we will use Zathura as an example, so the code needs to be adapted if you want to use another PDF viewer.
 
 
(defcustom tex-my-viewer "zathura --fork -s -x \"emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"'\"'\"%{input}\"'\"'\")) (goto-line %{line}))'\""
 
"PDF Viewer for TeX documents. You may want to fork the viewer
 
so that it detects when the same document is launched twice, and
 
persists when Emacs gets closed.
 
 
Simple command:
 
 
zathura --fork
 
 
We can use
 
 
emacsclient --eval '(progn (switch-to-buffer (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'
 
 
to reverse-search a pdf using SyncTeX. Note that the quotes and double-quotes matter and must be escaped appropriately."
 
:safe 'stringp)
 
 
Here we define our custom variable. If you are using AucTeX or Emacs default LaTeX-mode, you will have to set the viewer accordingly.
 
 
Now open a LaTeX source file with Emacs, compile the document, and launch the viewer. Zathura will spawn. If you press {{ic|Ctrl+Left click}} Emacs should place the point at the corresponding position.
 
 
=== Systemd ファイルのシンタックスハイライト ===
 
 
[https://github.com/holomorph/systemd-mode systemd-mode] を使うことができます。
 
 
もしくは init ファイルに以下を追加することで、簡単に emacs で systemd のファイル (サービスやタイマーなど) をカラー表示できます:
 
 
(add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
 
(add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))
 
 
=== emacs-nox のクリップボードサポート ===
 
 
emacs-nox で [[Xorg]] クリップボードを使うには、{{Pkg|xclip}} を[[インストール]]して以下の関数を {{ic|~/.emacs}} に追加してください [https://lists.gnu.org/archive/html/help-gnu-emacs/2014-08/msg00189.html]:
 
 
{{bc|1=
 
;; use xclip to copy/paste in emacs-nox
 
(unless window-system
 
(when (getenv "DISPLAY")
 
(defun xclip-cut-function (text &optional push)
 
(with-temp-buffer
 
(insert text)
 
(call-process-region (point-min) (point-max) "xclip" nil 0 nil "-i" "-selection" "clipboard")))
 
(defun xclip-paste-function()
 
(let ((xclip-output (shell-command-to-string "xclip -o -selection clipboard")))
 
(unless (string= (car kill-ring) xclip-output)
 
xclip-output )))
 
(setq interprogram-cut-function 'xclip-cut-function)
 
(setq interprogram-paste-function 'xclip-paste-function)
 
))
 
}}
 
 
{{Tip|以下を追加することでターミナルマウスサポートも有効にできます:
 
{{bc|1=
 
;; xterm mouse support
 
(require 'mouse)
 
(xterm-mouse-mode t)
 
}}
 
[http://www.opensource.apple.com/source/emacs/emacs-51/emacs/lisp/mwheel.el mwheel.el] を参照。}}
 
   
 
== パッケージ ==
 
== パッケージ ==
897行目: 920行目:
   
 
{{Pkg|mcpp}} パッケージまたは {{Pkg|gcc}} パッケージをインストールする必要があります。''xrdb'' は [[X resources]] を前処理するために C のプリプロセッサ ''cpp'' を使用します。C のプリプロセッサがインストールされていない場合、''xrdb'' は C のプリプロセッサを実行しないため WINDOW_FOREGROUND が16進数のカラーコードに展開されません。
 
{{Pkg|mcpp}} パッケージまたは {{Pkg|gcc}} パッケージをインストールする必要があります。''xrdb'' は [[X resources]] を前処理するために C のプリプロセッサ ''cpp'' を使用します。C のプリプロセッサがインストールされていない場合、''xrdb'' は C のプリプロセッサを実行しないため WINDOW_FOREGROUND が16進数のカラーコードに展開されません。
  +
  +
=== Gccemacs を使用すると Emacs systemd サービスが起動しない ===
  +
  +
Gccemacs (ブランチ {{ic|emacs-native-comp}} または {{ic|pgtk-nativecomp}}) を使っているときに、systemd サービスを開始しようとすると、{{ic|.eln}} ファイルが見つからないというエラーメッセージが記録されることがあります。
  +
  +
{{hc|$ journalctl --user -xb -g eln|<nowiki>
  +
emacs[7507]: emacs: ../native-lisp/28.0.50-x86_64-pc-linux-gnu-fc9c33938bf279333039c28064d363e8/lisp-mode-410874a46ab8852855281f021ca61fe7-1738806322de892570d69dfc55b437c2.eln: cannot open shared object file: No such file or directory
  +
</nowiki>}}
  +
  +
回避策として、{{ic|[Service]}} セクションで {{ic|emacs.service}} の {{ic|WorkingDirectory}} 行を [[systemd#ユニットファイルの編集|編集]] します。
  +
{{hc|emacs.service|<nowiki>
  +
[Service]
  +
...
  +
WorkingDirectory=/usr/lib/emacs/28.0.50/x86_64-pc-linux-gnu/
  +
...
  +
</nowiki>}}
  +
  +
{{Note|{{ic|WorkingDirectory}} パラメータは、既存の {{ic|Restart}} パラメータの ''前'' に定義する必要があります。}}
   
 
=== カラー出力の問題 ===
 
=== カラー出力の問題 ===
923行目: 964行目:
 
* {{ic|/etc/hosts}} の設定が間違っていると、Emacs の起動が5秒以上遅くなることになります。詳しくはネットワーク設定ガイドの '[[ネットワーク設定#ホストネームの設定|ホストネームの設定]]' を見てください。
 
* {{ic|/etc/hosts}} の設定が間違っていると、Emacs の起動が5秒以上遅くなることになります。詳しくはネットワーク設定ガイドの '[[ネットワーク設定#ホストネームの設定|ホストネームの設定]]' を見てください。
   
  +
* 原因を探るシンプルな方法は、{{ic|~/.emacs}} (または {{ic|~/.emacs.d/init.el}}) にて予想されるセクションをコメントアウト(例えば行頭に ';' を入力)し、変化するか確認するため Emacs を再度開始することです。"require" と "load" を使用することで、特に大きな拡張機能を使った時、起動が遅くなり得ることを心に留めてください。原則として、これらはターゲットが次のいずれかである場合にのみ使用する必要があります。Emacsが起動時に必要とするか、あるいは拡張機能を自動ロードする場合です。そうでなければ、'autoload' 関数を直接使用できます。 たとえば、
* A simple way to search for the cause is to comment-out (i.e., prefix lines with ';') suspect sections of your {{ic|~/.emacs}} (or {{ic|~/.emacs.d/init.el}}) then start Emacs again to see if there's any change. Keep in mind use of "require" and "load" can slow the startup down, especially when used with larger extensions. They should, as a rule, only be used when their target is either: needed once Emacs starts or provides little more than "autoloads" for an extension. Otherwise, use the 'autoload function directly. For example, instead of:
 
   
 
(require 'anything)
 
(require 'anything)
   
  +
の代わりに、以下が使えます。
you might use:
 
   
 
(autoload 'anything "anything" "Select anything" t)
 
(autoload 'anything "anything" "Select anything" t)
 
=== 不適切なネットワーク設定 ===
 
 
$ emacs -q
 
 
で起動が遅い場合、おそらくネットワーク設定に問題があります。何が問題があるのか確認するために、コンピュータから送信されたネットワークパケットを見て何かおかしな挙動がないかチェックする必要があります (Wireshark などのプログラムを使う)。例えば、DNS エラーの場合、{{ic|/etc/hosts}} に以下を追加してください:
 
 
127.0.0.1 localhost HOSTNAME
 
 
HOSTNAME は次のコマンドで表示されるホストネームに置き換えて下さい:
 
 
$ hostname
 
   
 
=== Cannot open load file: ... ===
 
=== Cannot open load file: ... ===
   
  +
このエラーに共通する主な原因は、'load-path' 変数に拡張機能が置かれているディレクトリのパスが含まれていないことです。解決するには、拡張機能のロードを試みる前に、適切なパスをリストへ追加します:
The most common cause of this error is the 'load-path' variable not including the path to the directory within which the extension is located. To solve this, add the appropriate path to the list to be searched prior to attempting to load the extension:
 
   
 
(add-to-list 'load-path "/path/to/directory/")
 
(add-to-list 'load-path "/path/to/directory/")
   
  +
拡張機能のためのパッケージを使用しようとして、かつ Emacs が '/usr' 以外のプレフィックスで設定されたとき、ロードパスを更新する必要があります。以下を {{ic|~/.emacs}} のパッケージによって提供される処理の前に配置します:
When attempting to use packages for extensions and Emacs has been configured with a prefix other than '/usr', the load-path will need to be updated. Place the following in {{ic|~/.emacs}} prior to the instructions provided by the package:
 
   
 
(add-to-list 'load-path "/usr/share/emacs/site-lisp")
 
(add-to-list 'load-path "/usr/share/emacs/site-lisp")
   
  +
もし手動で Emacs をコンパイルしたら、デフォルトのプレフィックスは '/usr/local' であることを心に留めてください。
If compiling Emacs by hand, keep in mind that the default prefix is '/usr/local'.
 
   
 
=== デッドアクセントキーの問題: '<dead-acute> is undefined' ===
 
=== デッドアクセントキーの問題: '<dead-acute> is undefined' ===
960行目: 989行目:
 
https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html
 
https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html
   
  +
問題の説明: Emacs の最近のバージョンでは、
Explaining the problem: in recent versions of
 
  +
アクセントキーを使用する通常の方法は、期待通りに動きません。'fiancé' のような単語をアクセントしようとすると上のメッセージが表示されます。
b72
 
Emacs, the normal way to use accent keys doesn't work as expected. Trying to accent a word like 'fiancé' will produce the message above.
 
   
  +
解決するには、スタートアップファイル {{ic|~/.emacs}} の上部に以下の行を記述します。
A way to solve it is just put the line above on your startup file, {{ic|~/.emacs}}:
 
   
 
(require 'iso-transl)
 
(require 'iso-transl)
   
And no, it isn't a bug, but a feature of new Emacs versions. Reading the subsequent messages about it on the mail list, we found it (https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00179.html):
+
さらに、これは不具合ではなく、新しい Emacs バージョンの機能です。メーリングリストでの本件に関するメッセージを読むと、以下であることが分かりました (https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00179.html):
   
  +
:''これは何も自動的にロードされないように見えます。なぜなら、iso-transl と iso-acc の間に選択があるからです。両方とも、C-x 8 あるいは ALt-<accent> プレフィックスでインプットメソッドを提供するように見えます。しかし、あなたとわたしがしたことは、アクセントのために、ただデッドキー(^, ´, `, ~, ¨)を押し、それからアクセントされる文字を "統合する" ため別のキーを押しただけです。そしてここでは Alt キーが押されていません!ドキュメントによると、これは8ビットエンコーディングに適しているように見えます。そのため UTF-8 では、かなり役立たないはずです。私は、これが紹介されたときにこの不具合を報告しました。しかし、このバグは機能として分類されたように見えます。。。多分これは、かなり役立たないけど、ただファイルが自動ロードされるためだけです。''
:''It seems that nothing is loaded automatically because there is a choice betwee iso-transl and iso-acc. Both seem to provide an input method with C-x 8 or Alt-<accent> prefix, but what you and I are doing is just pressing a dead key (^, ´, `, ~, ¨) for the accent and then another key to "compose" the accented character. And there is no Alt key used in this! And according to documentation it seems be appropriate for 8-bit encodings, so it should be pretty useless in UTF-8. I reported this bug when it was introduced, but the bug seems to be classified as a feature ... Maybe it's just because the file is auto-loaded though pretty useless. ''
 
   
 
=== C-M-% やその他のバインディングが emacs nox で動作しない ===
 
=== C-M-% やその他のバインディングが emacs nox で動作しない ===
993行目: 1,021行目:
 
=== Emacs-nox の出力が汚い ===
 
=== Emacs-nox の出力が汚い ===
   
  +
ターミナル上で動作している時、色、インデント、あるいは出力に関するものが狂ったように見えます。(多分?)Emacs がある点で特別な文字を送り、それが現在のターミナルと競合しているためのようです。
When working in a terminal, the color, indentation, or anything related to the output might become crazy. This is (probably?) because Emacs was sent a special character at some point which may conflict with the current terminal.
 
  +
もしこれが起きた時、できることは {{ic|M-x redraw-display}} を実行することです。これにより、ターミナルの表示を再描画します。この問題が頻繁に起きるなら、たとえば
If this happens you can do {{ic|M-x redraw-display}}, which will redraw the terminal's display. If this problem happens frequently, you might want to bind the command to a key, e.g. by putting something like
 
 
(global-set-key (kbd "<f7>") 'redraw-display)
 
(global-set-key (kbd "<f7>") 'redraw-display)
  +
といった記述を、.emacs ファイルに置くといった方法で、コマンドをキーに割り当てたいと思うかもしれません。
in your .emacs file.
 
   
  +
グラフィカルバージョンの Emacs はこの問題が起きません。
Graphical Emacs does not suffer from this issue.
 
   
 
=== emacs ターミナルにおかしなエスケープ数字 (utf-8) が表示される ===
 
=== emacs ターミナルにおかしなエスケープ数字 (utf-8) が表示される ===
1,024行目: 1,052行目:
 
{{hc|~/.emacs|
 
{{hc|~/.emacs|
 
(defadvice terminal-init-screen
 
(defadvice terminal-init-screen
;; The advice is named `tmux', and is run before `terminal-init-screen' runs.
+
;; `tmux' と名付けることをアドバイスします。そして `terminal-init-screen' が実行される前に実行します。
 
(before tmux activate)
 
(before tmux activate)
  +
;; Docstring. これはアドバイスを記述し、emacs 内部で有効になります;
;; Docstring. This describes the advice and is made available inside emacs;
 
;; for example when doing C-h f terminal-init-screen RET
+
;; たとえば、 C-h f terminal-init-screen RET を実行したときに表示されます。
 
"Apply xterm keymap, allowing use of keys passed through tmux."
 
"Apply xterm keymap, allowing use of keys passed through tmux."
;; This is the elisp code that is run before `terminal-init-screen'.
+
;; これは elisp コードで、`terminal-init-screen' より前に実行されます。
 
(if (getenv "TMUX")
 
(if (getenv "TMUX")
 
(let ((map (copy-keymap xterm-function-map)))
 
(let ((map (copy-keymap xterm-function-map)))
1,045行目: 1,073行目:
 
== 派生 ==
 
== 派生 ==
   
Emacs の実装は多数存在します。おそらく GNU/Emacs が一番ポピュラーです。
+
Emacs の実装は多数存在します。おそらく GNU/Emacs が一番ポピュラーです。軽量な Emacs 互換のテキストエディタは Arch のリポジトリや [[AUR]] にあります。
 
軽量な Emacs 互換のテキストエディタは Arch のリポジトリや [[AUR]] にあります。
 
 
=== mg ===
 
 
mg (旧名 MicroGnuEmacs) は C で書かれた軽量な Emacs の実装です。
 
 
{{Pkg|mg}} パッケージから入手できますが、上流の [http://homepage.boetes.org/software/mg/ ページ] からソースをダウンロードすることも可能です。mg は UTF-8 をサポートしていません。
 
 
=== zile ===
 
 
公式ウェブ[https://www.gnu.org/software/zile/ ページ]によると "GNU Zile は軽量な Emacs クローンです。Zile は Zile Is Lossy Emacs の略となっています。Zile は出来る限り Emacs に近づくように書かれており、きっと全ての Emacs ユーザーの手に馴染むでしょう"。Zile は UTF-8 をサポートしていません。
 
 
{{Pkg|zile}} パッケージからインストールできます。
 
 
最新の tarball は公式の GNU [http://ftp.sh.cvut.cz/MIRRORS/gnu/pub/gnu/zile/ ミラー] から落とせます。
 
 
=== uemacs ===
 
   
  +
* {{App|mg|C で書かれた軽量な Emacs の実装です。mg は UTF-8 をサポートしていません。|https://homepage.boetes.org/software/mg/|{{Pkg|mg}}}}
Linus Torvalds によるカスタム版 Micro-emacs。{{AUR|uemacs-git}} でインストール可能。
 
  +
* {{App|Zile|"Zile Is Lossy Emacs" Zile は出来る限り Emacs に近づくように書かれている軽量な Emacs クローンです。Zile は UTF-8 をサポートしていません。|https://www.gnu.org/software/zile/|{{Pkg|zile}}}}
  +
* {{App|uemacs|Linus Torvalds によるカスタム版 Micro-emacs。|https://git.kernel.org/pub/scm/editors/uemacs/uemacs.git|{{AUR|uemacs-git}}}}
  +
* {{App|emacs-ng|Emacsの新しいアプローチ - TypeScript、Threading、Async I/O、WebRender を含む。|https://github.com/emacs-ng/emacs-ng|{{AUR|emacs-ng-git}}}}
  +
* {{App|qemacs|"Quick Emacs" は、Emacs Lisp インタプリタをベースとしていますが、コードベースが小さく、ユーザーインターフェイスが簡素化されています。|https://bellard.org/qemacs/|{{AUR|qemacs}}}}
  +
* {{App|sxemacs|xemacs のフォーク。|http://www.sxemacs.org/|{{AUR|sxemacs}}}}
  +
* {{App|jove|Jonathan のバージョンの Emacs は、Lisp を含まない Emacs に似たエディタです。|https://github.com/jonmacs/jove|{{AUR|jove}}}}
   
  +
=== Emacs ディストリビューション ===
最新 (2005) の tarball は [ftp://ftp.cs.helsinki.fi/pub/Software/Local/uEmacs-PK/ こちら] にあります。
 
   
  +
* [[Spacemacs]] - コミュニティ主導の Emacs ディストリビューション
=== remacs ===
 
  +
* [https://github.com/doomemacs/doomemacs/ Doom Emacs] - 頑固な火星人ハッカーのための Emacs フレームワーク
  +
* [https://github.com/snackon/Witchmacs/ Witchmacs] - 最もかわいい Emacs ディストリビューション
  +
* [https://github.com/pprobst/yukimacs/ Yukimacs] - Uncle Dave の Emacs と Witchmacs に大きく影響された (Spacemacs や Doom Emacs ではなく) ゼロから構築された GNU/Emacs 構成
   
  +
その他: [https://www.emacswiki.org/emacs/StarterKits Starter Kits]
'''remacs''' はコミュニティによる Emacs の Rust 移植です。{{AUR|remacs-git}} パッケージでインストールできます。
 
   
 
== 参照 ==
 
== 参照 ==
1,080行目: 1,099行目:
 
* [http://wikemacs.org WikEmacs - 読みやすいが不完全な Emacs wiki]
 
* [http://wikemacs.org WikEmacs - 読みやすいが不完全な Emacs wiki]
 
* [http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html Emacs とそのショートカットの有用な紹介]
 
* [http://www2.lib.uchicago.edu/keith/tcl-course/emacs-tutorial.html Emacs とそのショートカットの有用な紹介]
* [https://d0edfcdc0ccc1cd13cdab5eb986fb92e8660dbef.googledrive.com/host/0B6LMD0u8OhYYZEotN2QyR1hwR1k/ Emacs 教会 (Google ドライブ)]
+
* [https://web.archive.org/web/20160506064817/https://d0edfcdc0ccc1cd13cdab5eb986fb92e8660dbef.googledrive.com/host/0B6LMD0u8OhYYZEotN2QyR1hwR1k/ The Emacs 教会 (Google ドライブ)]
 
* [https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf 公式リファレンスカード]
 
* [https://www.gnu.org/software/emacs/refcards/pdf/refcard.pdf 公式リファレンスカード]
 
* [[EXWM]] - Emacs X Window Manager
 
* [[EXWM]] - Emacs X Window Manager

2023年10月29日 (日) 02:58時点における最新版

Emacs は拡張性があり、カスタマイズ可能な、セルフドキュメント方式のリアルタイム表示エディタです。Emacs のコアには、多数の Emacs の内蔵機能や拡張を実装するのに使われている言語である、Emacs Lisp のインタプリタが存在します。GNU Emacs 22 から GTK がデフォルトの X ツールキットとして使われていますが、CLI 環境でも負けず劣らずに機能します。

目次

インストール

次のパッケージのいずれかを インストール して下さい。:

他のバリエーションも検索できます。例として、emacs-gitAUR は GNU Emacs の開発ブランチを提供します。

Emacs の実行

emacs を起動する前に、終了の方法を知っておきましょう (特にターミナルで実行する場合): Ctrl+xCtrl+c キーシーケンスを使って下さい。

Emacs を起動するには次を実行:

$ emacs

また、コンソールから使うには:

$ emacs -nw

(.emacs を使わずに) 高速でロードして CLI で編集するには:

$ emacs -Q -nw

nox バージョンをインストールしている場合、'emacs' と 'emacs -nw' は同じになります。

ファイル名を指定することですぐにファイルを開くこともできます:

$ emacs filename.txt

色無し

デフォルトでは、Emacs はハイパーリンクが濃青で表示されるカラーテーマで起動します。Emacs をカラーテーマやスキームを使わずに起動するには:

$ emacs -nw --color=no

このコマンドでは全てのテキストがターミナルの前景色だけで表示されます。通常は黒背景に白字か、白背景に黒字となります。

デーモンとして

毎回 .emacs ファイルをロードするため Emacs を起動するときには時間が多少かかります。また、別のインスタンスから同じファイルにアクセスしたいと思うときもあるかもしれません。バージョン23から、Emacs はユーザーが接続できるデーモンとして起動することが可能になっています。Emacs をデーモンとして実行するには:

$ emacs --daemon

起動時にデーモンを実行してウィンドウをデーモンに接続すると良いでしょう。さらに、グラフィカル・コンソールクライアント両方を同意時にデーモンに接続して GUI を素早く起動することも可能です。

デーモンに接続したいときは場合は次のコマンドを使って下さい (グラフィカル環境から実行したときはグラフィカルクライアントが、tty などのコンソールから実行したときはコンソールクライアントが起動します):

$ emacsclient

グラフィカル環境にいるときもコンソールクライアントを使いたい場合は次のコマンドを使って下さい:

$ emacsclient -t

さらに、-a "" パラメータを追加することもできます。 これで、最初にコマンドを実行したときは、デーモンとして emacs が起動します。バックグラウンドで動き続けるので後で呼び出した時に起動時間が早くなります (バッファも残り続けます)。

ターミナルや他のプログラムからクライアントを起動した場合、呼び出すプログラムを使うことで Emacs クライアントを閉じなくてもクライアントを使い続けることができます。そのためには、 -n (--no-wait) パラメータを使ってクライアントを起動します:

$ emacsclient -nc

Mutt や Git などのプログラムは (コミットメッセージを読むための) エディタが終了するまで待機するため、-n パラメータを使うことはできません。デフォルトエディタが設定されている場合、他のエディタを指定する必要があるかもしれません (例: emacsclient -a "" -t)。

以下のシェル設定が利用できます:

alias emt='emacsclient -nc -a ""'
alias emc='emacsclient -t -a ""'
EDITOR='emacsclient -a ""'

ただしこれには注意事項があります: コマンドのスペースの関係で多数のプログラムが外部エディタをロードすることはできません。

スクリプトを書くほうがもっと使い勝手が良く信頼性があります:

/usr/local/bin/emc
#!/bin/sh
if [ -z "$DISPLAY" ]; then
    IS_GRAPHICAL=true
else
    IS_GRAPHICAL=$(emacs --batch -Q --eval='(if (fboundp '"'"'tool-bar-mode) (message "true") (message "false"))' 2>&1)
fi

if $IS_GRAPHICAL; then
    emacsclient -a "" -nc "$@"
else
    emacsclient -a "" -t "$@"
fi

スクリプトは実行可能属性を付けて下さい:

# chmod 755 /usr/local/bin/emc

これで 'emc' が期待通りに動作するようになります。このクライアントをデフォルトのエディタにしたいときは上記のスクリプトで EDITOR 環境変数を設定すれば OK です。

systemd ユニットとして

Emacs 26.1 から systemd ユニットが含まれています。Emacs のインストール後に以下のように有効化してください:

 $ systemctl --user enable --now emacs

Emacs サーバーを実行したいユーザーで上記のコマンドを実行してください。サービスの起動後、Emacs の準備ができます。ユニットファイルは /usr/lib/systemd/user/emacs.service に存在します。ユニットファイルの中身は以下のようになっています:

/usr/lib/systemd/user/emacs.service
[Unit]
Description=Emacs text editor
Documentation=info:emacs man:emacs(1) https://gnu.org/software/emacs/

[Service]
Type=simple
ExecStart=/usr/bin/emacs --fg-daemon
ExecStop=/usr/bin/emacsclient --eval "(kill-emacs)"
Environment=SSH_AUTH_SOCK=%t/keyring/ssh
Restart=on-failure

[Install]
WantedBy=default.target

systemd のユーザーユニットはログインシェル (~/.bash_profile など) から環境変数を継承しないため、~/.pam_environment に変数を設定すると良いでしょう。詳しくは Systemd/ユーザーを参照。

emacs をデーモンとして起動する場合、VISUALEDITOR 環境変数を emacsclient に設定することでプログラムからエディタを起動するときにエディタの新しいインスタンスを起動するかわりに emacsclient が使われるようになります。外部エディタを使用するプログラムとしてメールプログラム (メッセージを編集するため) や Git (コミットメッセージを編集するため)、less (v コマンドで表示されたファイルを編集するため) などが存在します。emacsclient の -n (--nowait) オプションは使用しないでください。基本的にプログラムはエディタが終了したときに編集が完了したと認識するためです。

GUI の Emacs のスタートメニューエントリなども emacs ではなく emacsclient が使われるように変更することを推奨します。

ヘルプを見る

Emacs にはチュートリアルが組み込まれており、スプラッシュ画面の最初のリンクをクリックし、メニューから Help->Emacs Tutorial を選択するか、C-h t を押してアクセスすることができます。

Emacsは設計上、セルフ・ドキュメンテーションです。そのため、例えば特定のコマンドの名前やキーバインドを決定するために、非常に多くの情報を利用することができます。C-h C-h ですべてのコンテキスト・ヘルプのバインディングを見ることができます。

Emacs にはリファレンスカードも含まれており、初心者にも上級者にも便利です。/usr/share/emacs/<バージョン>/etc/refcards/ (<バージョン> はあなたの emacs のバージョンに置き換えます) をご覧ください。

マニュアル

Emacsを本当に使いこなしたいのであれば、やはり公式のマニュアルが一番おすすめです。

  • Emacs: コンプリート Emacs ユーザーマニュアル
  • Emacs FAQ
  • Emacs Lisp: イントロ プログラミング言語を使ったことがない人向け
  • Elisp: 既にプログラミング言語に慣れている人向け

GNU.org から PDF としてアクセスすることもできますし、組み込まれた info リーダーのおかげで Emacs 自体から直接アクセスすることも可能です。C-h i を使ってください。 ブックを選ぶには m を押してください。

一部のユーザーは、便利なショートカット、ウィンドウ幅に合わせた段落、現在の画面解像度に合わせたフォントのために、info を使用してブックを読むことを好みます。目に刺激が少ないと感じる人もいます。最後に、本から任意の Emacs バッファーにコンテンツを簡単にコピーでき、例から直接 Lisp コードスニペットを実行することもできます。

詳しくは Info を読むといいかもしれません。C-h i m info <RET> です。 情報モード中に ? を押すと、ショートカットのクイックリストが表示されます。

設定

Emacs の大きな特徴の一つは、その拡張性と設定のしやすさです。Emacs にはカスタマイズエンジンが組み込まれています。カスタマイズのオプションのリストを表示するには、M-x customize を実行します。このインタフェースの使い方については Easy Customization 情報ノードを参照してください。(info "(emacs) Easy Customization") をご覧下さい。カスタマイズを適用したら 1つの Emacs セッションに対してのみ設定することも、設定ファイル に保存して Emacs セッションにまたがって保存することもできます。"適用して保存" を選択した場合、カスタマイズ・インタフェースが適用されることに注意してください。

Emacs を起動するとき、通常は 初期化ファイル 、略して initファイル から Lisp プログラムを読み込もうとします。 このファイルは、もし存在すれば、あなたのために Emacs を初期化する方法を指定します。 Emacs は '~/.emacs', '~/.emacs.el', '~/.emacs.d/init.el', または '~/.config/emacs/init.el' というファイル名であなたの init ファイルを検索します。詳しくは info ノードの 初期化ファイル を見て下さい。参照: (info "(emacs) Init File")

クイックスタート

Emacs は複雑ですが、そのカスタマイズと拡張性のレベルによってもたらされる利益を理解し始めるのにそう時間はかからないでしょう。さらに、幅広い拡張を利用することで Emacs はあらゆる種類の文章編集のための強力な環境に姿を変えることができます。

Emacs には素晴らしいチュートリアルが内蔵されており、スプラッシュ画面の最初のリンクをクリックしてアクセスできます。メニューから Help->Emacs Tutorial を選択するか 'F1' の後に 't' を押して下さい。このページは Emacs を始めるのに追加的なリソースになるように書かれています。

初心者にもエキスパートにも役立つ、リファレンスカードのセットも Emacs に含まれています、/usr/share/emacs/<version>/etc/refcards/ を見て下さい (<version> はあなたの emacs のバージョンに置き換えて下さい)。

基本的な用語と慣習

始めは慣れないと思うかもしれませんが Emacs にはいくつか特別な用語法と約束事があり、必要に応じて紹介していきます。ただ、Emacs を使うにあたって当然知ってるべきとされるような、基本的な用語についてはあらかじめ説明しておいたほうが良いでしょう。

真っ先に知るべきはバッファの概念です。バッファは Emacs の中のデータを表します。例えば、Emacs でファイルを開いたとき、ディスクからファイルから読み込まれてバッファに中身が保存され、バッファを編集して後でディスクに上書き保存することができます。バッファはテキストに限られず、画像やウィジェットなども含めます。作業中でもバッファでアプリケーションを表示することすらできます。こういう考え方もできます: ディスク上のデータは'ファイル'であり、一方、Emacs 上のデータは'バッファ'である。

Emacs におけるキーシーケンスの決まり事も見慣れないかもしれません。即ち:

C-x は Control-x を示します

M-x は Meta-x を示します

ノート: 'Meta' は多くの場合 Alt キーに相当します。また、Esc キーを使うことも可能です。

例えば、Emacs を終了するには次のキーシーケンスを使います: C-x C-c。これは "Control を押しながら 'x' を押す。手を離す。Control を押しながら 'c' を押す" と読み替えることができます。Emacs にはメニューバーが存在しますが、キーシーケンスを使いこなせるように練習することを推奨します。以下から、Emacs で使われるキーバインディングと慣習について説明します。

移動

カーソルの移動は他のグラフィカルエディタとよく似ています。マウスや方向キーを使ってカーソルの位置 (Emacs ではポイントと呼ばれます) を変更することができます。一般的な移動コマンドは方向キーで出来ますが、Emacs には他にも便利なバインディングが存在します。1文字先に移動するには C-f を使用して、1文字前に移動するには C-b を使用します。C-nC-p でそれぞれ次の行と前の行に移動できます。基本的に、マウスや方向キーを使うよりもこれらのキーシーケンスを使うことが推奨されています。

当然、Emacs には、単語や文単位で移動できる、もっと高度な移動コマンドが用意されています。M-f は1単語先に移動して M-b は1単語前にポイント移動します。同じく、M-e は1文先にポイント移動して M-a は前に戻ります。

ここまでは、紹介した全ての移動コマンドはポイントに関連しています。M-< を使うことでバッファの最初にポイントを移動することができ、逆に、M-> はバッファの最後に移動します。特定の行番号にポイントを移動するには、M-g g を使います。M-g g は移動したい行番号を尋ねます。また、現在の行の先頭と末尾に移動するには、C-a あるいは C-e を使って下さい。

ノート: 上記のコマンドを含む全てのコマンドのキーバインドは、現在有効になっているモードによって多少ながら変わってくる可能性があります。しかしながら、同一の機能を実行するのにコマンドを置き換えることはあまりありません。詳しくはモードを見て下さい。

ファイルとバッファ

Emacs にはファイルを操作するためのコマンドが用意されています。このセクションでは最もよく使われるコマンドを紹介します。ファイルを開くには C-x C-f を使います (Emacs ではこのコマンドを 'find-file' と呼びます)。指定されたファイルが存在しなかった場合、Emacs は空のバッファを開きます。バッファを保存するとバッファの中身が入ったファイルが作成されます。C-x C-s を使うことでバッファを保存できます。別のファイル名でバッファを保存するには、C-x C-w を使って下さい (this is a mnemonic for the command 'write-file')。新しいファイル名が尋ねられ、ディスクにファイルが書き込まれます。C-x s で全てのバッファを保存することも可能です。最後に保存されていた状態からバッファに変更が加えられている場合、保存を実行するかどうか訊くプロンプトが表示されます。

ノート: ファイルに対応するバッファが既に開かれている場合 C-x C-f はディスクからファイルを読み込みません。ディスクからファイルを再度読み込むには、(1) まずバッファを閉じて (C-x k)、それからファイルを開くか (C-x C-f) あるいは (2) M-x revert-buffer を使ってディスク上のデータに戻して下さい。それか (3) C-x C-v でファイルを現在のバッファにロードするか (4) C-x RET r RET で同一コードでファイルを再読み込みしてください。

"find-file" や "write-file" などのインタラクティブなコマンドでは Emacs ウィンドウの一番下の行に入力が求められます。この行のことはミニバッファと呼びます。ミニバッファでは基本的な編集コマンドを使うことができ、多くの *nix シェルで利用できるのと同じようなタブ補完機能があります。<TAB> を2回連続で押すと補完リストが表示され、マウスを使ってリストから補完候補を選択することも可能です。ミニバッファでの補完はコマンドやファイル名など様々な形で使えます。

ミニバッファには履歴機能も存在します。前に入力したコマンドは Up Arrow または M-p を使うことで再呼び出しできます。

ミニバッファは C-g を押すことでいつでも終了できます。

ファイルを複数開いたら、ファイルを切り替える手段が必要です。Emacs 内に既に存在するバッファにファイルを開くと、Emacs はそのバッファに切り替えます。しかしながらこれは効率的とは言えません。Emacs には表示するバッファを選択する C-x b が存在します (タブ補完が使えます)。存在しないバッファの名前を入力すると、その名前で新しいバッファが作成されます。

ノート: 前のバッファに切り替えるには C-x b <RET> を使います。前のバッファがデフォルトだからです。

全てのバッファのリストを C-x C-b で表示することができます。バッファが必要なくなったときは C-x k で削除することが可能です。

編集

Emacs には多数の編集コマンドが存在します。まだ紹介していない最も重要なコマンドはおそらく 'undo' でしょう。C-_ または C-/ で実行することができます。基本的に移動コマンドには対応する削除コマンドが存在します。例えば M-<backspace> で後方の単語を削除することができ、M-d で前方の単語を削除できます。行末または文章の終わりまで削除するにはそれぞれ C-k または M-k を使います。

1行は80文字を超えていはいけないという経験則が存在します。1行の長さを長くしすぎないことで、特にウィンドウの縁で改行してしまうような場合に、可読性を維持することができます。改行の自動挿入 (または削除) は Emacs では詰め込み (filling) と呼ばれます。M-q を使うことでパラグラフを折り返させることができます。

文字列と単語はそれぞれ C-tM-t で置き換えることが可能です。例えば Hello World!World! Hello と置き換えられます。

単語の大文字小文字はすぐに修正できます。M-l は単語を小文字に変換し (HELLOhello)、M-u は単語を大文字に変換します (helloHELLO)。そして M-c は単語の最初の文字を大文字にして他の文字は小文字にします (hElLoHello)。

kill と yank とリージョン

リージョンとは、2点間にあるテキストです。2点のうちの1つは、マーク と呼ばれ、もう1つはポイントです。 C-<SPC> によってマークの位置がセットされ、その後でポイントが移動することでリージョンが作られます。GNU Emacs 23.1 以降、リージョンはデフォルトで可視化されます。リージョン上で動作する多くのコマンドがあり、もっともよく使われるコマンドに killing コマンドがあります。

Emacs では、カット&ペーストはそれぞれ、killyank と呼ばれます。1文字以上の文字を削除するコマンド( C-kM-d といった上で記述したコマンドも含めて)は、実際にテキストをカットし、kill-ring として知られるものに追加します。kill-ring は、単に kill されたテキストのリストです。kill-ring は、デフォルトでは直近60個の kill されたテキストを保存します。kill に成功すると、リストの先頭に接続されて保存されます。

C-wM-w によって、それぞれリージョンの kill とコピーができます。

kill されたテキストをバッファに挿入する('yanking' として知られます)ためには、C-y を使います。 C-y は、複数回使用することで、繰り返しテキストを yank できます。前述の通り、以前の kill は、リストに保存されます。しかし、C-y は、そのうち最初のものしか取得しません。それより前の kill は、M-y によってアクセスすることができます。これによって、'yank' で挿入されたテキストをリストの先頭に移動させます。 M-yC-y に続けて使われなければならず、kill-ring をたどるために何度でも使えます。

検索と置換

文字列を検索することは、テキストの編集において一般的な作業です。検索は、C-s (後方検索) または C-r (前方検索) によって実行されます。これらのコマンドは、検索する文字列を入力するプロンプトを表示します。検索は1文字入力するごとに実行され、タイプごとに次に(あるいは前に)一致した文字列にマッチします。次の検索結果に行くには C-s を、前の検索結果に行くには C-r を押します。 もし探しているものが見つかったのであれば、<RET> を押すことで検索を終了できます。一方、検索を開始した場所に戻りたければ C-g を押します。

いったん検索が完了すると (たとえば C-g 等で中断していない場合)、検索された文字列は、次の検索のデフォルト検索文字となります。検索された文字を使用するには、後方検索なら C-s C-s , 前方検索なら C-r C-r をそれぞれ押します。

I-search には、いくつかの有用なコマンドがあります。 M-e によって、検索文字列の編集が可能です。 M-c によって、大文字小文字を区別するか、しないかを切り替えることができます。

正規表現検索は、検索の開始コマンド以外、上述の検索と同様に動作します。 C-M-s あるいは C-M-r によって、それぞれ正規表現による後方検索、前方検索を開始します。いったん正規表現検索を開始すると、文字列検索と同様に C-sC-r を後方検索、前方検索に使用することができます。

検索に加え、文字列や正規表現を置換することができます(それぞれ M-% および C-M-% によって実行されます)。元のテキストと変換後のテキスト用にプロンプトが表示され、それからハイライトされた一致箇所に対する動作のために別のプロンプトが表示されます。多くのオプションが使用できますが(使用できるオプションの完全なリストは ? を押してください)、もっとも一般的に使われるのは、変換を実行する y と、スキップする n 、そしてハイライトされている文字列を含め、以降すべての一致に対して変換する ! になります。

前置引数

C-u は、'universal-argument' コマンドに対応づけられています。'universal-argument' を渡すことによって、より多くの情報をコマンドに提供できます(この情報を '前置引数' と呼びます)。たとえば

C-u 80 %

は、%記号の行を挿入します。また、

C-u 4 M-d

は4単語を削除します。この場合、M-d によって実行されるコマンドへ、要求する単語の数を渡しています。

universal argument は、M-<数字> によって少し早く入力することができます。

M-80 %

インデント

インデントは、1行をインデントする <TAB> やリージョンをインデントする C-M-\ によって実行されます。リージョンが有効(たとえばハイライトされている)場合、<TAB> はリージョンもインデントします。

テキストがどのようにインデントされるかは、正確には有効になっている メジャーモード に依ります。メジャーモードは、しばしば特定の種類のテキストをインデントするときに特化したインデントスタイルを定義します。(より詳しくは Modes を見てください。)

いくつかの場合、ファイルタイプに対して適したメジャーモードがありません。その場合、手動でのインデントが必要になります。リージョンを作成( kill と yank とリージョン 参照)し、C-u <n> C-x <TAB> でインデントを実行してください。(ここで、'<n>' はリージョンに含まれるテキストがインデントされる列の数です。)例えば、

リージョンのインデントを4列追加する:

C-u 4 C-x <TAB>

リージョンのインデントを2列減らす:

C-u -2 C-x <TAB>

ウィンドウとフレーム

Emacs は、多くのファイルを同時に編集するために便利であるよう設計されています。これは、Emacs のインタフェースを3つの階層にわけることで実現されています。つまり、すでに紹介済みのバッファ、ウィンドウフレーム です。

ウィンドウ とは、Emacsでバッファを表示している場所のことです。1つのウィンドウは、一度に1つのバッファしか表示できません。しかし、1つのバッファは複数のウィンドウに表示できます。それぞれのウィンドウの下には、モードライン があります。モードラインには、そのバッファの情報が表示されています。

フレーム とは、Emacs の"ウィンドウ"(一般的な意味。たとえば最近のデスクトップパラダイムの意味での 'ウィンドウ')です。フレームには、タイトルバー、メニューバー、1つ以上の 'ウィンドウ' (Emacs 的な意味。たとえば上で定義した 'ウィンドウ') が含まれます。

以降では、これらの単語は Emacs に存在するものでの定義として使用します。

ウィンドウを水平あるいは垂直に分割するには、それぞれ C-x 2 あるいは C-x 3 を使います。これは、現在のフレームにもう1つのウィンドウを生成する効果があります。複数のウィンドウ間を巡回するには、C-x o を使用します。

ウィンドウ分割の反対は、ウィンドウを削除することです。現在のウィンドウを削除するには C-x 0 を使い、現在のウィンドウ以外を削除するには C-x 1 を使います。

ウィンドウと同様に、フレームも生成や削除が可能です。 C-x 5 2 によってフレームを生成できます。 C-x 5 0 によって現在のフレームを削除し、C-x 5 1 によってr現在のフレーム以外のすべてのフレームを削除します。

ノート: これらのコマンドはバッファには影響しません。たとえば、ウィンドウを削除しても表示されているバッファは kill されません。

モード

Emacs モードは Emacs Lisp で書かれた拡張であり、接続されているバッファの挙動を制御します。大抵の場合、インデントやシンタックスハイライト、テキストを編集するときのキーバインドを提供します。洗練されたモードは Emacs を完全な IDE (統合開発環境) に変貌させます。Emacs は基本的にファイルの拡張子でモードをロードすべきか判断します。

シェルスクリプトを編集するのに役立つモードとして sh-mode, line-number-mode, column-number-mode が存在します。同時に使用することができ、以下のコマンドで呼び出します:

M-x sh-mode <RET>

M-x column-number-mode <RET>

line-number-mode はデフォルトで有効になっていますが、コマンドを再度実行することでオンとオフを切り替えられます:

M-x line-number-mode <RET>

sh-mode は、メジャーモード の1つです。メジャーモードは Emacs を調整し、時には、特定の種類のテキストの編集用に特別なコマンドを提供します。それぞれのバッファでは、メジャーモードは1つだけが有効です。シンタックスハイライトやインデントサポートに加えて、sh-mode はシェルスクリプトを書く助けになるいくつかのコマンドを定義しています。以下に、それらの内のいくつかを示します。

C-c (	 関数定義を挿入する

C-c C-f	 'for' ループを挿入する

C-c TAB	 'if' 文を挿入する

C-c C-w	 'while' ループを挿入する

C-c C-l	 1 から n までの番号付きループを挿入する

'line-number-mode' と 'column-number-mode' はマイナーモードです。マイナーモードはメジャーモードを拡張することができ、同時に任意の数のマイナーモードを有効にできます。

マニュアル

Emacs を本当にマスターしたいのであれば、一番よく読むべき文章はやはり公式マニュアルです:

  • Emacs: 完全な Emacs ユーザーマニュアル
  • Emacs FAQ
  • Emacs Lisp Intro: プログラミング言語を使用したことがない場合
  • Elisp: プログラミング言語をよく知っている場合

これらは、 GNU.org から PDF として入手できます。あるいは Emacs 自身にて組み込みの 'info' リーダー C-h i を用いて直接読むこともできます。本を選択するには m を押してください。

ユーザーの幾人かは、'info' で読むことを好みます。便利なショートカットであり、段落はウィンドウ幅に調整され、フォントは現在の画面解像度に調整されるためです。何人かは目に優しいと気づいています。最後に、本の内容を任意の Emacs バッファへ簡単にコピーでき、さらに例示されている Lisp コードを直接実行することさえできます。

info 本について、もっとよく知りたいなら、C-h i m info <RET> を実行してください。 info モードで ? を押すと、ショートカットの簡易リストが表示されます。

カスタマイズ

Emacs は ~/.emacs を編集するか M-x customize を使うことで設定をすることができます。このセクションでは手動で ~/.emacs を編集する方に焦点をあて、いくつかのカスタマイズ例を示すことで、一般的な Emacs の設定をデモンストレーションします。customize コマンドは調整を行うためのシンプルなインターフェイスを提供しますが、おそらく Emacs に慣れてくるにつれて制約を感じるようになるでしょう。

ここでの例は、すべて Emacs が動作している間に動作します。Emacs 内で式を評価するには、以下を使います。

C-M-x ポイントがある式を評価する

あるいは、

C-x C-e ポイントの直前の ')' を最後のカッコとする式を評価する

何人かのユーザーは、プロンプトで 'yes' や 'no' をタイプすると、すぐに疲れます。その代わりに 'y' や 'n' を使うために:

(defalias 'yes-or-no-p 'y-or-n-p)

カーソルの点滅を止めるには、次を使用:

(blink-cursor-mode -1)

同じく、前のセクションにある column-number-mode を有効にするには:

(column-number-mode 1)

前の2つのコマンドに類似性があるのは偶然ではありません。blink-cursor-mode と column-number-mode は、共にマイナーモードです。ルールとして、マイナーモードは正の数を引数にとると有効になり、負の数で無効になります。引数が省略された時、マイナーモードは on/off を切り替えます。

マイナーモードのその他いくつかの例を示します。以下はそれぞれ、スクロールバー、メニューバー、ツールバーを無効にします。

(scroll-bar-mode -1)
(menu-bar-mode -1)
(tool-bar-mode -1)

変数 'auto-mode-alist' によって、特定のファイル名に対してデフォルトで使われるメジャーモードを変更することができます。以下の例では、'.tut' および '.req' ファイルのデフォルトのメジャーモードを 'text-mode' にします。

(setq auto-mode-alist
  (append
    '(("\\.tut$" . text-mode)
      ("\\.req$" . text-mode))
    auto-mode-alist))

設定は、基底となるモードごとに適用することもできます。基本的な方法は、hook に関数を追加することです。例えば、text-mode でだけインデントをタブの代わりに強制的にスペースを使用するためには:

(add-hook 'text-mode-hook (lambda () (setq indent-tabs-mode nil)))

同様に、場所によらずインデントにてスペースを使用するには:

(setq-default indent-tabs-mode nil)

キーバインドは、2つの方法で調整できます。1つ目の方法は 'define-key' です。'define-key' は、コマンドに対するキーバインドを作成できますが、1つのモードに対してだけ作成します。以下の例では、F8 に、'text-mode' バッファでは行末のホワイトスペースを除去するよう割り当てます。

(define-key text-mode-map (kbd "<f8>") 'delete-trailing-whitespace)

もう1つの方法は、'global-set-key' です。これによって、場所によらずキーにコマンドを割り当てることができます。'query-replace-regexp' (C-M-%) を '<f7>' に割り当てるには:

(global-set-key (kbd "<f7>") 'query-replace-regexp)

他のキーにコマンドを割り当てることは、既存の割当を入れ替えるわけではありません。たとえば、上記例の後、'query-replace-regexp' は、F7C-M-% の両方に割り当てられます。

Emacs のほとんどすべてがカスタマイズできます。Emacs Wiki を通して見ることが基礎固めに適しています。

マルチ設定

複数の設定を使い、Emacs にどれか一つをロードさせることができます。

例えば、2つの設定ファイルを定義してみましょう。

.emacs
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/plugins" nil t)
(load "~/.emacs.d/theme" nil t)

これによって、デーモンとしての起動用にフルカスタムをロードします。しかし、plugins ファイルは巨大で、ロードが遅いです。plugins 機能が不要な新しい Emacs インスタンスを生成したい場合、plugins を毎回ロードすることは面倒です。

.emacs-light
(load "~/.emacs.d/main" nil t)
(load "~/.emacs.d/functions" nil t)
(load "~/.emacs.d/modes" nil t)
(load "~/.emacs.d/theme" nil t)

Emacs を以下のコマンドで起動します。

emacs -q -l ~/.emacs-light

これによって、エイリアスを生成して、呼び出しを簡単にすることができます。

ローカル・カスタム変数

設定ファイル内で変数を定義することができます。この変数はファイル内でローカルに変更することができます。

(defcustom my-compiler "gcc" "Some documentation")

どんなファイルでもローカル変数を定義するには2つの方法があります。完全な詳細のマニュアル を参照してください

  • M-x add-file-local-variable-prop-line は、ファイルの先頭に以下のようなコメント行を追加します。
// -*- my-compiler:g++; mode:c++ -*-
  • M-x add-file-local-variable は、ファイルの末尾付近に行を追加します。
// Local Variables:
// my-compiler: g++
// mode: c++
// End:

変数の効果を得るためには、M-x revert-buffer を実行する必要あることに注意してください。

カスタム変数は、デフォルトでは安全でないと考えられています。もしカスタム変数によって再定義されたローカル変数を含むファイルを開こうとすると、Emacs は確認するよう通知します。

変数を安全であるとして宣言することもできます。これによって確認のためのプロンプトを除去することができます。新しい変数が安全と考えられるためには検証されなければならない、と述語を指定する必要があります。

(defcustom my-compiler "gcc" "Some documentation" :safe 'stringp)

この例では、文字列以外の何かにセットしようとすると、Emacs は安全でないと考えます。

カスタムカラーとテーマ

face を使うことで簡単に色をカスタマイズすることができます:

(set-face-background  'region                 "color-17")
(set-face-foreground  'region                 "white")
(set-face-bold-p      'font-lock-builtin-face t ) 

ポイントがある場所の face の名前を Emacs に表示させることができます。そのためには customize-face を使います。どのように色、太字、下線、等が設定されているかを示すことができます。

コンソール上の Emacs は、256色を扱うことができます。しかし、それには適したターミナルを使わなければなりません。たとえば URxvt は256色をサポートしています。list-colors-display によって、サポートされる色の包括的なリストが表示できます。これは強くターミナルに依存します。

SyncTeX サポート

Emacs は強力な LaTeX エディタです。LaTeX モードを必要に応じて自由に編集・作成することができます。

SyncTeX サポートといった、まだいくつかの挑戦があります。最初に TeX ディストリビューションに SyncTeX があるかを確認する必要があります。もし TeX Live を手動でインストールした場合、synctex パッケージをインストールする必要があるかもしれません。

# umask 022 && tlmgr install synctex

SyncTeX サポートは、ビューア依存です。ここでは例として Zathura を使用します。他の PDF ビューアを使用する場合、コードを変更する必要があります。

(defcustom tex-my-viewer "zathura --fork -s -x \"emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"'\"'\"%{input}\"'\"'\")) (goto-line %{line}))'\"" 
  "TeX 文書用 PDF ビューア。
   同じドキュメントを2回起動したこと検出する、または Emacs を
   閉じても表示を継続するためにビューアを fork したい場合、
 
シンプルなコマンド:

  zathura --fork

SyncTex を用いて pdf を逆検索するために以下が使用できる。

  emacsclient --eval '(progn (switch-to-buffer  (file-name-nondirectory \"%{input}\")) (goto-line %{line}))'

引用符および二重引用符は必須で、適切にエスケープされなければならない点に注意。"
:safe 'stringp)

カスタム変数を定義します。もし AucTeX や Emacs 標準の LaTeX-mode を使用しているなら、それに応じてビューアを設定する必要があります。

LaTeX ソースファイルを Emacs で開き、文書をコンパイルし、ビューアを起動します。Zathura が起動します。Ctrl+Left click を押すと、Emacs は対応する位置にポイントを移動させます。

Systemd ファイルのシンタックスハイライト

systemd-mode を使うことができます。

もしくは init ファイルに以下を追加することで、簡単に emacs で systemd のファイル (サービスやタイマーなど) をカラー表示できます:

 (add-to-list 'auto-mode-alist '("\\.service\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.timer\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.target\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.mount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.automount\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.slice\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.socket\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.path\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.netdev\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.network\\'" . conf-unix-mode))
 (add-to-list 'auto-mode-alist '("\\.link\\'" . conf-unix-mode))

emacs-nox のクリップボードサポート

emacs-nox で Xorg クリップボードを使うには、xclipインストールして以下の関数を ~/.emacs に追加してください [1]:

;; use xclip to copy/paste in emacs-nox
(unless window-system
  (when (getenv "DISPLAY")
    (defun xclip-cut-function (text &optional push)
      (with-temp-buffer
	(insert text)
	(call-process-region (point-min) (point-max) "xclip" nil 0 nil "-i" "-selection" "clipboard")))
    (defun xclip-paste-function()
      (let ((xclip-output (shell-command-to-string "xclip -o -selection clipboard")))
	(unless (string= (car kill-ring) xclip-output)
	  xclip-output )))
    (setq interprogram-cut-function 'xclip-cut-function)
    (setq interprogram-paste-function 'xclip-paste-function)
    ))
ヒント: 以下を追加することでターミナルマウスサポートも有効にできます:
;; xterm mouse support
(require 'mouse)
(xterm-mouse-mode t)
mwheel.el を参照。

ヒントとテクニック

前のセクションでは基本的な編集コマンドを説明していますが、それだけでは Emacs の可能性はわかりません。このセクションではより高度なテクニックや機能を紹介します。

ただし全てを説明するとなると長くなりすぎます。そのためこのセクションはあくまで Emacs の雅やかな機能をいくつかデモするだけにとどめます。

全ての機能の詳細な説明はドキュメントを見て下さい。

TRAMP

TRAMP (Transparent Remote Access, Multiple Protocols) は多数のプロトコルで、リモートファイルに透過的にアクセスすることができる拡張です。ファイル名を入力するときに、特定の形式を入力すると TRAMP が呼びだされます。例:

/etc/hosts を root 権限で開く前に root のパスワードを要求するには:

C-x C-f /sudo::/etc/hosts

SSH で 'myhost' に 'myuser' として接続して ~/example.txt ファイルを開くには:

C-x C-f /ssh:myuser@myhost:~/example.txt

TRAMP のパスは '/[protocol]:[[user@]host]:<file>' という形式で指定します。TRAMP がサポートしているのは上記の例に限りません。詳しくは TRAMP の info マニュアルを参照してください。マニュアルは Emacs に付属しています。

Emacs を git のマージツールとして使う

デフォルトでは、git はマージツールとして Emacs の Emerge モードをサポートしています。しかしながら、Ediff モードの方をより好むかもしれません。不幸にも、このモードは技術的な理由により git によってサポートされていません。Ediff モードを使用する方法はまだあります。emacs call 上で以下の elisp コードを評価します。

.gitconfig
[mergetool.ediff]
    cmd = emacs --eval \" (progn (defun ediff-write-merge-buffer () (let ((file ediff-merge-store-file)) (set-buffer ediff-buffer-C) (write-region (point-min) (point-max) file) (message \\\"Merge buffer saved in: %s\\\" file) (set-buffer-modified-p nil) (sit-for 1))) (setq ediff-quit-hook 'kill-emacs ediff-quit-merge-hook 'ediff-write-merge-buffer) (ediff-merge-files-with-ancestor \\\"$LOCAL\\\" \\\"$REMOTE\\\" \\\"$BASE\\\" nil \\\"$MERGED\\\"))\" 

[merge]
	tool = ediff

コマンドは1行で書かれなければならない点に注意してください。 上の例では、Emacs を新たに起動します。より早く起動するために emacsclient を使いたいかもしれませんが、推奨されていません。なぜなら Ediff 呼び出しは実際にはクリーンではないためで、現在の Emacs セッションを混乱させる可能性があります。

-q オプションを使用して、即席で起動することができます。設定の一部を残したまま Emacs を素早く起動するには、Emacs を以下のように呼び出します。

 emacs -q -l ~/.emacs-light

ここで、Ediff のために必要なことのみを記した軽量な設定ファイルがロードされます。

このトリックおよび Ediff の問題点についての詳細は、kerneltrap.org および stackoverflow を参照してください。

Caps Lock キーを Control キーとして使う

いわゆる 'emacs 小指' にならないようにこちらの挙動を好むユーザーもいます。X で試用してみたいときは、次を実行:

$ setxkbmap -option 'ctrl:nocaps'

また、キーを交換するには、次を実行:

$ setxkbmap -option 'ctrl:swapcaps'

永続的に設定したくなったら、.xinitrc ファイルに上のコマンドを追加してください。

リージョンを小文字から大文字にする必要がある場合は、デフォルトの C-x C-u キーバインディングを使って下さい、upcase-region 関数が呼び出されます。

Caps Lock がない場合は、両方の "Shift" にマッピングしてください:

$ setxkbmap -option "shift:both_capslock"

一部のデスクトップ環境にはキーボードのマッピングを変更するためのグラフィカルなツールが含まれています。例えば Plasma 5 ならシステム設定を開いて入力デバイスをクリックしてください。キーボードを選択して高度な設定タブから Caps Lock を Ctrl として使用するように設定できます。

キーボードマクロとレジスタ

このセクションでは、2, 3の強力な編集機能に対する実用的なデモンストレーションを示します。つまり、keyboard macrosregisters です。

目的は、一連の文字のリストとこのリスト内での対応する位置を作ることです。それらは手動で成形することもできますが、遅く、間違いをおこしやすいです。その代わりに、Emacs のよりパワフルないくつかの編集機能によって、レバレッジを効かせられます。答えの前に、以下で使うテクニックの背景について詳細を示します。

1つ目の機能は レジスタ です。レジスタ は、数字からウィンドウコンフィグまでに及ぶ様々なデータ型を格納し取得するために使われます。それぞれのレジスタには、1文字の名前が与えられます。この文字はレジスタへのアクセスに使われます。

もう1つの機能は、キーボードマクロ です。キーボードマクロは、一連のコマンドを格納します。それによって後で簡単に繰り返すことができます。これらの変化を、ここでステップバイステップで実施してみます。

文字集合を含むバッファから始めます。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

'number-to-register' コマンド(C-x r n)を呼び出してレジスタを準備します。それから数字 '0' をレジスタ 'k' に保存します。

C-x r n k

バッファの先頭にポイントを移動させ、キーボードマクロ(C-x ()を実行開始し、文字のフォーマットを始めます。

C-x ( C-f M-4 .

レジスタ 'k' に挿入 (C-x r i) とインクリメント (C-x r +) を行います。前置引数 (C-u) によって、テキストを挿入した後でポイント位置を離します。

C-u C-x r i k C-x r + k

改行を入れることでフォーマットを完了させます。残りの文字に対しては、Emacs はキーボードマクロを定義したポイント位置から始まるこのプロセスを繰り返すことができます。C-x e はキーボードマクロを完了して呼び出します。前置引数 M-0 によって、エラーが起きるまでマクロを繰り返します。この場合、バッファの最後に到着すると中断します。

<RET> M-0 C-x e

結果は以下のようになります:

 A....0
 B....1
 C....2
 [...]
 x....49
 y....50
 z....51

もし、後々使うためにマクロを保存したいなら、名前をつけて設定ファイルに保存する必要があります。

name-last-kbd-macro 
insert-kbd-macro

定義したマクロは、すべてマクロリングに格納されます。マクロを巡回するには、

C-x C-k C-n  次のマクロ
C-x C-k C-p  前のマクロ

同様に、仮想的に何でも保存するためにレジスタを使えます。

C-x r SPC 現在のポイント(位置)をレジスタにコピーする
C-x r w   現在のウィンドウ設定をレジスタにコピーする
C-x r j   レジスタに再保存する。

しばしば異なるプロジェクトごとにウィンドウを行ったり来たりして作業をするなら、別のプロジェクトのために設定を保存し、ある画角から別の画角へ簡単に切り替えることができます。

list-registers コマンドによって、使用したレジスタをリストにして表示することができます。

正規表現

Emacs Manual より: "正規表現 (regexp と略す) とは、一致する可能性がある一連の (無限個でもよい) 文字列を表現するパターンである"。このセクションでは正規表現自体には深くは立ち入りません (単純に説明しきれない)。そのかわり正規表現のパワーを簡単にデモンストレーションします。詳しい説明は Emacs Manual の Regular Expressions セクションを見て下さい。

上と同じシナリオが与えられた場合、つまり複数文字のリストがあり、そのリスト内に複数文字の相対位置を持つリストを考えます。(参照 キーボードマクロとレジスタ) 再度、以下を含むバッファから開始します。

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

バッファの最初に C-M-% を使用します。(もしキー列が実行するには難しいなら、M-x query-replace-regexp を使う方がより快適かもしれません。)プロンプトには以下を入力します:

\(.\)

これは、単に1文字にマッチします。それから置換先のプロンプトには:

\1....\#^J
ノート: '^J' は、改行を配置することを意味します。改行は、プロンプト内で入力できません。改行記号は、その他に C-q C-j を使って入力することもできます。

置換先の表現は、以下のように読みます: "最初のカッコに囲まれた部分にマッチするテキストを挿入しなさい (今回は1文字)。次にピリオドを4文字挿入し、それから自動的にインクリメントされた数を挿入し、改行が続きます。"

最後に、! を押すことで、バッファ全体に渡って適用します。前のセクションで実行したすべてのフォーマットが、1つの正規表現置換で実行できます。

矩形選択

先進的なテキストエディタが当然備えているべき強力な機能として、テキストを矩形で選択・編集できるというのがあるでしょう。

Emacs でも矩形選択は可能です。C-SPC で普通にテキストを選択してから、複数の矩形コマンドを使うことができます。

C-x r t  矩形領域にテキストを挿入する
C-x r k  矩形領域を kill する (kill-ring に保存する)
C-x r y  矩形領域を Yank する
C-x r o  矩形領域にスペースを挿入する

たとえ矩形の外のテキストがハイライトされていても、上記のコマンドが影響を与えることはありません。

ブックマーク

Emacs は開いたファイルのリストを保存できます。

C-x r m カレントバッファをブックマークに追加。
C-x r b ブックマークからバッファを開く。
C-x r l ブックマークの確認。

Elisp インタプリタ

eval-last-sexp (C-x C-e) を使うことで、elisp 式を評価することができます。Emacs は、開始時に常に *scratch* バッファを生成します。*scratch* バッファはディスクに保存されず、自由にテキストやコードを記述することができます。これは特にelispの評価に有用です。このバッファは、デフォルトで lisp-interaction-mode 有効で開始することに注意してください。

その他に、Emacs は、ielm コマンドでトップレベルの elisp インタプリタを提供します。

スマートなウィンドウ切り替え

長い間使っていると C-x o による伝統的なウィンドウ切り替えは面倒かもしれません。windmove コマンドはもっと便利にウィンドウを切り替えることができます。Shift を押しながら方向キーでウィンドウを指定するだけです。

windmove キーを有効にするには、設定ファイルに以下を記述してください:

~/.emacs
(when (fboundp 'windmove-default-keybindings)
  (windmove-default-keybindings))

シェルコマンドの実行

M-! を使うことで、外部コマンドを呼び出すことができます。前置引数を使用する(C-u M-!)ことで、結果を現在のバッファのポイント位置に出力することができます。

リージョン上で M-| を使うことで、リージョンをコマンドの入力として使うことができます。たとえば、

C-u M-| sort -u RET

によって、リージョンがソートされ、重複を除去して、リージョンをその結果で置き換えることができます。

シェルバッファ

シェルバッファを生成することで、ターミナルと同様にコマンドを実行することができます。 昔ながらのシェルバッファは、shell コマンドによって生成することができます。

Emacs は、すべて Emacs Lisp で書かれた非常に強力なシェル eshell を機能として持っています。csh や zshといったシェルに対する主な優位点は、ネイティブなシェル言語が elisp そのものである点です。そのため、シェル関数として elisp のすべての先進的な機能を使用できます。

対応する括弧のハイライト

show-paren モードを使うことができます。デフォルトでは、対応する括弧が表示されるまで少し遅延がありますが、show-paren-delay を 0 に設定することでなくすことができます。

~/.emacs
(setq show-paren-delay 0)
(show-paren-mode 1)

スペルチェック

辞書を選択するには:

M-x ispell-change-dictionary

一単語をチェックするには M-$ を使います。 バッファ全体をチェックするには、

M-x ispell-buffer

flyspell-mode を有効にすることで、入力と同時に (on-the-fly) スペルチェックができます。ソースコードに対しては、代わりに flyspell-prog-mode を使うことで、コメントに限定して有効にできます。Emacs でスペルチェックをするには aspell パッケージも必要になります。それぞれの言語に対応したパッケージがあります。英語に対しては、(aspell と共に)aspell-en が必要になります。

テーブル

Emacs は、様々な言語での一般的なテーブルを扱う居力な機能を備えています。例を見てみましょう。

Fruits  Quantity
Apples  5
Melons  2

この内容をリージョンで選択して、以下を実行します。

table-capture

半角スペース2文字を列の区切りとして、改行 (C-q C-j) を行の区切りとして使用します。 以下の結果を得ます。

+------+--------+
|Fruits|Quantity|
+------+--------+
|Apples|5       |
+------+--------+
|Melons|2       |
+------+--------+

以下の操作で元に戻せます。

table-release

table-insert-row, table-span-cell, table-widen-cell といったような、たくさんの便利な table-* 関数があります。

最後に、table 関数の究極の目的は、指定されたマークアップ言語に変換することです。 それには、table-generate-source が使われます。 LaTeX に対しては、前のテーブルは、以下の結果となります。

% This LaTeX table template is generated by emacs 24.2.1
\begin{tabular}{|l|l|}
\hline
Fruits & Quantity \\
\hline
Apples & 5 \\
\hline
Melons & 2 \\
\hline
\end{tabular}

table mode を使用することで、行ごとおよび列ごとの和といった、スプレッドシートの作業を行うこともできます。しかし、すぐに機能が限定的であると分かるでしょう。その上、非常に遅いです。より多くの強力な可能性については、org-mode を見てください。

予定表、スプレッドシート、文章作成

有名でパワフルな Org mode のおかげで、Emacs はパワフルなオフィス系機能をおすすめできます。このモードは、標準の Emacs ディストリビューションに含まれます。

Org mode は元々強力な TODO およびアジェンダのエージェントですが、すぐにはるかに幅広い機能セットに進化しました。 Org mode は単純に機能が多すぎて、すべての機能をざっと見ることすらできません。そのため、私たちはいくつかの例であなたの欲求を刺激するに留めます。

TODO.org ファイルを新規ファイルとして開きます。Org mode がロードされるはずです。もしロードされなければ、M-x org-mode によって有効にできます。

TODO.org
* First entry
** Subentry
   Some comments
*** Subsubentry
* Second entry
  - List item 1
  - List item 2

ここで、いくつかの有用なキーバインドは以下となります:

  • TAB 現在のエントリーの折りたたみ・展開を切り替えます。
  • S-TAB すべてのエントリーの折りたたみ・展開を切り替えます。
  • M-RET 現在の項目と同じレベルに新しい項目を開始します。
  • M-<left> および M-<right> レベルを変更します。
  • M-<up> およb M-<down> すべてのサブセクションを含めて項目を移動します。
  • S-<left> および S-<right> ステータスを変化させます。リストアイテムでは、項目のスタイルを変更します。
  • S-<up> および S-<down> 優先度を変更します。
  • C-c ^ 現在のエントリーのすべてのサブエントリーをソートします。
  • C-c . 現在のエントリーにタイムスタンプを追加します。Shift と矢印を使って、数日や数週をスキップできます。カレンダーでマウスを使ったり、特定の日で Enter を押したりして、それらを選択できます。

スプレッドシート機能は、非常に包括的です。マニュアルから抜粋してみましょう:

    
	最後に、素晴らしい `calc.el 'パッケージでできることについて欲求を
 刺激するために、いくつかの関数に対する位置 `x' で次数 `n'のテイラー級数を
 計算する表を示します。 

     |---+-------------+---+-----+--------------------------------------|
     |   | 関数        | n | x   | 結果                                  |
     |---+-------------+---+-----+--------------------------------------|
     | # | exp(x)      | 1 | x   | 1 + x                                |
     | # | exp(x)      | 2 | x   | 1 + x + x^2 / 2                      |
     | # | exp(x)      | 3 | x   | 1 + x + x^2 / 2 + x^3 / 6            |
     | # | x^2+sqrt(x) | 2 | x=0 | x*(0.5 / 0) + x^2 (2 - 0.25 / 0) / 2 |
     | # | x^2+sqrt(x) | 2 | x=1 | 2 + 2.5 x - 2.5 + 0.875 (x - 1)^2    |
     | * | tan(x)      | 3 | x   | 0.0175 x + 1.77e-6 x^3               |
     |---+-------------+---+-----+--------------------------------------|
     #+TBLFM: $5=taylor($2,$4,$3);n3

Org mode は、行においてパイプ | がホワイトスペース以外の最初の文字のとき、テーブルと認識します。前のテキストでは、線を描きませんでした。セル内の内容、または |- のあとに TAB が押されたとき、線が自動的に描かれています。結果列も手動では記述しておらず、最後の行の calc 式から計算されています。C-u C-c C-c を使うことで、テーブル内のすべての値を再計算することができます。

TODO ファイルと同様に、行と列を操作するキーバインディングがあります。Alt + 矢印キーで、列と行を移動することができます。

より深く詳細を知るには、公式マニュアルを参照してください: C-h i m Org mode RET

リファクタリングとスマート補完

(Eclipse などの) IDE が大抵備えているプログラミング機能が必要な場合、Semantic ツールが役に立ちます。Semantic は Emacs の標準ディストリビューションに含まれています。現在 C, C++, Scheme, Javascript, Java, HTML, Make がサポートされています。現在のサポート状況は CEDET のページ で確認できます。

Semantic がサポートする好みのプログラミング言語で書かれたファイルを開きます。そして Semantic マイナーモードを起動します。

M-x semantic-mode

Semantic は、あなたのファイルに含まれるライブラリ (たとえば C では、ほとんどの場合、標準ライブラリ) を2,3秒パースします。

機能

一旦完了すると、素晴らしい Semantic の機能が使えます。

スマート補完

C-c , SPC を押すことで、ポイントにあるシンボルを補完することができます。それが引数の場合、型が正しいかチェックされます。

シンボルにジャンプする

C-c , j を押すことでシンボルを入力するプロンプトを表示し、その定義元にジャンプします。TAB で自動補完ができます。文字 J を押すと、シンボルを複数ファイルに渡って探索します。

シンボルの呼び出しをリスト表示する

C-c , g を押すことでシンボルを入力するプロンプトを表示し、参照されている場所のリストを表示します。np を押すことで結果表示を巡回できます。RET を押すことで詳細をトグルし、参照箇所で再度 RET を押すことで参照元にジャンプします。G を押すことで、入力したシンボルの場所を複数ファイルに対してリスト表示します。

リファクタリング

最初に前述のコマンドでリファクタリングしたいシンボルの使用先をリスト化します。( を押すと、シンボルに対するマクロ定義を開始します。これは実際、リファクタリングに比べてより非常に強力です。なぜなら、シンボルに任意の関数を適用したり、周囲のシンボルに作用することさえしたりできます。C-x ) を押すことで、マクロ定義を終了し、E キーにて実行します。

シンボルの説明

以下の関数を呼び出すことで、シンボルの詳細を表示します。

semantic-ia-show-summary

これは複雑なデータ構造とプロトタイプに対して非常に有用です 。デフォルトではキーバインドがありません。

設定

以下に、サポートされているすべてのプログラミング言語で Semantic を使用するためのサンプル設定を示します。キーバインディングのと表示設定の例です。

;; ghost 表示での Semantic (M-n と M-p で完了をブラウズできます)
(semantic-mode 1)
(define-key my-keys-minor-mode-map (kbd "C-c , d") 'semantic-ia-show-summary)
(setq semantic-complete-inline-analyzer-displayor-class 'semantic-displayor-ghost)

特定の言語に対して特化した設定を追加することもできます。ここでは C のために:

(add-hook
 'c-mode-hook
 (lambda ()
   (local-set-key (kbd "M-TAB") 'semantic-complete-analyze-inline)
   (local-set-key "." 'semantic-complete-self-insert)
   (local-set-key ">" 'semantic-complete-self-insert)))

文献

Emacs から直接 info マニュアルにアクセスすることが可能です: C-h i m Semantic RET

パッケージ

Emacs の機能はサードパーティ製のパッケージで拡張できます。公式にサポートされているパッケージマネージャとして package.el が組み込まれていますが、Emacs のコミュニティメンバーによって書かれたパッケージマネージャが他にも存在します。package.elpackage-archives 変数を使ってパッケージを検索します。デフォルトでは Emacs Lisp Package Archive (ELPA) が含まれています。M-x list-packages で Emacs が認識している全てのパッケージが列挙されたバッファが作成されます。マニュアル ((info "(emacs) Packages")) にはさらに詳しい情報が載っています。

サードパーティ製のパッケージのアーカイブを追加することもできます。MELPA が広く使われています。

人気の拡張の多くは [community] リポジトリのパッケージや AUR からインストールできます。大抵の場合、パッケージの名前の前に 'emacs-' が付きますが (例: emacs-lua-mode)、常にそうなっているわけではありません (例: auctexAUR)。

ヒント: Arch Linux の Wiki を編集している場合は Emacs Mediawiki パッケージが役に立ちます。

パッケージによっては設定ファイルに変更を加えないと機能が有効にならない場合があります。例えば、auctexAUR をインストールしたときは、設定ファイルに以下を追加:

(load "auctex.el" nil t t)
(load "preview-latex.el" nil t t)

パッケージのソースコードや README で有効化する方法が書かれているはずです。

トラブルシューティング

Emacs が 'Undefined color: "WINDOW_FOREGROUND"' というエラーメッセージで起動しない

mcpp パッケージまたは gcc パッケージをインストールする必要があります。xrdbX resources を前処理するために C のプリプロセッサ cpp を使用します。C のプリプロセッサがインストールされていない場合、xrdb は C のプリプロセッサを実行しないため WINDOW_FOREGROUND が16進数のカラーコードに展開されません。

Gccemacs を使用すると Emacs systemd サービスが起動しない

Gccemacs (ブランチ emacs-native-comp または pgtk-nativecomp) を使っているときに、systemd サービスを開始しようとすると、.eln ファイルが見つからないというエラーメッセージが記録されることがあります。

$ journalctl --user -xb -g eln
emacs[7507]: emacs: ../native-lisp/28.0.50-x86_64-pc-linux-gnu-fc9c33938bf279333039c28064d363e8/lisp-mode-410874a46ab8852855281f021ca61fe7-1738806322de892570d69dfc55b437c2.eln: cannot open shared object file: No such file or directory

回避策として、[Service] セクションで emacs.serviceWorkingDirectory 行を 編集 します。

emacs.service
[Service]
...
WorkingDirectory=/usr/lib/emacs/28.0.50/x86_64-pc-linux-gnu/
...
ノート: WorkingDirectory パラメータは、既存の Restart パラメータの に定義する必要があります。

カラー出力の問題

デフォルトでは、Emacs シェルはカラー表示に使われるエスケープシーケンスをそのまま表示してしまいます。つまり、カラー出力がされるべきところに変な記号が表示されます。

この問題を解決するには以下を ~/.emacs に記述してください:

(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)

X ウィンドウでの文字の表示問題

X ウィンドウで emacs を起動した時にメインウィンドウの文字が全て黒縁の白四角になってしまう場合 (対応するフォントがインストールされていない文字を表示したときと同じような記号)、xorg-fonts-75dpixorg-fonts-100dpi をインストールして X ウィンドウを再起動してください。

起動が遅い

ヒント: systemd ユニットとして Emacs を起動する方法でも起動時間を短縮できます。

しばしば起動時間が遅くなる原因は2つあります。

どちらが原因なのか調べるために、次のコマンドで Emacs を実行してください:

$ emacs -q

このコマンドでも Emacs の起動が遅い場合、不適切なネットワーク設定を参照してください。そうでない場合は、ほぼ確実に .emacs に問題があります。

  • /etc/hosts の設定が間違っていると、Emacs の起動が5秒以上遅くなることになります。詳しくはネットワーク設定ガイドの 'ホストネームの設定' を見てください。
  • 原因を探るシンプルな方法は、~/.emacs (または ~/.emacs.d/init.el) にて予想されるセクションをコメントアウト(例えば行頭に ';' を入力)し、変化するか確認するため Emacs を再度開始することです。"require" と "load" を使用することで、特に大きな拡張機能を使った時、起動が遅くなり得ることを心に留めてください。原則として、これらはターゲットが次のいずれかである場合にのみ使用する必要があります。Emacsが起動時に必要とするか、あるいは拡張機能を自動ロードする場合です。そうでなければ、'autoload' 関数を直接使用できます。 たとえば、
(require 'anything)

の代わりに、以下が使えます。

(autoload 'anything "anything" "Select anything" t)

Cannot open load file: ...

このエラーに共通する主な原因は、'load-path' 変数に拡張機能が置かれているディレクトリのパスが含まれていないことです。解決するには、拡張機能のロードを試みる前に、適切なパスをリストへ追加します:

 (add-to-list 'load-path "/path/to/directory/")

拡張機能のためのパッケージを使用しようとして、かつ Emacs が '/usr' 以外のプレフィックスで設定されたとき、ロードパスを更新する必要があります。以下を ~/.emacs のパッケージによって提供される処理の前に配置します:

 (add-to-list 'load-path "/usr/share/emacs/site-lisp")

もし手動で Emacs をコンパイルしたら、デフォルトのプレフィックスは '/usr/local' であることを心に留めてください。

デッドアクセントキーの問題: '<dead-acute> is undefined'

このバグについて Google で検索すると、次のリンクが見つかります: https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00167.html

問題の説明: Emacs の最近のバージョンでは、 アクセントキーを使用する通常の方法は、期待通りに動きません。'fiancé' のような単語をアクセントしようとすると上のメッセージが表示されます。

解決するには、スタートアップファイル ~/.emacs の上部に以下の行を記述します。

  (require 'iso-transl)

さらに、これは不具合ではなく、新しい Emacs バージョンの機能です。メーリングリストでの本件に関するメッセージを読むと、以下であることが分かりました (https://lists.gnu.org/archive/html/help-gnu-emacs/2009-05/msg00179.html):

これは何も自動的にロードされないように見えます。なぜなら、iso-transl と iso-acc の間に選択があるからです。両方とも、C-x 8 あるいは ALt-<accent> プレフィックスでインプットメソッドを提供するように見えます。しかし、あなたとわたしがしたことは、アクセントのために、ただデッドキー(^, ´, `, ~, ¨)を押し、それからアクセントされる文字を "統合する" ため別のキーを押しただけです。そしてここでは Alt キーが押されていません!ドキュメントによると、これは8ビットエンコーディングに適しているように見えます。そのため UTF-8 では、かなり役立たないはずです。私は、これが紹介されたときにこの不具合を報告しました。しかし、このバグは機能として分類されたように見えます。。。多分これは、かなり役立たないけど、ただファイルが自動ロードされるためだけです。

C-M-% やその他のバインディングが emacs nox で動作しない

これはターミナルが Xorg よりも制限的であることが原因です。ただし、ターミナルによっては多くのバインディングを扱うことができることがあります。2つの解決法が考えられます:

  • グラフィカルバージョンを使用する。
  • サポートされているバインディングに変更する。

例:

.emacs
(global-set-key (kbd "C-M-y") 'query-replace-regexp)

Emacs がフリーズする

シングルスレッドであるがゆえに、Emacs は様々な操作でブロックします。フリーズが発生する状況は様々です。例えば、Emacs はあなたからの入力を待っているのかもしれません (例えばあるフレームでミニバッファを開いているのに他のフレームで作業しようとしている場合など)。あるいは、Emacs は完了するまで時間のかかるコードを実行中なのかもしれません。あるいはバグを踏んだという可能性もあります。Emacs プロセスを殺さずに Emacs のブロックを解除する方法は複数存在します。

  • C-g を押してみる。Emacs が行っていることによっては、複数回押す必要があります。
  • ESC ESC ESC を押してみる。
  • 他のターミナルで killall -SIGUSR2 emacs を実行する。

Emacs-nox の出力が汚い

ターミナル上で動作している時、色、インデント、あるいは出力に関するものが狂ったように見えます。(多分?)Emacs がある点で特別な文字を送り、それが現在のターミナルと競合しているためのようです。 もしこれが起きた時、できることは M-x redraw-display を実行することです。これにより、ターミナルの表示を再描画します。この問題が頻繁に起きるなら、たとえば

(global-set-key (kbd "<f7>") 'redraw-display)

といった記述を、.emacs ファイルに置くといった方法で、コマンドをキーに割り当てたいと思うかもしれません。

グラフィカルバージョンの Emacs はこの問題が起きません。

emacs ターミナルにおかしなエスケープ数字 (utf-8) が表示される

.bashrc または .zshrc で以下の変数をエクスポートしてください:

~/.bashrc
export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export TERM=xterm-256color

小文字の utf を使っていることがエラーの原因です (例: en_US.utf-8)。

利用可能なロケールは locale -a で確認できます。

tmux で emacs を使っているときに Shift + 矢印キーが動作しない

まず tmux の設定で xterm-keys を有効にしてください:

.tmux.conf
setw -g xterm-keys on

しかしながら、この設定は他のキーコンビネーションを破壊します。それを修正するために、以下を emacs の設定に記述します:

~/.emacs
(defadvice terminal-init-screen
  ;; `tmux' と名付けることをアドバイスします。そして `terminal-init-screen' が実行される前に実行します。
  (before tmux activate)
  ;; Docstring.  これはアドバイスを記述し、emacs 内部で有効になります;
  ;; たとえば、 C-h f terminal-init-screen RET を実行したときに表示されます。
  "Apply xterm keymap, allowing use of keys passed through tmux."
  ;; これは elisp コードで、`terminal-init-screen' より前に実行されます。
  (if (getenv "TMUX")
    (let ((map (copy-keymap xterm-function-map)))
    (set-keymap-parent map (keymap-parent input-decode-map))
(set-keymap-parent input-decode-map map))))

詳しくは tmux FAQ を参照。

KDE でウィンドウのリサイズがおかしい

KDE ユーザーには Emacs のウィンドウが正しくリサイズされないという現象がおこることがあります。リサイズした部分が透過されマウスでクリックしても下のウィンドウがクリックされます。この挙動を修正するには、KDE の GTK3 テーマを oxygen-gtk 以外のテーマに変更してください。例えば、gtk3 に含まれている Emacs テーマを使って下さい。

KDE で Emacs を完全に最大化するには、タイトルバーの Emacs アイコンをクリックして、More Actions > Special Window Settings を選択してください。そして "Size & Position" タブで "Obey geometry restrictions" を選択して、ドロップダウンメニューで "Force" を選んで右のラジオボタンで "No" を選んで下さい。

派生

Emacs の実装は多数存在します。おそらく GNU/Emacs が一番ポピュラーです。軽量な Emacs 互換のテキストエディタは Arch のリポジトリや AUR にあります。

  • mg — C で書かれた軽量な Emacs の実装です。mg は UTF-8 をサポートしていません。
https://homepage.boetes.org/software/mg/ || mg
  • Zile — "Zile Is Lossy Emacs" Zile は出来る限り Emacs に近づくように書かれている軽量な Emacs クローンです。Zile は UTF-8 をサポートしていません。
https://www.gnu.org/software/zile/ || zile
  • uemacs — Linus Torvalds によるカスタム版 Micro-emacs。
https://git.kernel.org/pub/scm/editors/uemacs/uemacs.git || uemacs-gitAUR
  • emacs-ng — Emacsの新しいアプローチ - TypeScript、Threading、Async I/O、WebRender を含む。
https://github.com/emacs-ng/emacs-ng || emacs-ng-gitAUR
  • qemacs — "Quick Emacs" は、Emacs Lisp インタプリタをベースとしていますが、コードベースが小さく、ユーザーインターフェイスが簡素化されています。
https://bellard.org/qemacs/ || qemacsAUR
  • sxemacs — xemacs のフォーク。
http://www.sxemacs.org/ || sxemacsAUR
  • jove — Jonathan のバージョンの Emacs は、Lisp を含まない Emacs に似たエディタです。
https://github.com/jonmacs/jove || joveAUR

Emacs ディストリビューション

  • Spacemacs - コミュニティ主導の Emacs ディストリビューション
  • Doom Emacs - 頑固な火星人ハッカーのための Emacs フレームワーク
  • Witchmacs - 最もかわいい Emacs ディストリビューション
  • Yukimacs - Uncle Dave の Emacs と Witchmacs に大きく影響された (Spacemacs や Doom Emacs ではなく) ゼロから構築された GNU/Emacs 構成

その他: Starter Kits

参照