前の仕事PCがぶっ壊れて起動しなくなったため、使わなくなった検証PCに仕事環境を構築した。 いずれ新PCが届いたら(会社の申請と発注の関係で2カ月くらいはかかりそう)に移行するので、がっつり環境構築するのも面倒なので、NTEmacsにできるだけポータビリティを持たせて環境構築し、新PCが来たら最小の労力で移行できるように環境を整えた。 ついでなので、最新のNTEmacsへ移行し、基本的な仕事は全てそこでできるように頑張ってみる。 ** 基本環境の構築 *** インストール **** 方針 ・Windows XP SP3 32bit Core2Duo, 1GBメモリ ・Ntemacsを使う ・極力追加インストールが必要なソフトは避ける(elispだけで実現する) ・Cygwinは使わない(パス解釈がNTEmacsと違うので厄介) **** インストール方法 gnupackプロジェクトでコンパイル&日本語パッチ適用済みのバイナリが配布されているので、これを使う。 入手先:http://sourceforge.jp/projects/gnupack/releases/?package_id=10839 入手したら、解凍し、C:\emacs へ配置する。 ここで使ったのはNTEmacs23.2 **** 起動ショートカットの作成と環境変数の設定 バッチファイルを、C:\emacs\bin\emacs.bat 作成 --------------------------------- rem 以下のディレクトリが無ければ作成しておく rem このディレクトに.emacsを作成し、カスタマイズしていく set HOME=C:\emacs\home runemacs.exe --------------------------------- この設定はOS環境変数としても設定しても良いが、いずれPCを移行する関係上、 設定の集約を行うため、上記のような運用にした。 これでemacs.bat を実行すればとりあえずはNTEmacsが起動してくる。 好きな場所にemacs.batへのショートカットを作成しておく。 *** 初期設定と日本語環境整備 基本的な日本語環境のため、以下の設定をc:\emacs\home\.emacs ファイルを作成し記述する。 *ほとんどネットで見つけたものを組み合わせて使っています。 詳細はコメントを参照。
事前に以下を取得して、c:\emacs\site-lisp\site-lispへ入れておく。 http://nijino.homelinux.net/emacs/cp5022x.el
↓↓↓↓↓↓ここから↓↓↓↓↓↓
; -*- Mode: Emacs-Lisp ; Coding: utf-8 -*-
;; ---------------------------------------------
;; 日本語設定
;; ---------------------------------------------
; デフォルト言語を日本語に
(set-language-environment "Japanese")
; デフォルト文字コードをUTF8に、改行コードをUNIXに
(set-default-coding-systems 'utf-8-unix)
; ファイル名をSJISで取り扱う
(setq default-file-name-coding-system 'sjis-dos)
; IMEの設定
(setq default-input-method "W32-IME")
; IMEの初期化
(w32-ime-initialize)
; IME OFF時の初期カーソルカラー
(set-cursor-color "red")
; IME ON/OFF時のカーソルカラー
(add-hook 'input-method-activate-hook
(lambda() (set-cursor-color "green")))
(add-hook 'input-method-inactivate-hook
(lambda() (set-cursor-color "red")))
; バッファ切り替え時にIME状態を引き継ぐ
(setq w32-ime-buffer-switch-p nil)
;; ---------------------------------------------
;; 表示フォントの設定
;; ---------------------------------------------
; デフォルトフォントの設定
(set-default-font "MS ゴシック-10")
;; ---------------------------------------------
;; 機種依存文字
;; http://nijino.homelinux.net/emacs/cp5022x.el
;; ---------------------------------------------
(require 'cp5022x)
(define-coding-system-alias 'euc-jp 'cp51932)
;; decode-translation-table の設定
(coding-system-put 'euc-jp :decode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
(coding-system-put 'iso-2022-jp :decode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
(coding-system-put 'utf-8 :decode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;; encode-translation-table の設定
(coding-system-put 'euc-jp :encode-translation-table
(get 'japanese-ucs-cp932-to-jis-map 'translation-table))
(coding-system-put 'iso-2022-jp :encode-translation-table
(get 'japanese-ucs-cp932-to-jis-map 'translation-table))
(coding-system-put 'cp932 :encode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
(coding-system-put 'utf-8 :encode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table))
;; charset と coding-system の優先度設定
(set-charset-priority 'ascii 'japanese-jisx0208 'latin-jisx0201
'katakana-jisx0201 'iso-8859-1 'cp1252 'unicode)
(set-coding-system-priority 'utf-8 'euc-jp 'iso-2022-jp 'cp932)
;; PuTTY 用の terminal-coding-system の設定
(apply 'define-coding-system 'utf-8-for-putty
"UTF-8 (translate jis to cp932)"
:encode-translation-table
(get 'japanese-ucs-jis-to-cp932-map 'translation-table)
(coding-system-plist 'utf-8))
(set-terminal-coding-system 'utf-8-for-putty)
;; East Asian Ambiguous
(defun set-east-asian-ambiguous-width (width)
(while (char-table-parent char-width-table)
(setq char-width-table (char-table-parent char-width-table)))
(let ((table (make-char-table nil)))
(dolist (range
'(#x00A1 #x00A4 (#x00A7 . #x00A8) #x00AA (#x00AD . #x00AE)
(#x00B0 . #x00B4) (#x00B6 . #x00BA) (#x00BC . #x00BF)
#x00C6 #x00D0 (#x00D7 . #x00D8) (#x00DE . #x00E1) #x00E6
(#x00E8 . #x00EA) (#x00EC . #x00ED) #x00F0
(#x00F2 . #x00F3) (#x00F7 . #x00FA) #x00FC #x00FE
#x0101 #x0111 #x0113 #x011B (#x0126 . #x0127) #x012B
(#x0131 . #x0133) #x0138 (#x013F . #x0142) #x0144
(#x0148 . #x014B) #x014D (#x0152 . #x0153)
(#x0166 . #x0167) #x016B #x01CE #x01D0 #x01D2 #x01D4
#x01D6 #x01D8 #x01DA #x01DC #x0251 #x0261 #x02C4 #x02C7
(#x02C9 . #x02CB) #x02CD #x02D0 (#x02D8 . #x02DB) #x02DD
#x02DF (#x0300 . #x036F) (#x0391 . #x03A9)
(#x03B1 . #x03C1) (#x03C3 . #x03C9) #x0401
(#x0410 . #x044F) #x0451 #x2010 (#x2013 . #x2016)
(#x2018 . #x2019) (#x201C . #x201D) (#x2020 . #x2022)
(#x2024 . #x2027) #x2030 (#x2032 . #x2033) #x2035 #x203B
#x203E #x2074 #x207F (#x2081 . #x2084) #x20AC #x2103
#x2105 #x2109 #x2113 #x2116 (#x2121 . #x2122) #x2126
#x212B (#x2153 . #x2154) (#x215B . #x215E)
(#x2160 . #x216B) (#x2170 . #x2179) (#x2190 . #x2199)
(#x21B8 . #x21B9) #x21D2 #x21D4 #x21E7 #x2200
(#x2202 . #x2203) (#x2207 . #x2208) #x220B #x220F #x2211
#x2215 #x221A (#x221D . #x2220) #x2223 #x2225
(#x2227 . #x222C) #x222E (#x2234 . #x2237)
(#x223C . #x223D) #x2248 #x224C #x2252 (#x2260 . #x2261)
(#x2264 . #x2267) (#x226A . #x226B) (#x226E . #x226F)
(#x2282 . #x2283) (#x2286 . #x2287) #x2295 #x2299 #x22A5
#x22BF #x2312 (#x2460 . #x24E9) (#x24EB . #x254B)
(#x2550 . #x2573) (#x2580 . #x258F) (#x2592 . #x2595)
(#x25A0 . #x25A1) (#x25A3 . #x25A9) (#x25B2 . #x25B3)
(#x25B6 . #x25B7) (#x25BC . #x25BD) (#x25C0 . #x25C1)
(#x25C6 . #x25C8) #x25CB (#x25CE . #x25D1)
(#x25E2 . #x25E5) #x25EF (#x2605 . #x2606) #x2609
(#x260E . #x260F) (#x2614 . #x2615) #x261C #x261E #x2640
#x2642 (#x2660 . #x2661) (#x2663 . #x2665)
(#x2667 . #x266A) (#x266C . #x266D) #x266F #x273D
(#x2776 . #x277F) (#xE000 . #xF8FF) (#xFE00 . #xFE0F)
#xFFFD
))
(set-char-table-range table range width))
(optimize-char-table table)
(set-char-table-parent table char-width-table)
(setq char-width-table table)))
(set-east-asian-ambiguous-width 2)
;; emacs-w3m
(eval-after-load "w3m"
'(when (coding-system-p 'cp51932)
(add-to-list 'w3m-compatible-encoding-alist '(euc-jp . cp51932))))
;; Gnus
(eval-after-load "mm-util"
'(when (coding-system-p 'cp50220)
(add-to-list 'mm-charset-override-alist '(iso-2022-jp . cp50220))))
;; SEMI (cf. http://d.hatena.ne.jp/kiwanami/20091103/1257243524)
(eval-after-load "mcs-20"
'(when (coding-system-p 'cp50220)
(add-to-list 'mime-charset-coding-system-alist
'(iso-2022-jp . cp50220))))
;; 全角チルダ/波ダッシュをWindowsスタイルにする
(let ((table (make-translation-table-from-alist '((#x301c . #xff5e))) ))
(mapc
(lambda (coding-system)
(coding-system-put coding-system :decode-translation-table table)
(coding-system-put coding-system :encode-translation-table table)
)
'(utf-8 cp932 utf-16le)))
;; cp932エンコード時の表示を「P」とする
(coding-system-put 'cp932 :mnemonic ?P)
(coding-system-put 'cp932-dos :mnemonic ?P)
(coding-system-put 'cp932-unix :mnemonic ?P)
(coding-system-put 'cp932-mac :mnemonic ?P)
;; ---------------------------------------------
;; 基本設定
;; ---------------------------------------------
(setq default-directory "~/") ; 初期ディレクトリを設定
(setq inhibit-startup-message t) ; 起動画面を消す
(setq w32-enable-synthesized-fonts t) ; 文字飾りを有効にする
(setq initial-scratch-message "") ; scratchバッファの初期メッセージを消す
(tool-bar-mode nil) ; メニューバー、ツールバー非表示
(scroll-bar-mode t) ; スクロールバーの表示
(setq visible-bell nil) ; ヴィジブルベルを抑制
(setq ring-bell-function '(lambda ())) ; ビープ音を抑制
(fset 'yes-or-no-p 'y-or-n-p) ; yes/no を y/n へ簡略化
; ガベージコレクションの頻度を落とす
(setq gc-cons-threshold (* 1024 1024 50))
;; ---------------------------------------------
;; ファイルの自動バックアップ
;; ---------------------------------------------
; バックアップファイルを一箇所にまとめる
(setq make-backup-files t)
(setq backup-directory-alist
(cons (cons "\\.*$" (expand-file-name "~/.emacs.d/backup"))
backup-directory-alist))
; バックアップのバージョン管理を行う
(setq version-control t)
; 新しいものをいくつ残すか
(setq kept-new-versions 3)
; 古いものをいくつ残すか
(setq kept-old-versions 3)
; 古いバージョンを消去するのに確認を求めない。
(setq delete-old-versions t)
;; ---------------------------------------------
;; バッファ操作
;; ---------------------------------------------
; C-c b 時のバッファ切り替えにインクリメンタルサーチを使う
(iswitchb-mode 1)
; C-c b 時にお手軽バッファ切替
(add-hook 'iswitchb-define-mode-map-hook
(lambda ()
(define-key iswitchb-mode-map "\C-n" 'iswitchb-next-match)
(define-key iswitchb-mode-map "\C-p" 'iswitchb-prev-match)
(define-key iswitchb-mode-map "\C-f" 'iswitchb-next-match)
(define-key iswitchb-mode-map "\C-b" 'iswitchb-prev-match)))
;; ---------------------------------------------
;; バッファ表示
;; ---------------------------------------------
; バッファ中の行番号表示
(global-linum-mode t)
; 行番号のフォーマット
(set-face-attribute 'linum nil :foreground "red" :height 0.8)
(setq linum-format "%4d")
; カーソル点滅表示
(blink-cursor-mode 0)
; スクロール時のカーソル位置の維持
(setq scroll-preserve-screen-position t)
; スクロール行数(一行ごとのスクロール)
(setq vertical-centering-font-regexp ".*")
(setq scroll-conservatively 35)
(setq scroll-margin 0)
(setq scroll-step 1)
; 画面スクロール時の重複行数
(setq next-screen-context-lines 1)
; スタートアップ時のエコー領域メッセージの非表示
;(setq inhibit-startup-echo-area-message -1)
; カーソル行にアンダーラインを引く
(setq hl-line-face 'underline)
(global-hl-line-mode)
; 行間を指定
(setq-default line-spacing 0.2)
;; バッファ画面外文字の切り詰め表示
(setq truncate-lines nil)
;; ウィンドウ縦分割時のバッファ画面外文字の切り詰め表示
(setq truncate-partial-width-windows t)
;; 同一バッファ名にディレクトリ付与
(require 'uniquify)
(setq uniquify-buffer-name-style 'forward)
(setq uniquify-buffer-name-style 'post-forward-angle-brackets)
(setq uniquify-ignore-buffers-re "*[^*]+*")
;; ---------------------------------------------
;; モードライン表示
;; ---------------------------------------------
; 行番号の表示
(line-number-mode t)
; 列番号の表示
(column-number-mode t)
; 日付、時刻の表示
(require 'time)
(setq display-time-24hr-format t)
(setq display-time-string-forms
'( year "/" month "/" day "(" dayname ") " 24-hours ":" minutes))
(display-time-mode t)
;; ---------------------------------------------
;; *scratch* バッファをkillさせない。
;; ---------------------------------------------
(defun my-make-scratch (&optional arg)
(interactive)
(progn
;; "*scratch*" を作成して buffer-list に放り込む
(set-buffer (get-buffer-create "*scratch*"))
(funcall initial-major-mode)
(erase-buffer)
(when (and initial-scratch-message (not inhibit-startup-message))
(insert initial-scratch-message))
(or arg (progn (setq arg 0)
(switch-to-buffer "*scratch*")))
(cond ((= arg 0) (message "*scratch* is cleared up."))
((= arg 1) (message "another *scratch* is created")))))
(add-hook 'kill-buffer-query-functions
;; *scratch* バッファで kill-buffer したら内容を消去するだけにする
(lambda ()
(if (string= "*scratch*" (buffer-name))
(progn (my-make-scratch 0) nil)
t)))
(add-hook 'after-save-hook
;; *scratch* バッファの内容を保存したら *scratch* バッファを新しく作る
(lambda ()
(unless (member (get-buffer "*scratch*") (buffer-list))
(my-make-scratch 1))))
;; ---------------------------------------------
;; リージョン関連
;; ---------------------------------------------
; リージョンをハイライト(暫定マークモード)
(setq-default transient-mark-mode t)
; バッファ切り替え時にリージョンを保持
(setq highlight-nonselected-windows t)
;; ---------------------------------------------
;; スタイルの設定
;; ---------------------------------------------
;; 初期のウインドウサイズの設定
(setq initial-frame-alist
(append
'((top . 0) ; フレーム左上の縦位置(ドット数)
(left . 180) ; フレーム左上の横位置(ドット数)
(width . 165) ; フレーム幅(文字数)
(height . 75) ; フレーム高(文字数)
(alpha . (nil nil nil nil))) ; フレームの透明度 透過率を%指定 nilで0%
initial-frame-alist))
;; ---------------------------------------------
;; キーバインド
;; ---------------------------------------------
; バッファ一覧を使い易く
(global-set-key "\C-x\C-b" 'buffer-menu)
; C-hをバックスペースに
(global-set-key "\C-h" 'delete-backward-char)
; C-h に割り当てられている関数 help-command を C-x C-h に割り当てる
(define-key global-map "\C-x\C-h" 'help-command)
; help-for-help を F1に
(global-set-key [f1] 'help-for-help)
↑↑↑↑↑↑ここまで↑↑↑↑↑↑
設定を入れ込んでEmacsを再起動すれば、基本的なエディタとしての使用が可能になる(日本語入力等)
入門Meadow/Emacs 価格:2,940円(税込、送料別) |