Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

gnu-head.jpg

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
~/.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 に以下を付け足す

~/.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ファイルを適当な場所に用意します。

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

    }
}
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")
と出ますので、

スクリーンショット 2017-01-28 3.23.57.png

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

スクリーンショット 2017-01-28 3.22.58.png

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

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

スクリーンショット 2017-01-28 10.32.10.png

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

スクリーンショット 2017-01-28 2.32.57.png

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

スクリーンショット 2017-01-28 3.22.13.png

これで、

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした