ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja ja nb ja en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja nb en ja ja ja ja ja ja ja ja fr ja ja ja ja zh ja ja zh ja ja ja ja ja en ja ja ja ja ja en en ja ja ja ja ja ja ja ja en ja ja ja ja ja en ja ja ja ja ja ja ja ja ja ja en ja ja en sl ja ja eu ja ja en ja ja ja ja ja ja nb ja en ja ja ja en ja ja en en ja en ja ja ja ja en ja ja en ja ja ja ja ja ja ja ja ja en ja ja ja ja ja ja ja ja ja en ja ja en ja ja vi ja sv eu ja en en hu ja ja en en pl ja ja jbo hbs_lat en ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja ja
.emacs.d |-- init.el ;; 基本的な設定を記述 |-- local.el ;; (カスタマイズ用) |-- config ;; 特定のモードや非標準のElispの設定をこの下に置く | |-- builtins.el ;; 標準Elispの設定 | |-- builtins ;; 標準Elispのうち、設定が多くなるものはこの下に置く | | |-- local.el ;; (カスタマイズ用) | | `-- cc-mode.el ;; (例)標準Elispであるcc-modeの設定 | |-- packages.el ;; 非標準Elispの設定 | |-- packages ;; 非標準Elispのうち、設定が多くなるものはこの下に置く | | |-- local.el ;; (カスタマイズ用) | | `-- sdic.el ;; (例)非標準Elispであるsdicの設定 | `-- el-get ;; el-getの設定はこの下に置く | |-- recipies ;; el-getのレシピはこの下に置く | `-- local-recipies ;; (カスタマイズ用) `-- el-get ;; el-get管理のパッケージをこの下に置く
;; C-hでバックスペース ;; 2012-03-18 (keyboard-translate ?\C-h ?\C-?) ;; 基本 (define-key global-map (kbd "M-?") 'help-for-help) ; ヘルプ (define-key global-map (kbd "C-z") 'undo) ; undo (define-key global-map (kbd "C-c i") 'indent-region) ; インデント (define-key global-map (kbd "C-c C-i") 'hippie-expand) ; 補完 (define-key global-map (kbd "C-c ;") 'comment-dwim) ; コメントアウト (define-key global-map (kbd "M-C-g") 'grep) ; grep (define-key global-map (kbd "C-[ M-C-g") 'goto-line) ; 指定行へ移動 ;; ウィンドウ移動 ;; 2011-02-17 ;; 次のウィンドウへ移動 (define-key global-map (kbd "C-M-n") 'next-multiframe-window) ;; 前のウィンドウへ移動 (define-key global-map (kbd "C-M-p") 'previous-multiframe-window)
;; 再帰的にgrep ;; 2011-02-18 (require 'grep) (setq grep-command-before-query "grep -nH -r -e ") (defun grep-default-command () (if current-prefix-arg (let ((grep-command-before-target (concat grep-command-before-query (shell-quote-argument (grep-tag-default))))) (cons (if buffer-file-name (concat grep-command-before-target " *." (file-name-extension buffer-file-name)) (concat grep-command-before-target " .")) (+ (length grep-command-before-target) 1))) (car grep-command))) (setq grep-command (cons (concat grep-command-before-query " .") (+ (length grep-command-before-query) 1)))
;;; 画像ファイルを表示 (auto-image-file-mode t)
バッファ内で画像ファイルを表示します。
;;; メニューバーを消す (menu-bar-mode -1) ;;; ツールバーを消す (tool-bar-mode -1)
;;; カーソルの点滅を止める (blink-cursor-mode 0)
;;; evalした結果を全部表示 (setq eval-expression-print-length nil)
;;; 対応する括弧を光らせる。 (show-paren-mode 1) ;;; ウィンドウ内に収まらないときだけ括弧内も光らせる。 (setq show-paren-style 'mixed)
昔はmic-paren.elも使っていましたが、標準の機能で十分なので、もう使っていません。
1年前はshow-trailing-whitespaceを使っていましたが、より多くの空白を視覚化できるwhitespace-modeを使うようにしました。
;; 2011-10-27 ;; 空白や長すぎる行を視覚化する。 (require 'whitespace) ;; 1行が80桁を超えたら長すぎると判断する。 (setq whitespace-line-column 80) (setq whitespace-style '(face ; faceを使って視覚化する。 trailing ; 行末の空白を対象とする。 lines-tail ; 長すぎる行のうち ; whitespace-line-column以降のみを ; 対象とする。 space-before-tab ; タブの前にあるスペースを対象とする。 space-after-tab)) ; タブの後にあるスペースを対象とする。 ;; デフォルトで視覚化を有効にする。 (global-whitespace-mode 1)
;;; 現在行を目立たせる (global-hl-line-mode) ;;; カーソルの位置が何文字目かを表示する (column-number-mode t) ;;; カーソルの位置が何行目かを表示する (line-number-mode t) ;;; カーソルの場所を保存する (require 'saveplace) (setq-default save-place t)
;;; 行の先頭でC-kを一回押すだけで行全体を消去する (setq kill-whole-line t) ;;; 最終行に必ず一行挿入する (setq require-final-newline t) ;;; バッファの最後でnewlineで新規行を追加するのを禁止する (setq next-line-add-newlines nil)
;;; バックアップファイルを作らない (setq backup-inhibited t) ;;; 終了時にオートセーブファイルを消す (setq delete-auto-save-files t)
;;; 補完時に大文字小文字を区別しない (setq completion-ignore-case t) (setq read-file-name-completion-ignore-case t) ;;; 部分一致の補完機能を使う ;;; p-bでprint-bufferとか (partial-completion-mode t) ;;; 補完可能なものを随時表示 ;;; 少しうるさい (icomplete-mode 1)
;;; 履歴数を大きくする (setq history-length 10000) ;;; ミニバッファの履歴を保存する (savehist-mode 1) ;;; 最近開いたファイルを保存する数を増やす (setq recentf-max-saved-items 10000)
;;; gzファイルも編集できるようにする (auto-compression-mode t)
;;; ediffを1ウィンドウで実行 (setq ediff-window-setup-function 'ediff-setup-windows-plain) ;;; diffのオプション (setq diff-switches '("-u" "-p" "-N"))
;;; diredを便利にする (require 'dired-x) ;;; diredから"r"でファイル名をインライン編集する (require 'wdired) (define-key dired-mode-map "r" 'wdired-change-to-wdired-mode)
ファイル名をそのまま変更できるのは便利です。
;;; ファイル名が重複していたらディレクトリ名を追加する。 (require 'uniquify) (setq uniquify-buffer-name-style 'post-forward-angle-brackets)
見直したら1年前の設定には抜けていたので追記しました。
ファイルの先頭に#!...があるファイルを保存すると実行権をつけます。
;; 2012-03-15 (add-hook 'after-save-hook 'executable-make-buffer-file-executable-if-script-p)
M-uやM-lだけで十分なら必要ないでしょうが、たまに使いたくなるときがあるのです。
;;; リージョンの大文字小文字変換を有効にする。 ;; C-x C-u -> upcase ;; C-x C-l -> downcase ;; 2011-03-09 (put 'upcase-region 'disabled nil) (put 'downcase-region 'disabled nil)
ウィンドウの上部に現在の関数名を表示します。残念ながら大きい関数を編集しなければいけなくなったときに、今どこにいるかがわかりやすくなって便利です。
;; 2011-03-15 (which-function-mode 1)
ほとんどemacsclientは使いませんが、いつでもつながるようにはしています。
;; emacsclientで接続できるようにする。 ;; 2011-06-14 (server-start)
最後にconfig/以下に置いてある設定ファイルを読み込みます。~/.emacs.d/config/local.elがあればそれも読み込みます。local.elはリポジトリに入っていないファイルです。このおすすめ設定を使う場合はlocal.elを自作してそこでカスタマイズしてください。
;; 標準Elispの設定 (load "config/builtins") ;; 非標準Elispの設定 (load "config/packages") ;; 個別の設定があったら読み込む ;; 2012-02-15 (condition-case err (load "config/local") (error))
config/builtins.el: 標準Elispの設定
config/builtins.elには標準Elisp(Emacsに付属しているElisp)の設定を記述します。
バージョン管理システム
diredで"V"を入力するとそのディレクトリで使っているバージョン管理システム用のモードを起動します。1年前のものより賢く検出するようになっています。
;; diredから適切なバージョン管理システムの*-statusを起動 (defun dired-vc-status (&rest args) (interactive) (let ((path (find-path-in-parents (dired-current-directory) '(".svn" ".git")))) (cond ((null path) (message "not version controlled.")) ((string-match-p "\\.svn$" path) (svn-status (file-name-directory path))) ((string-match-p "\\.git$" path) (magit-status (file-name-directory path)))))) (define-key dired-mode-map "V" 'dired-vc-status) ;; directoryの中にbase-names内のパスが含まれていたらその絶対パスを返す。 ;; 含まれていなかったらdirectoryの親のディレクトリを再帰的に探す。 ;; 2011-03-19 (defun find-path-in-parents (directory base-names) (or (find-if 'file-exists-p (mapcar (lambda (base-name) (concat directory base-name)) base-names)) (if (string= directory "/") nil (let ((parent-directory (substring directory 0 -1))) (find-path-in-parents parent-directory base-names)))))
自動でスペルチェックを実行します。スペルミスの単語は色が変わるのですぐに気づけます。
;; 2011-03-09 (setq-default flyspell-mode t) (setq ispell-dictionary "american")
テキスト編集用のモード共通の設定です。
;; 2012-03-18 ;; text-modeでバッファーを開いたときに行う設定 (add-hook 'text-mode-hook (lambda () ;; 自動で長過ぎる行を分割する (auto-fill-mode 1)))
C言語と同じような構文のプログラミング言語用の設定です。
;; 2012-03-18 ;; c-modeやc++-modeなどcc-modeベースのモード共通の設定 (add-hook 'c-mode-common-hook (lambda () ;; BSDスタイルをベースにする (c-set-style "bsd") ;; スペースでインデントをする (setq indent-tabs-mode nil) ;; インデント幅を2にする (setq c-basic-offset 2) ;; 自動改行(auto-new-line)と ;; 連続する空白の一括削除(hungry-delete)を ;; 有効にする (c-toggle-auto-hungry-state 1) ;; CamelCaseの語でも単語単位に分解して編集する ;; GtkWindow => Gtk Window ;; EmacsFrameClass => Emacs Frame Class ;; NSGraphicsContext => NS Graphics Context (subword-mode 1)))
emacs-lisp-mode
Elispを編集するときの設定です。
;; 2012-03-18 ;; emacs-lisp-modeでバッファーを開いたときに行う設定 (add-hook 'emacs-lisp-mode-hook (lambda () ;; スペースでインデントをする (setq indent-tabs-mode nil)))
最後に~/.emacs.d/config/buitins/local.elがあればそれもそれも読み込みます。local.elはリポジトリに入っていないファイルです。このおすすめ設定を使う場合はlocal.elを自作してそこでカスタマイズしてください。
;; 個別の設定があったら読み込む ;; 2012-03-18 (condition-case err (load "config/builtins/local") (error))
config/packages.el: 非標準Elispの設定
パッケージ管理ステムとして複数のソースからパッケージをインストールできるel-getを使います。el-getがない場合は自動でインストールします。
;; 2012-03-15 (add-to-list 'load-path "~/.emacs.d/el-get/el-get") (unless (require 'el-get nil t) (with-current-buffer (url-retrieve-synchronously "https://raw.github.com/dimitri/el-get/master/el-get-install.el") (end-of-buffer) (eval-print-last-sexp))) ;; レシピ置き場 (add-to-list 'el-get-recipe-path (concat (file-name-directory load-file-name) "/el-get/recipes")) ;; 追加のレシピ置き場 (add-to-list 'el-get-recipe-path "~/.emacs.d/config/el-get/local-recipes")
レシピは~/.emacs.d/config/el-get/recipies/に置いています。レシピを追加したい場合は~/.emacs.d/config/el-get/local-recipies/ディレクトリを作ってその下に*.rcpというファイルを作ってください。
grep-edit: grep結果をインラインで編集
grepの結果を直接編集できるようになります。wdiredと合わせてC-c C-cでも編集結果を反映できるようにしています。
;;; *grep*で編集できるようにする (el-get 'sync '(grep-edit)) (add-hook 'grep-setup-hook (lambda () (define-key grep-mode-map (kbd "C-c C-c") 'grep-edit-finish-edit)))
Auto Complete: 自動補完
自動で補完候補をだしてくれて便利です。補完候補をC-n/C-pでも選択できるようにしています。
;;; 自動補完 (el-get 'sync '(auto-complete)) (add-hook 'auto-complete-mode-hook (lambda () (define-key ac-completing-map (kbd "C-n") 'ac-next) (define-key ac-completing-map (kbd "C-p") 'ac-previous)))
いろいろ便利に使えるらしいAnythingですが、iswitchb-modeとyank-popの代わりにだけ使っています。imenuの代わりにも使ってみようとしています。
;;; Anything (let ((original-browse-url-browser-function browse-url-browser-function)) (el-get 'sync '(anything)) (require 'anything-config) (anything-set-anything-command-map-prefix-key 'anything-command-map-prefix-key "C-c C- ") (define-key global-map (kbd "C-x b") 'anything-for-files) (define-key global-map (kbd "C-x g") 'anything-imenu) ; experimental (define-key global-map (kbd "M-y") 'anything-show-kill-ring) (define-key anything-map (kbd "C-z") nil) (define-key anything-map (kbd "C-l") 'anything-execute-persistent-action) (define-key anything-map (kbd "C-o") nil) (define-key anything-map (kbd "C-M-n") 'anything-next-source) (define-key anything-map (kbd "C-M-p") 'anything-previous-source) (setq browse-url-browser-function original-browse-url-browser-function))
Migemo: ローマ字で日本語をインクリメンタルサーチ
;; 2012-03-19 ;; インストールされていたら有効にする。 (require 'migemo nil t)
ruby-mode: Ruby編集用モード
Emacsに添付されているruby-modeは古いのでRubyのリポジトリに入っているものを使います。Emacsに添付されているruby-modeでは、C-c C-eでendを挿入することができなかったりします。
;; 2012-03-15 (el-get 'sync '(ruby-mode-trunk))
rabbit-mode: Rabbitスライド編集用モード
Rabbitのスライドを編集するためのモードです。
;; 2012-03-16 (el-get 'sync '(rabbit-mode))
run-test: テスト実行
C-x C-tで近くにあるrun-test.shやrun-test.rbという名前のファイルを実行するツールです。
;;; テスト実行 (el-get 'sync '(run-test))
最後に~/.emacs.d/config/packages/local.elがあればそれもそれも読み込みます。local.elはリポジトリに入っていないファイルです。このおすすめ設定を使う場合はlocal.elを自作してそこでカスタマイズしてください。
;; 個別の設定があったら読み込む ;; 2012-03-15 (condition-case err (load "config/packages/local") (error))
Emacs実践入門と1年経ったおすすめのEmacsの設定を紹介しました。
ここで紹介した内容はGitHubに置いておいたので、興味がある人は試してみてください。使い方はREADMEを参照してください。ここで紹介した内容が難しい場合はEmacs実践入門を読んでみるとよいかもしれません。
https://amazon.co.jp/dp/9784774150024
60ページの注2。 ↩
現在クリアコードではソフトウェア開発者を募集しています! フリーソフトウェア開発での開発の仕方をベースに、成果や知識を公開し共有しながら業務に携われます。
クリアなコードの作り方: 意図が伝わるコミットのしかた
ifとreturnの使い方
Apache Arrow
milter manager
ククログの記事はCC BY-SA 4.0とGFDLのデュアルライセンスで自由に利用できます。
クリアコードはプログラミングが楽しいソフトウェア開発者を1名募集しています。
クリアコードは「クリアコードをいい感じにする人」を1名募集しています。
クリアコードはフリーソフトウェア開発で培った技術力を提供しています。特にMozilla製品(Mozilla FirefoxとMozilla Thunderbird)とRubyとGroonga(全文検索)に関連した開発を得意としています。