Emacsのカスタマイズ
LinuxのEmacsをカスタマイズするには,ホームディレクトリに.emacs.dというディ レクトリを作成し, その中のinit.elというファイルにいろいろなカスタマイズ を記述します. 設定には多様なものがありますが、ここでは筆者の特におすすめする設定を記述 しておきます.
emacsメモ
前提条件
- 設定ファイルは.emacsじゃなくて.emacs.d/init.el。枠の中の内容はす べてinit.elに記述してあることを前提に記述しています。
- 追加の機能はすべて~/.emacs.d/elisp/の中につっこむ。なければmkdirコマ ンドで作成してください。
- RETはエンターキー、TABはタブキーの意味。
- 操作とかは、C-h tでチュートリアルが出てくるからそれで覚えておくこと。
elisp
おまじない
;; 言語設定 (set-language-environment 'Japanese) ;; 文字コード設定 (prefer-coding-system 'utf-8)
パス通す
;; パスの設定 (setq load-path (cons "~/.emacs.d/elisp" load-path))
括弧の強調
;; 対応する括弧の強調 (show-paren-mode t)
外部とクリップボードを共有
;; 外部デバイスとクリップボードを共有 (setq x-select-enable-clipboard t)
改行するときに自動でインデント
- C-mでもいいし、Enterするときも自動インデントするようになる
;; 改行でオートインデント (global-set-key "\C-m" 'newline-and-indent)
BSやDel、文字入力で範囲選択した部分すべての文字を削除
;; BSやDel、文字入力でリージョン内の文字を削除 (delete-selection-mode 1)
C-k 1回で行全体を削除する
;; C-k 1回で行全体を削除する (setq kill-whole-line t)
M-jを入力すると対応するカッコに飛ぶ
;; M-jを入力すると対応するカッコに飛ぶ (global-set-key (kbd "M-j") 'match-paren) (defun match-paren (arg) "Go to the matching paren if on a paren; otherwise insert %." (interactive "p") (cond ((looking-at "\\s\(") (forward-list 1) (backward-char 1)) ((looking-at "\\s\)") (forward-char 1) (backward-list 1)) (t (self-insert-command (or arg 1)))))
インデント幅space4つに
;indent幅をtab=space4つに ;通常インデントをspace4つに ;; (setq tab-width 4) ;; (setq indent-tabs-mode nil) (defun my-c-mode-hook () (c-set-style "linux") (setq c-basic-offset 4) (setq tab-width c-basic-offset) (setq indent-tabs-mode nil) ;; (gtags-mode t) ;;gtagsという関数一覧機能を使いたい人はこれを有効にする。学校のmacには入っていない。 ;; (gtags-make-complete-list) ) (add-hook 'c-mode-hook 'my-c-mode-hook) (add-hook 'c++-mode-hook 'my-c-mode-hook)
キーバインド・内部シェルのlsオプション
;;;;;;;;;;;;;;;;;;;;;;;; ;; その他設定 ;;;;;;;;;;;;;;;;;;;;;;;; ;; emacs内部シェルのlsオプション設定 (setq dired-listing-switches "-lh") ;; ウインドウ間移動のキーバインドにC-\を追加 (define-key global-map "\C-\\" 'other-window) ;; 分割ウインドウをShift+カーソルキーで移動 (windmove-default-keybindings) (setq windmove-wrap-around t) ;; Ctrl + :でgoto line (define-key global-map (kbd "C-:") 'goto-line) ;; Ctrl + Shift + 7でaddrev静的展開 (define-key global-map (kbd "C-'") 'expand-addrev) ;; Ctrl + hでdelete backward char (define-key global-map (kbd "C-h") 'delete-backward-char)
auto-install
まずhttp://www.emacswiki.org/emacs/download/auto-install.elからauto-install.elを~/.emacs.d/elisp/の中に突っ込んでおく
init.elに以下の文を追加して、"M-x load-file RET ~/.emacs.d/init.el"でOK
init.elに以下の文を追加して、"M-x load-file RET ~/.emacs.d/init.el"でOK
(require 'auto-install) (setq auto-install-directory "~/.emacs.d/elisp/") (auto-install-update-emacswiki-package-name t) (auto-install-compatibility-setup)
auto-complete
"M-x auto-install-batch RET auto-c TAB RET"
あとはソース出てきたらC-c C-cでコンパイルしてくれる
mini bufferにcompleted!とかでたらOK。
あとはソース出てきたらC-c C-cでコンパイルしてくれる
mini bufferにcompleted!とかでたらOK。
~/.emacs.d/elisp/にauto-complete-dicsというディレクトリを作成したのち、init.elに以下の文を追加して、M-x load-fileなんちゃらすれば終了 ;auto-completeの設定 (require 'auto-complete) (global-auto-complete-mode t) ;; 辞書保存 (setq ac-comphist-file "~/.emacs.d/elisp/auto-complete-dics/auto-dics") (setq ac-dictionary-directories "~/.emacs.d/elisp/auto-complete-dics/")
anything
"M-x auto-install-batch RET anything"
インストールするファイル数多いからちょっとめんどう
completedしたら、init.elに以下の文を追加
インストールするファイル数多いからちょっとめんどう
completedしたら、init.elに以下の文を追加
;; ;; anything -------------------------------------- ;; (require 'anything) (require 'anything-startup) (require 'anything-config) (require 'recentf) (add-to-list 'anything-sources 'anything-c-source-emacs-commands) (define-key global-map (kbd "C-^") 'anything) ;Ctrl-^で起動 ;; 縦横切り替え (defun my-anything-toggle-resplit-window () (interactive) (when (anything-window) (save-selected-window (select-window (anything-window)) (let ((before-height (window-height))) (delete-other-windows) (switch-to-buffer anything-current-buffer) (if (= (window-height) before-height) (split-window-vertically) (split-window-horizontally))) (select-window (next-window)) (switch-to-buffer anything-buffer)))) (define-key anything-map "\C-j" 'my-anything-toggle-resplit-window) ;;バッファの一覧を取得 ;;anything-c-source-buffers ;;バッファにマッチしなかった場合にバッファを作成 ;;anything-c-source-buffer-not-found ;;カレントディレクトリにあるファイル一覧 ;;anything-c-source-files-in-current-dir ;;最近開いたファイル一覧 ;;anything-c-source-recentf (setq recentf-max-saved-items 3000) (recentf-mode 1)
これで、C-^でanythingがつかえるようになる。
また、縦分割の方が使いやすい!と言う人は、C-jで縦横分割をトグルする方法は以下。
ただ、初期設定で縦分割する方法はまだよくわかってないです。
また、縦分割の方が使いやすい!と言う人は、C-jで縦横分割をトグルする方法は以下。
ただ、初期設定で縦分割する方法はまだよくわかってないです。
(defun my-anything-toggle-resplit-window () (interactive) (when (anything-window) (save-selected-window (select-window (anything-window)) (let ((before-height (window-height))) (delete-other-windows) (switch-to-buffer anything-current-buffer) (if (= (window-height) before-height) (split-window-vertically) (split-window-horizontally))) (select-window (next-window)) (switch-to-buffer anything-buffer)))) (define-key anything-map "\C-j" 'my-anything-toggle-resplit-window)
色設定
- 色を色々簡単に変えれるようになる
- 今筆者が使ってるのはbharadwaj-slateってやつ
- 参考:http://www-section.cocolog-nifty.com/blog/2008/08/emacs_color_the.html
- 入れる場所は~/.emacs.d/elispの中にしましょう
;; color設定 (require 'color-theme) (color-theme-initialize) (color-theme-bharadwaj-slate) ;;ここを自由に変えるとよい。M-x color-thee-selectで選べます。
カーソル位置を表示
;; カーソル位置を表示 (setq line-number-mode t) (setq column-number-mode t)
同一ファイル名のバッファの名前をわかりやすくする
;; 同一ファイル名のバッファをわかりやすくする (require 'uniquify) (setq uniquify-buffer-name-style 'post-forward-angle-brackets)
jaspace
;; 全角空白、Tab、改行表示 (require 'jaspace) (setq jaspace-alternate-jaspace-string "□") (setq jaspace-alternate-eol-string "↓\n") (setq jaspace-highlight-tabs t) (setq jaspace-modes (append jaspace-modes '(scheme-mode php-mode yaml-mode js-mode ruby-mode text-mode fundamental-mode LaTeX-mode)))
GDBを使いやすくする
以下の設定を追加。
;;;;;;;;;;;;;;;;;;;;;; ;; GDB関連 ;;;;;;;;;;;;;;;;;;;;;; ;; 有用なバッファを開くモード (setq gdb-many-windows t) ;; 変数の上にマウスカーソルを置くと値を表示 (add-hook 'gdb-mode-hook '(lambda () (gud-tooltip-mode t))) ((lambda nil (gud-tooltip-mode t))) ;; I/O バッファを表示 (setq gdb-use-separate-io-buffer t) ;; t にすると mini buffer に値が表示される (setq gud-tooltip-echo-area nil)
ansi-termとshell-pop
- これをやると、C-tでターミナルが立ち上がる。
- 大量にprintfすると表示が崩れるけど、すごく使いやすい。
- 参考:http://d.hatena.ne.jp/mooz/20100405/p1
- shell-popのダウンロード先
- http://www.emacswiki.org/emacs/download/shell-pop.el
- M-x auto-install-from-emacswikiからshell-popでもOK
;; ansi-termの設定 (require 'term) (defvar ansi-term-after-hook nil) (add-hook 'ansi-term-after-hook (function (lambda () (define-key term-raw-map "\C-x\C-v" '(lambda ()(interactive)(ansi-term "/bin/zsh"))) (define-key term-raw-map "\C-c\C-c" 'my-term-line-char-switch)))) (defadvice ansi-term (after ansi-term-after-advice (arg)) "run hook as after advice" (run-hooks 'ansi-term-after-hook)) (ad-activate 'ansi-term) (defun my-term-line-char-switch() (interactive) (if (term-in-line-mode) (term-char-mode) (if (term-in-char-mode) (term-line-mode)))) (add-hook 'term-mode-hook (function (lambda () (setq term-prompt-regexp "^[^#$%>\n]*[#$%>] *") (make-local-variable 'mouse-yank-at-point) (make-local-variable 'transient-mark-mode) (setq mouse-yank-at-point t) (setq transient-mark-mode t) (auto-fill-mode -1) (setq tab-width 4) (define-key term-mode-map "\C-i" 'term-dynamic-complete) (define-key term-mode-map "\C-m" 'term-send-input)))) ;; キーマップの設定 (defvar my-shell-pop-key (kbd "C-t")) (defvar my-ansi-term-toggle-mode-key (kbd "<f2>")) ;; ansi-termの設定 (defadvice ansi-term (after ansi-term-after-advice (arg)) "run hook as after advice" (run-hooks 'ansi-term-after-hook)) (ad-activate 'ansi-term) (defun my-term-switch-line-char () "Switch `term-in-line-mode' and `term-in-char-mode' in `ansi-term'" (interactive) (cond ((term-in-line-mode) (term-char-mode) (hl-line-mode -1)) ((term-in-char-mode) (term-line-mode) (hl-line-mode 1)))) (defadvice anything-c-kill-ring-action (around my-anything-kill-ring-term-advice activate) "In term-mode, use `term-send-raw-string' instead of `insert-for-yank'" (if (eq major-mode 'term-mode) (letf (((symbol-function 'insert-for-yank) (symbol-function 'term-send-raw-string))) ad-do-it) ad-do-it)) (defvar ansi-term-after-hook nil) (add-hook 'ansi-term-after-hook (lambda () ;; shell-pop (define-key term-raw-map my-shell-pop-key 'shell-pop) ;; これがないと M-x できなかったり (define-key term-raw-map (kbd "M-x") 'nil) ;; コピー, 貼り付け (define-key term-raw-map (kbd "C-k") (lambda (&optional arg) (interactive "P") (funcall 'kill-line arg) (term-send-raw))) (define-key term-raw-map (kbd "C-y") 'term-paste) (define-key term-raw-map (kbd "M-y") 'anything-show-kill-ring) ;; C-t で line-mode と char-mode を切り替える (define-key term-raw-map my-ansi-term-toggle-mode-key 'my-term-switch-line-char) (define-key term-mode-map my-ansi-term-toggle-mode-key 'my-term-switch-line-char) ;; Tango! (setq ansi-term-color-vector [unspecified "#000000" ; black "#ff3c3c" ; red "#84dd27" ; green "#eab93d" ; yellow "#135ecc" ; blue "#f47006" ; magenta "#89b6e2" ; cyan "#ffffff"] ; white ) )) ;; shell-popの設定 (require 'shell-pop) (shell-pop-set-window-height 50) (shell-pop-set-internal-mode "ansi-term") (shell-pop-set-internal-mode-shell shell-file-name) (global-set-key my-shell-pop-key 'shell-pop)
dsvn
いれたら以下をinit.elに追加
;dsvnの設定 (autoload 'svn-status "dsvn" "Run `svn status'." t) (autoload 'svn-update "dsvn" "Run `svn update'." t)
magit
$ sudo aptitude install magit
して、init.elに以下を加えるだけ
(require 'magit)
gitが便利に使えそう。
anything-rcodetools
- rubyやgem等環境設定後
- emacsでauto-install-from-emacswikiで、anything-rcodetools
- rubyのインストール先/.gem/ruby/1.8/gems/rcodetools-0.x.x/にあるrcodetools.elをロードパスの通った場所にコピー
- rvmつかってるときは、~/.rvm/rubies/ruby-1.9.2-p180/lib/ruby/gems/1.9/gems/rcodetools-0.8.5.0とかそのへん。
- ~/.emacs.d/init.elに以下を追加
$ gem install rcodetools fastri
;; rcodetools require 'rcodetools) (setq rct-find-tag-if-available nil) (defun make-ruby-scratch-buffer () (with-current-buffer (get-buffer-create "*ruby scratch*") (ruby-mode) (current-buffer))) (defun ruby-scratch () (interactive) (pop-to-buffer (make-ruby-scratch-buffer))) (defun ruby-mode-hook-rcodetools () (define-key ruby-mode-map "\M-\C-i" 'rct-complete-symbol) (define-key ruby-mode-map "\C-c\C-t" 'ruby-toggle-buffer) (define-key ruby-mode-map "\C-c\C-d" 'xmp) (define-key ruby-mode-map "\C-c\C-f" 'rct-ri)) (add-hook 'ruby-mode-hook 'ruby-mode-hook-rcodetools) (require 'anything-rcodetools) ;; Command to get all RI entries. (setq rct-get-all-methods-command "PAGER=cat fri -l") ;; See docs (define-key anything-map [(control ?;)] 'anything-execute-persistent-action)
メモ
cua-mode
- CTRL-RETで選択後ESC-nで連番の挿入
;; 矩形選択 (C-RET) (cua-mode t) (setq cua-enable-cua-keys nil)
デフォルトフォントサイズの変更 [#cabbaa9c]
- 参考ページ
- メモ
- scratchで
- .Xresourcesに結果をはって、フォントサイズっぽいとこを変える
- これやってemacs再起動
(frame-parameter nil 'font)
emacs*font: (1ででた結果)
$ xrdb .Xresources
windows
- インストール
emacsをちょっと便利につかう
を参考にしてみた
を参考にしてみた
- フォント
等幅のメイリオの作り方
MeiryoKe_console
MeiryoKe_console
はまったこと
emacs@cygwinで、auto-install-batchをやろうとするとsyntax error なんちゃらvoid: Usage: [#g3260fb6]
emacsがきちんとcygwinにインストールされてなかったようです。
cygwinのインストーラーから、emacs関連のものをすべてインストールしたら普通につかえました。
cygwinのインストーラーから、emacs関連のものをすべてインストールしたら普通につかえました。