トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Emacsの設定

[Emacs]

Emacsの設定(汎用)

 Emacsカスタマイズ

Emacsに便利なelispを追加して作業を効率化しよう

事前知識

バイトコンパイル
elispコードをコンパイルして実行速度を上げること
.emacs
Emacsカスタマイズ用の設定ファイル、下記の設定はすべて.emacsに記述する
elispのパッケージ管理
今のところpackage.el, Cask, el-getがある。私はpackage.elを使ってる。機会があればel-getとかに乗り換えたい。

CUIで作業する場合

お使いの環境がGUIでない場合、以下のようにTERMの設定を変えると色がいろいろ使えるようになる。

$ cat ~/.bashrc
# color
export TERM="xterm-256color"

auto-install

auto-installは、ネット上で配布されているelispファイルを半自動でバイトコンパイル&インストールできるすぐれもの。最初にこれをインストールできていれば後が楽です。

インストール手順

$ mkdir ~/.emacs.d/auto-install
$ cd ~/.emacs.d/auto-install
$ wget http://www.emacswiki.org/emacs/download/auto-install.el
$ emacs --batch -Q -f batch-byte-compile auto-install.el

上記が完了したら、以下のコードを.emacsに追記する

;; auto-install
(add-to-list 'load-path "~/.emacs.d/auto-install")
(require 'auto-install)
(auto-install-update-emacswiki-package-name t)
(auto-install-compatibility-setup)
(setq ediff-window-setup-function 'ediff-setup-windows-plain)

以上を行った後で「C-x C-c」でEmacsを終了。再起動すれば「M-x auto-install」でauto-installの機能が使えるようになる。「M-x auto-install-from-emacswiki」でemacswiki上にあるelispコードをダウンロードできる。正常にファイルがダウンロードできたら「C-c C-c」でバイトコンパイル&インストール。

package

packageはEmacsのためのelisp管理用ツール。auto-installよりも良いかもしれない。

emacs23以前はcl-libを先にインストールする

// emacs23にはcl-libが入っていないので手動で入れる
// Emacs上で以下のようにして、ソースが入ったらC-c
$ auto-install-from-url: https://raw.github.com/emacsmirror/cl-lib/master/cl-lib.el

package.elをインストールする

// 以下の文字列をスクラッチバッファでC-jして評価
// うまいことはいったらC-c(elispをコンパイル&インストール)
(auto-install-from-url "http://repo.or.cz/w/emacs.git/blob_plain/1a0a666f941c99882093d7bd08ced15033bc3f0c:/lisp/emacs-lisp/package.el")

終わったら以下のelispを.emacsに追加する

; Add package-archives
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/"))
; Initialize
(package-initialize)
(when (< emacs-major-version 24)
  ;; For important compatibility libraries like cl-lib
  (add-to-list 'package-archives '("gnu" . "http://elpa.gnu.org/packages/")))
(package-initialize)

「M-x package-list-packages」… packageのリポジトリから取得できるelispを一覧表示する

「M-x package-install <package-name>」… 実際にパッケージをEmacsにインストールする

tabbar

;; タブを使う
;; http://www.emacswiki.org/emacs/tabbar.el
(require 'tabbar)
(global-set-key [(control shift tab)] 'tabbar-backward)
(global-set-key [(control tab)]       'tabbar-forward)
(tabbar-mode)

emacswikiからtabbar.elをインストール。eclipseやVisualStudioのようなタブ表示が高速に実現できる。Mac OSXの場合、キー配置を変えないと動かせないことに注意。

tabbar+

;; tabbar+
;; https://gist.github.com/Johniel/4324127#file-tabbar-el
(require 'tabbar+)

package.elを使って先にdashをインストールしておく。「M-x package-install dash」

auto-install-from-gistでtabbar+.elをインストール。chromeやfirefoxのように表示しているタブをすべて閉じたり、これより右を閉じるという操作が可能。

「M-x tabbar+remove-left」 … これより左を閉じる

「M-x tabbar+remove-right」… これより右を閉じる

redo+

;; リドゥー設定
;; redoできるようにする
;; http://www.emacswiki.org/emacs/redo+.el
(when (require 'redo+ nil t)
  (define-key global-map (kbd "C-z") 'redo))

emacswikiからredo+.elをインストール。やり直しがC-zで実現できる。逆はC-/。

linum

;; 行数を表示させる
(require 'linum)
(global-linum-mode)

最近のemacsだと標準で入ってるはず。行数表示。XがないEmacs環境の場合wb-line-numberを使うといいだろう。

cua

(cua-mode t)
(setq cua-enable-cua-keys nil)

矩形範囲選択ができる。かなり便利。作業効率が非常に上がるのでおすすめです。起動は「C-Enter」。

magit

(require 'magit)

gitの各操作をすべてEmacsから実行できる。便利。基本的な操作は以下、すべてgitリポジトリ内で行うこと。

「M-x magit-status」… gitリポジトリの状態を表示する。変更をステージングするには「s」、「c」でコミットログを編集、「C-c C-c」でコミット実行

「M-x magit-push」 … gitのリモートリポジトリに変更をプッシュする

「M-x magit-pull」  … gitのリモートリポジトリから変更をpullする

「M-x magit-git-command」 … 何かしらのgitのコマンドを打ち込みたい場合実行「git clone」「git tag -l」とかはここから実行できる。

auto-complete

;; auto-complete
(add-to-list 'load-path "~/.emacs.d/auto-complete")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/auto-complete/ac-dict")
(ac-config-default)
(global-auto-complete-mode t)

たしか設定は上記でいけたはず。Emacsでキーワードの補完を行う。

Javaなどの関数名の補完は設定しないとできないが、C/C++のようにリファレンスを見ながらのプログラミングの場合とても便利。

auto-revert-tail-mode

Emacs22以降であれば事前の準備は必要なし。「M-x auto-revert-tail-mode」で起動できる。UNIXコマンドの「tail -f」と同様にログの出力などをリアルタイムで見ることが出来る。

ansi-color-for-comint-mode-on

Emacs24以上のLinuxで動作を確認。*ここから

 Emacs 上で M-x compile RET rake test RET とかして、 compilation-mode でテストの実行結果を見たいけど、 ansi color escape がちゃんと色文字に変換されなくて、次のように文字 化けしてしまうときがあります。
(add-hook 'compilation-mode-hook 'ansi-color-for-comint-mode-on)
(add-hook 'compilation-filter-hook
          '(lambda ()
             (let ((start-marker (make-marker))
                   (end-marker (process-mark (get-buffer-process (current-buffer)))))
               (set-marker start-marker (point-min))
               (ansi-color-apply-on-region start-marker end-marker))))

php-mode

phpとHTMLを混ぜて作業する際の設定 *emacs で PHP-mode と mmm-mode を使う

;; php-mode
(require 'php-mode)
;; mmm-mode
(require 'mmm-mode)
(setq mmm-global-mode 'maybe)
(mmm-add-mode-ext-class nil "\\.php?\\'" 'html-php)
(mmm-add-classes
'((html-php
:submode php-mode
:front "<\\?\\(php\\)?"
:back "\\?>")))
(add-to-list 'auto-mode-alist '("\\.php?\\'" . xml-mode))

etags

C/C++等の言語、スクリプト言語を書く時はetagsが一番手ごろにタグジャンプ出来るかもしれない。

準備
Makefileでビルドする際にターゲットをtagsにする
$ make tags

あとは、M-x - . とかで飛べる。

 Emacs24

load-theme

Emacs24にはカラーテーマが同梱されているので、load-themeを呼ぶだけでよろしい感じになる。

;; color
(load-theme 'manoj-dark t)

sbt-mode

sbtとemacsは相性が悪い、sbt-modescala-modeをpackageでインストールして以下のようにすればansi-color由来の文字化けが起きない。

;; 色指定
(add-hook 'compilation-mode-hook 'ansi-color-for-comint-mode-on)
(add-hook 'shell-mode-hook 'ansi-color-for-comint-mode-on)
(add-hook 'shell-mode-hook 'sbt-mode)
(add-hook 'compilation-filter-hook
          '(lambda ()
             (let ((start-marker (make-marker))
                   (end-marker (process-mark (get-buffer-process (current-buffer)))))
               (set-marker start-marker (point-min))
               (ansi-color-apply-on-region start-marker end-marker))))

Emacsの設定(お好み)

ps-print

最近のEmacsでは組み込みになっているはず(前から?)Emacs上でソースコードの印刷のために使う。

事前にnkfとghostscriptをインストールしましょう

Macの場合
portsからnkf, ghostscript, ghostscript-fonts-hiraginoをインストール

以下の様なelispを.emacsに追記

;; マルチバイト文字の文字化け防止
(setq ps-multibyte-buffer 'non-latin-printer)
(require 'ps-mule)
(defalias 'ps-mule-header-string-charsets 'ignore)

;; PDF出力
;; e2psが使えるならば以下で
(setq my-pdfout-command-format "nkf -e | e2ps -a4 -p -nh | ps2pdf - %s")
(defun my-pdfout-region (begin end)
    (interactive "r")
    (shell-command-on-region begin end (format my-pdfout-command-format (read-from-minibuffer "File name:"))))
(defun my-pdfout-buffer ()
    (interactive)
    (my-pdfout-region (point-min) (point-max)))

上記のようなことをやらなくても

M-x ps-spool-buffer -> bufferをpostscript化

$ ps2pdf でPDF化できるのでは?(それをelisp化すればよいのだがLispわからん)

お名前: コメント: