Emacsで快適な研究環境を整えよう~導入編~

- Emacsで快適な研究環境を整えようシリーズ
    1. **導入編**(今ここ)
    2. [パッケージ&日本語入力編](https://qiita.com/Maizu/items/fee34328f559c7dc59d8)
    3. [YaTeX + RefTeX 編 *new!*](https://qiita.com/Maizu/items/7d8f420817dfeccf4477)

# はじめに

きっとこのページを開いてくれた方々は"Emacsというエディタがあるのは知ってるけど使ったことがなくて使ってみたい"、"コーディングやレポート作成のためのテキスト編集環境を整えたいけどどうしたらいいのだろう"といった方々だと思います。このページはそういったEmacsを使ったことがない、もしくはほとんど使ったことがない方がEmacsを試せるようにインストールから簡単な使い方を解説するのを目的としています。私は某大学の大学院生として研究を行っていくうちにEmacsに出会いEmacsに魅せられました。まだ自分にしっくりくるエディタを見つけられていない方、このページを参考にしてぜひ1度Emacsを試してみてください。
非常に浅はかな知識で書いているのでもしかしたら間違っている、もしくは誤解を招くような記述があるかもしれません。そのような記述に気づいた方がいましたらご指摘いただけると嬉しいです。前書きが長くなってしまいましたがそろそろ本題に入りましょう。

# Emacsとは
Emacsは非常に強力な拡張性を有したパワフルなテキストエディタです。その拡張性の高さから様々な派生が存在し、それらをまとめてEmacsと呼びます。様々な派生の中で最も広く使われているのがGNU Emacsです。このページではGNU Emacsを扱い、以後Emacsと言えばGNU Emacsを指します。

Emacsの最大の特徴はやはりその拡張性の高さです。テキスト編集やコーディングを効率化する様々なパッケージが利用でき、それらを自由に組み合わせることで自分にとって使いやすい環境を構築することができます。まさに自分の書斎を作る感覚です。
私が普段使っていて便利だと思う拡張パッケージはyatex+reftexです。yatexとreftexはLatexによる文書作成を支援するパッケージでショートカットキーから対話的に設定を行いながらコマンドを挿入できたり、面倒なコンパイルからpdf化の処理を一括で行えるなど便利な機能が揃っています。
今回は導入編なのでパッケージ追加に関する話はしませんが近いうちにパッケージ追加編も書こうと思っています。

またEmacsは機能の追加だけでなく設定ファイルを自分で編集することで自分好みにEmacsをカスタマイズすることができます。設定ファイルはEmacs LISPというLISPの派生言語で記述するためLISPに触れたことがある人なら少し学べば簡単に書けるでしょう。LISPに触れたことがない人も比較的簡単な設定(キーバインドの変更など)ならすぐ書けるので心配しなくても大丈夫です。ちなみにEmacs LISPは設定ファイルのみならず自分で拡張機能を作るときにも使うので、Emacsと長く付き合っていくと決めた方は深く勉強するとEmacsの可能性がグッと広がりますよ！(自分はまだ勉強中です)

# インストール
それでは早速インストールしていきましょう。
以下の操作によるインストールはUbuntu 18.04 LTSにて検証しましたがUbuntu 16.04 LTSでも問題なく動くと思います。

パッケージがPPAで公開されているのでそれを利用することで簡単にインストールすることができます。インストールするには端末から以下のコマンドを実行します。

```terminal
$ sudo add-apt-repository ppa:kelleyk/emacs
$ sudo apt-get update
$ sudo apt-get install emacs26
```

エラーなく処理が終わればEmacsがインストールされているはずです。

```terminal
$ emacs --version
GNU Emacs 26.1
Copyright (C) 2018 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GNU Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
```
# 簡単な操作説明
早速起動してみましょう!
端末から起動します。

```terminal
$ emacs
```
<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/233b764f-30e3-2f33-05ea-28add59e4348.png" width=50%>
起動するとこのような画面が表示されたと思います。
これがEmacsの画面です。

### Emacsの基本用語
まずはEmacsを使用する上で知っておきたい基本用語について、実際の画面を見ながら確認します。
画面その1
<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/c0b3fe20-7d25-68cf-5ab0-0c1ed4385f5f.png" width=50%>
画面その2
<img src="https://qiita-image-store.s3.amazonaws.com/0/263391/80a42694-11a0-a9a6-71da-bd67accb6078.png" width=50%>

|用語           | 簡単な解説  |
|:--------------|:--------------------|
|フレーム         |EmacsGUIの外枠,画面1の赤枠部|
|ウィンドウ         |画面1の青枠部,バッファの内容が表示される<br>1つのフレームに複数のウィンドウを配置可能|
|バッファ          |ファイルの中身を入れておく器のようなもの<br>画面2の下線部にバッファ名が表示される|
|ミニバッファ |画面1のBeginning of bufferと書かれた部分<br>ちょっととしたinfoが表示されたり<br>引数の入力などを行なったりする |
|メジャーモード     |特定のファイルに特化した編集モード<br>画面2の赤枠部に適応されているメジャーモード名が表示される|
|マイナーモード     |メジャーモードとは独立に設定できる編集モード<br>画面2の青枠部に適応されているマイナーモード名が表示される|

Emacsを扱っていく上でよく目にする基本的な用語を簡単に解説しました。
メジャーモードとマイナーモードについて少し補足します。

メジャーモードは一つのバッファに対して必ず一つ適応される編集モードです。c-modeやPython-modeなどがあり、主要なものはモードに合ったファイルを開くと自動で適応されます。画面2を見るとprintや文字列部が色付けされていますが、これはメジャーモードの機能によるものです。色付けの他にもそのファイルの編集を支援する便利な機能のコマンドが設定されます。

一方でマイナーモードは一つのバッファに対して複数のモードを適応することができます。括弧を入力する対となる括弧を自動で入力してくれる機能など汎用的に使えるものが多いです。非常に便利なモードが数多く公開されているので便利な機能を見つけてどんどん拡張していきましょう。マイナーモードの設定方法などに関してはまたいつか書きたいと思っています。

### 各種キーバインド
次にEmacsのキーバインドについて触れていきます。今日一般的によく使われているキーバインドに慣れていると少々Emacsのキーバインドは慣れるまでに少し時間がかかると思います。根気よくEmacsと向き合いましょう。
Emacsのキーバインドについて調べると`C-x`や`M-x`といった表記が見られます。`C-x`はControlキーを押しながらxを押す、`M-x`はメタキーを押しながらxを押すといった意味になっています。メタキーの初期設定はAltキーやEscキーになっているはずです。Emacsでは基本的にはこのようにControlやメタキーと何かのキーの組み合わせで機能を呼び出します。
以下に特によく使うキーバインドを並べました全てを列挙するのは大変なので気になった方は

- Emacs付属のTutorial(起動したときに表示される画面から開けます)
- [Emacs チートシート](https://gihyo.jp/assets/files/magazine/SD/2015/201510/download/Furoku_CheatSheet_Emacs.pdf)


などを参考にしてください。

#### ファイルを開く/保存に関するキーバインド
|キー   |    動作  |
|:-----|:---------|
|C-x C-f| ファイルを開く(存在しないファイルを選ぶと新規作成)|
|C-x C-s|上書き保存|
|C-x C-w|名前をつけて保存|


#### バッファ編集に関するキーバインド
|キー   |    動作  |
|:-----|:---------|
|C-SPC or C-@|マークセット(範囲選択開始)|
|C-w|切り取り|
|M-w|コピー|
|C-y|貼り付け|
|C-k|カーソル部から行末までを切り取り|
|C-d|カーソル部の文字を削除|
|C-x b|現在のウィンドウのバッファを違うバッファに切り替える|
|C-x k|現在のウィンドウのバッファを閉じる|
|C-f|カーソルを1つ右に移動|
|C-b|カーソルを1つ左に移動|
|C-p|カーソルを1つ上に移動|
|C-n|カーソルを1つ下に移動|
|C-a|カーソルを行頭に移動|
|C-e|カーソルを行末に移動|

#### ウィンドウに関するキーバインド
|キー   |    動作  |
|:-----|:---------|
|C-x 1|現在のウィンドウを最大化|
|C-x 2|現在のウィンドウを上下に2分割|
|C-x 3|現在のウィンドウを左右に2分割|
|C-x 0|現在のウィンドウを閉じる|
|C-x o|ウィンドウを移動する|

#### Emacsの動作に関するキーバインド
|キー   |    動作  |
|:-----|:---------|
|C-x C-c|Emacsを閉じる|
|C-g | Emacsで実行しているコマンドを終了する|

### ファイルを編集してみよう
これまでEmacsの基本用語やキーバインドについて解説してきました。それでは早速Emacsを使ってファイルを編集してみましょう。Emacsを先ほどのように起動して`C-x C-f`とファイルを開くキーを押してください。画面下部のミニバッファにFind:と表示され、カーソルがミニバッファに移ります。せっかくなのでEmacsの設定ファイルを編集してみましょう。画像のように`~/.emacs.d/init.el`を指定し、エンターを押します。

![Screenshot from 2018-06-23 18-18-15.png](https://qiita-image-store.s3.amazonaws.com/0/263391/d6cfdcef-8640-1200-3ddc-c53d50006a4e.png)


初期では恐らくinit.elは存在しないので新たにinit.elが作成されるはずです。ここではウィンドウ間のカーソル移動に関する簡単な設定を記述してみましょう。通常ではウィンドウ間の移動には`C-x o`を使いますが3つ以上のウィンドウを開いているといちいち`C-x o`と入力するのは面倒です。これから紹介する設定を行うとShiftを押しながら矢印キーを押すといった簡単な操作でウィンドウ間を移動することができるため便利です。
早速設定してみましょう。次のように記述してください。

```emacs-lisp:~/.emacs.d/init.el
;; windmove
(windmove-default-keybindings)
```

記述できたら`C-x C-s`によってファイルを保存してください。ミニバッファに
`Wrote <ファイルのパス>`と表示されれば保存完了です。`C-x C-c`によって一旦Emacsを終了し、再び起動してください。設定が反映されているはずなので`C-x 2`によって2つのウィンドウに分割し、Shiftを押しながら上下の矢印キーを使ってウィンドウ間を移動してみましょう。無事Shift+矢印で移動できれば設定できています。できない場合はタイプミスをしていないか、ファイル名を間違えていないか確認しましょう。

上述の設定を行うとShift+矢印はウィンドウ間の移動に使われるため範囲選択には使えなくなってしまいます。正直EmacsではShiftを押しながらの範囲選択は使いづらいので変えた方がいいと思いますが、もし残したいというのであれば以下のように変更することでメタキー+矢印によってウィンドウ間の移動ができるように変更できます。

```emacs-lisp:~/.emacs.d/init.el
;; windmove
(windmove-default-keybindings 'meta)
```

# 最後に
Emacsのインストール方法や簡単な使い方について解説してきました。これらの話はほんの導入に過ぎず、本格的に使うには、キーバインドの設定方法だとかパッケージの追加だとかまだまだ奥が深いです。もし少しでもEmacsに興味をもってくれたなら、ぜひこのままEmacsを使っていきましょう。もっと詳しく使い方を知りたい場合は付属のチュートリアルを読んでみるといいでしょう。
パッケージや設定ファイルについてはまた後日書きたいと思っています。また参考にしていただければ幸いです。最後にEmacsに関するかっこいい動画を貼っておきます。極めるとこんなことができるようになります。ぜひ見てみてください。

Emacs Rocks! Episode 13: multiple-cursors (Youtube)
[![Emacs Rocks - multiple-cursors](http://img.youtube.com/vi/jNa3axo40qM/0.jpg)](https://www.youtube.com/watch?v=jNa3axo40qM)


# 参考文献
[GNU Emacs - GNU Project](https://www.gnu.org/software/emacs/)
[Emacs - ウィキペディア](https://ja.wikipedia.org/wiki/Emacs)
[Ubuntu 16.04にEmacs 25.1をインストールする](https://qiita.com/ytoda129/items/58078d8c7e74d9144014)
[WindMove - EmacsWiki](https://www.emacswiki.org/emacs/WindMove)
Emacs Tutorial
[Emacs Rocks!](http://emacsrocks.com/)