PHPerのためのさいてーげんEmacs設定

![gnu-head.jpg](https://qiita-image-store.s3.amazonaws.com/0/109299/ba06b7ff-1362-264b-206a-29704ffc394d.jpeg)

PHPerの皆さんエディタは何をお使いでしょうか。

PhpStorm や Atom もよいと思うのですが、
ターミナルとの親和性の高さ、
direditの使いやすさがあり、
やっぱりEmacsはまだまだ使えるな〜と思っています。

今回はPHPerのためのさいてーげんのEmacs設定を
提案・紹介したいと思います。

# "さいてーげん"の定義
* コードハイライト（php-mode）ができる
* 関数名補完（ac-php）ができる
* タグジャンプ（helm-gtags）ができる
* 構文エラーチェック（flycheck）ができる

# 環境・前提
* Mac である
* homebrew は入れてある
* Emacsキーバインドに慣れている（C-x M-x などの意味がわかる）
* Emacsの `M-x package-list-packages` の使い方がわかる

# Emacsのインストール
homebrewを使うのが楽なのですが、意図したバージョンを入れたい為、
ソースコードからインストールします。

```
curl -O https://ftp.gnu.org/gnu/emacs/emacs-24.5.tar.gz
tar zxfp emacs-24.5.tar.gz
cd emacs-24.5
./configure --without-x
make
make install
```
* 24系にしているのは、最新の25系だと動かないモジュールがあったからです

ターミナルで新しいタブを立ち上げて、
バージョン24.5.1がインストールされているのを確認します

```
emacs --version

GNU Emacs 24.5.1
Copyright (C) 2015 Free Software Foundation, Inc.
GNU Emacs comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of Emacs
under the terms of the GNU General Public License.
For more information about these matters, see the file named COPYING.
```

## 設定ファイルを作成する

```
emacs ~/.emacs
```

```text:~/.emacs
; C-h は delete だから
(global-set-key "\C-h" 'delete-backward-char)

; バックアップファイルを作らない
(setq make-backup-files nil)
(setq auto-save-default nil)
(setq next-line-add-newlines nil)

; 行列数を表示
(line-number-mode t)
(column-number-mode t)
; 対応する括弧を光らせる
(show-paren-mode t)
; スクロールは1行ずつ
(setq scroll-step 1)

; packageを使う
(require 'package)
; melpaも読み込む
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

; 好きなテーマを読み込む
(load-theme 'manoj-dark t)
```

## packageインストール

gtagsを使うため、globalをインストールしておきます。

```
brew install global
```

emacsを起動し、

```
emacs
M-x package-list-packages
```

package-list-packages で以下のパッケージをインストールします。

```
ac-php
helm-gtags
flycheck
```

### ~/.emacs に以下を付け足す

```text:~/.emacs
; タグジャンプ設定
(add-hook 'helm-gtags-mode-hook
	  '(lambda ()
	     ;;入力されたタグの定義元へジャンプ
	     (local-set-key (kbd "M-t") 'helm-gtags-find-tag)
	     ;;入力タグを参照する場所へジャンプ
	     (local-set-key (kbd "M-r") 'helm-gtags-find-rtag)
	     ;;入力したシンボルを参照する場所へジャンプ
	     (local-set-key (kbd "M-s") 'helm-gtags-find-symbol)
	     ;;タグ一覧からタグを選択し, その定義元にジャンプする
	     (local-set-key (kbd "M-l") 'helm-gtags-select)
	     ;;ジャンプ前の場所に戻る
	     (local-set-key (kbd "C-t") 'helm-gtags-pop-stack)))
(add-hook 'php-mode-hook 'helm-gtags-mode)

; 関数名補完設定
(add-hook 'php-mode-hook '(lambda ()
                           (auto-complete-mode t)
                           (require 'ac-php)
                           (setq ac-sources  '(ac-source-php ) )
                           (yas-global-mode 1)

                           (define-key php-mode-map  (kbd "C-]") 'ac-php-find-symbol-at-point)   ;goto define
                           (define-key php-mode-map  (kbd "C-t") 'ac-php-location-stack-back   ) ;go back
                           ))

; 構文エラーチェック設定
(add-hook 'after-init-hook #'global-flycheck-mode)
```

これでインストールができました。

# 試し方

作業環境を適当な場所に用意します。

```
cd
mkdir tmp
cd tmp
```

### ac-php

まずac-phpの定義ファイルを作成します。

```
touch .ac-php-conf.json
```

PHPファイルを適当な場所に用意します。

```php:test.php
<?php
class test
{
    function aaa()
    {

    }
}
```

```php:test2.php
<?php
include "test.php";

$t = new test();
$t->aaa();

function bbb()
{

}
```

ここまで保存したら、emacs上でac-phpタグをリメイクします。

```
M-x ac-php-remake-tags-all
```

### gtags

Emacsを抜けて関数名補完データ作成コマンドを打ちます。

```
gtags -v
```

### flycheck

設定はいりません。

### 試してみる

```
emacs test2.php
```

test2.php の test() 部分にカーソルを合わせ、
`M-t`
と打つと、モード行に
`Find Definition: (default "test")`
と出ますので、

<img width="623" alt="スクリーンショット 2017-01-28 3.23.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/109299/daa28722-296c-ec84-4a7f-29c5cd1c853c.png">

エンターキーを押すと、
該当クラスファイルの定義場所にジャンプします！

<img width="628" alt="スクリーンショット 2017-01-28 3.22.58.png" src="https://qiita-image-store.s3.amazonaws.com/0/109299/be04c61f-5418-1653-ec23-4547da44401f.png">

`C-t`と打つと、元の場所に戻ります。

`M-l` で関数リストを出し、アクセスもできます。

<img width="687" alt="スクリーンショット 2017-01-28 10.32.10.png" src="https://qiita-image-store.s3.amazonaws.com/0/109299/3875f248-8866-62ac-d9b1-6ae8d996978d.png">

また、
`b`
などと打ち始めると、
独自関数の`bbb`や、その他標準関数の候補が現れ、
右側に引数情報など表示されたかと思います。

<img width="1069" alt="スクリーンショット 2017-01-28 2.32.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/109299/b89095f6-aca5-056e-63d4-598bdaf934db.png">

また、
構文エラーがあると、
シンタックスハイライトがされているかと思います。

<img width="696" alt="スクリーンショット 2017-01-28 3.22.13.png" src="https://qiita-image-store.s3.amazonaws.com/0/109299/4b8e4408-5f1c-d0f9-7136-cda028297c95.png">

これで、

* コードハイライト
* 関数名補完
* タグジャンプ
* 構文エラーチェック

を Emacs に設定することができました。