前の仕事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円(税込、送料別) |