前の記事で、macOSでのEmacsについて書いたが、今回はWindows環境でのEmacs環境構築についてのメモを備忘録として残す。
尚、私の環境は Windows10 Pro 64bit, 日本語IMEはATOK。
IMEパッチを適用したビルド済みのNTEmacsバイナリーが、下記URLのGitHubで公開されている。又、そこに書かれてるビルド手順の説明も参考になる。
手軽に使いたい場合は、それを使う事もできるが、コマンド連携なども考えて msys2 にEmacsをインストールする。
msys2環境の準備
msys2のインストールについては、過去記事で紹介しているので参照。ツールチェーンやmakeなどの開発ツールもインストールしておく。
msys2のEmacsパッケージ
msys2のEmacsパッケージを pacman -Ss emacs
で検索すると下記が利用できる。
mingw32/mingw-w64-i686-emacs 25.1-1
The extensible, customizable, self-documenting, real-time display editor
(mingw-w64)
mingw64/mingw-w64-x86_64-emacs 25.1-1
The extensible, customizable, self-documenting, real-time display editor
(mingw-w64)
msys/emacs 25.1-1 (editors)
The extensible, customizable, self-documenting, real-time display editor
(msys2)
このパッケージがそのまま利用できればいいが、試してみると日本語入力が不便だった。そこで、日本語IMEパッチを適用したソースからビルドして使う事にした。
Emacs関連パッケージのインストール
Emacsに関連するパッケージをインストールする為に、まず上記のパッケージを一度インストールして、Emacsのみ削除。
私は、いつも「mingw32」環境で作業しているので、mingw32.exe のコンソールから下記コマンドを実行。
$ pacman -S mingw-w64-i686-emacs
$ pacman -R mingw-w64-i686-emacs
尚、mingw64.exe から利用している人は下記。
$pacman -S mingw-w64-x86_64-emacs
$pacman -R mingw-w64-x86_64-emacs
ソースファイルの入手
http://ftp.gnu.org/gnu/emacs/
上記サイトから、emacs-25.1.tar.xz
ファイルを取得
https://gist.github.com/rzl24ozi
上記サイトから、emacs-25.1-w32-ime.diff
ファイルを取得
Emacsソースファイルの展開とIMEパッチの適用
msys2のコンソール(私はmingw32.exe)から、上記で入手した2つのファイルを任意のフォルダに置き、下記コマンドを実行。
$ tar xvf emacs-25.1.tar.xz
$ cd emacs-25.1/
$ patch.exe -p0 < ../emacs-25.1-w32-ime.diff
ビルド
autogen.shとconfigureの実行
$ ./autogen.sh
$ CFLAGS='-Ofast -march=x86-64 -mtune=corei7 -static' ./configure --without-dbus --without-compress-install --with-modules
makeの実行
$ make bootstrap
インストール
$ make install-strip
msys2 の各環境binフォルダ(c:/msys64/mingw32/bin
)にインストールされる。
案外素直にビルド出来た。
Emacsの起動
msys2のコンソールから、下記コマンドで起動できる事を確認
$ emacs --version
.bashrc
に下記エリアスを定義し、ee
だけで起動。
alias ee='runemacs'
尚、Emacsの終了は
C-x C-c
コマンドから抜けるには
C-g
[Note]
msys2のコンソール上でのCUIを起動しようとemacs -nw
を実行してみたが、下記エラーで起動できない。Windowsのコマンドコンソールからは起動できたが、今のところ解決方法がわからない。
GUI版はmsys2のコンソールからでもrunemacs
で起動できるのでそれを使っていく。
emacs: standard input is not a tty
Emacsの初期設定ファイル
初期設定ファイルは、~/.emacs.d/init.el
ファイルに記述
まずは、IME関係の設定を記述
;; (set-language-environment "UTF-8") ;; UTF-8 でも問題ないので適宜コメントアウトしてください
(setq default-input-method "W32-IME")
(setq-default w32-ime-mode-line-state-indicator "[--]")
(setq w32-ime-mode-line-state-indicator-list '("[--]" "[あ]" "[--]"))
(w32-ime-initialize)
;; 日本語入力時にカーソルの色を変える設定 (色は適宜変えてください)
(global-set-key [kanji] 'toggle-input-method)
(add-hook 'w32-ime-on-hook '(lambda () (set-cursor-color "coral3")))
(add-hook 'w32-ime-off-hook '(lambda () (set-cursor-color "orchid")))
;; 以下はお好みで設定してください
;; 全てバッファ内で日本語入力中に特定のコマンドを実行した際の日本語入力無効化処理です
;; もっと良い設定方法がありましたら issue などあげてもらえると助かります
;; ミニバッファに移動した際は最初に日本語入力が無効な状態にする
(add-hook 'minibuffer-setup-hook 'deactivate-input-method)
;; isearch に移行した際に日本語入力を無効にする
(add-hook 'isearch-mode-hook '(lambda ()
(deactivate-input-method)
(setq w32-ime-composition-window (minibuffer-window))))
(add-hook 'isearch-mode-end-hook '(lambda () (setq w32-ime-composition-window nil)))
;; helm 使用中に日本語入力を無効にする
(advice-add 'helm :around '(lambda (orig-fun &rest args)
(let ((select-window-functions nil)
(w32-ime-composition-window (minibuffer-window)))
(deactivate-input-method)
(apply orig-fun args))))
続いて、下記設定を追加
;; C-hをbackspaceにする
(global-set-key (kbd "C-h") 'delete-backward-char)
(set-language-environment 'Japanese) ; 日本語環境
(set-default-coding-systems 'utf-8-unix) ; UTF-8 が基本
(set-terminal-coding-system 'utf-8-unix) ; emacs -nw も文字化けしない
(setq default-file-name-coding-system 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(prefer-coding-system 'utf-8-unix)
;; ロックファイル / バックアップファイルを作成しない
(setq create-lockfiles nil)
(setq make-backup-files nil)
(setq delete-auto-save-files t)
;; 自動保存ファイルを作成しない
(setq auto-save-default nil)
;; 対応するカッコを強調表示
(show-paren-mode t)
;; 時間も表示させる。
(display-time)
;; 行番号を常に表示させる
(global-linum-mode)
(setq linum-format "%4d ")
(column-number-mode t) ; 行番号と列番号を表示する
;; 現在行を目立たせる
(setq hl-line-face 'underline)
(global-hl-line-mode)
;; テーマを設定する
(load-theme 'manoj-dark t)
パッケージ管理
Emacs 24 からパッケージ管理がデフォルトで出来るようになったらしく(package.el)
下記の設定を、~/.emacs.d/init.el
に追記する。
(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/") t)
(package-initialize)
パッケージをインストールするには、
M-x list packages
パッケージリストの更新は、
M-x package-refresh-contents
尚、インストールされたパッケージ情報は ~/.emacs.d/elpa/
フォルダに格納される。
undo-treeパッケージを入れる
undoのやり直しがredoであるが、Emacsのデフォルトではredoがわかりにくい。
そこで、undo-treeパッケージをインストールし、redoを快適に使えるようにする。
下記コマンドでundo-tree
パッケージのインストール
M-x package-install<RET>
undo-tree
続いて、~/.emacs.d/init.el
に下記設定を記述しundo-tree
を有効にする。
;;
;; undo-tree
;;
;; undo-tree を読み込む
(require 'undo-tree)
;; undo-tree を起動時に有効にする
(global-undo-tree-mode t)
;; M-/ をredo に設定する。
(global-set-key (kbd "M-/") 'undo-tree-redo)
これで、M-/ でredoが何度もできるようになる。
また、C-x u で、修正履歴がツリー表示され、好きな箇所に戻れる。
環境設定ファイルをGit管理
Emacsの初期設定ファイルは、いくつか定義できる場所があるが、~/.emacs.d/init.el
に記述しておく。
そして~/.emacs.d/
フォルダを、Gitサーバのリポジトリに登録し管理する。
これにより、他のMacやWindows、更にはLinuxで初期設定ファイルを共用できるようにしておく。
Emacsチャートシート
- Emacsの基本的なキー操作の一覧を1シートにまとめた「Emacsチャートシート」のPDFが、技術評論社の下記URLから入手でき参考になる。早見表として便利。
サポートページ:Software Design 2015年10月号 - 英語ではあるが、下記URLの「GNU Emacs Reference Card」も便利。
GNU Emacs Reference Cards - GNU Project - Free Software Foundation
Windowsのショートカットから起動する
c:¥msys64¥mingw32¥bin¥runemacs.exe
をデスクトップなどにショートカットを作成して実行する。
このとき、デフォルトではHOMEの環境変数が設定されていないので、Emacsの初期設定ファイルは下記ディレクトリが参照される。
C:¥Users¥<ユーザ名>¥AppData¥Roaming¥
そこで、msys2の環境設定ファイルを参照するように、Windowsのコンソールから下記コマンドで、シンボルリンクを作成する。
> mklink /D C:¥Users¥<ユーザ名>¥AppData¥Roaming¥.emacs.d C:¥msys64¥home¥<ユーザ名>¥.emacs.d
これで、msys2のコンソールから起動した時とWindowsショートカットから起動した場合とで、Emacsの初期設定ファイルが共用できる。
所感
使ってみた感じ、思った以上にキビキビ動いて快適。そして、意外に安定している。
いろいろカスタマイズできるので、これから本気で使っていきたいと思っている。
これで、macOSとWindowsで共通の操作性のエディターが使えるようになった。Emacs素晴らしい!!
<2017/01/25 追記>
私の使っている設定ファイル一式をGitHubに公開したのを下記記事で紹介。
<2017/05/31 追記>
Emacs 25.2にバージョンアップした記事を下記で紹介。
参照記事
- 【macOS】Emacs 25を使う
- 【Emacs】Mac/Win及びGUI/CUIで初期設定ファイルを兼用する
- 【Windows / msys2】EmacsをServerで自動起動(emacsclientで高速化)
- 【Emacs 25】初期設定ファイルをGitHubに公開
- msys2でWindows上でのビルド環境をつくる
- 【Windows/msys2】Emacs 25.2にバージョンアップ&ビルド
参考
- GNU Emacs – GNU Project
- GitHub – chuntaro/NTEmacs64: Windows 版 Emacs (通称 NTEmacs) の 64bit 版
- Windows7 シンボリックリンク – 野良ネコの気持ち
- 突然だがEmacs を始めよう – Qiita
- Windowsでシンボリックリンクを作る | Developers.IO
- WindowsユーザーでEmacsを導入したい初心者ユーザーのための情報まとめ | Gabekore Garage
- Windows 8.1時代のNTemacsの初期環境設定の入門っぽいもの
- るびきち「新生日刊Emacs」
- gnupack 版 Emacs で IME の on/off に合わせてカーソルの色を変える方法
コメント