Emacsの設定

パッケージ管理

package.elではなく,caskかEl-docというので管理するのが主流らしい. caskを使ってみる.

インストール

$ curl -fsSkL https://raw.github.com/cask/cask/master/go | python # ubuntu
$ brew install cask # OSX
$ export PATH="/home/nobunaga/.cask/bin:$PATH"

初期設定と使い方

$cd .emacs.d
$ cask init    # 初期化時に一度だけ実行.Caskというファイルが生成される.
$ cask install # Caskの指定にしたがって必要なパッケージをインストール.
$ cask update  # updateがあれば更新する.

Caskの書き方

  • (depends-on "package-name") でpackage-nameのパッケージが.emacs.d/.cask以下に保存される

init.elの設定

  • 下記を記入しておくと,Caskに書いたファイルを自動でrequireしてくれる.
(require 'cask "~/.cask/cask.el") ; Ubuntu
(require 'cask)                   ; OSX
(cask-initialize)
  • Caskでinit.elも大分すっきりする.個別で書かないと行けないけど忘れる部分だけ整理しておく.
;; load-path
(setq load-path
      (append (list 
        (expand-file-name "~/.emacs.d/site-lisp")
       load-path))

;; font
(add-to-list 'default-frame-alist '(font . "ricty-10"))

;; keybinds
(define-key global-map "\C-h" 'delete-backward-char)
(define-key global-map "\C-z" 'undo)
(global-set-key [C-tab] 'next-multiframe-window)
(global-set-key [C-S-iso-lefttab] 'previous-multiframe-window)

;; preference
(column-number-mode t)
(line-number-mode t)

補間関係

  • 補間がauto-completeよりもcompanyの例を見るのでそっちにする.特に,C/C++ようにirony-modeも入れておく.Pythonにはcompany-jediを入れておく(jediは入れない).
  • Caskでcompany, company-ironyを指定しておく.
  • 初回起動時にはirony-install-server(c/c++), jedi:install-server(Python)を実行する.(この時にlibClangが無いとエラーになるので,libClang-devを入れておく.Macだとllvm --with-clangで入っている。Cmakeも必要なので注意。)
(global-company-mode 1)
;; c/c++
(add-hook 'c-mode-hook 'irony-mode)
(add-hook 'c++-mode-hook 'irony-mode)
(add-hook 'irony-mode-hook 'irony-cdb-autosetup-comile-options)
(add-to-list 'company-backends 'company-irony)
;; python
(require 'jedi-core)
(setq jedi:complete-on-dot t)
(setq jedi:use-shortcuts t)
(add-hook 'python-mode-hook 'jedi:setup)
(add-to-list 'company-backends 'company-jedi)
;; general
(setq comany-idle-delay 0)
(setq comany-minimum-prefix-length 2)
(setq comany-selection-wrap-around t)
;; (setq company-idle-delay nil) ; 自動補完をしない
(global-set-key (kbd "C-M-i") 'company-complete)
(define-key company-active-map (kbd "C-n") 'company-select-next)
(define-key company-active-map (kbd "C-p") 'company-select-previous)
(define-key company-search-map (kbd "C-n") 'company-select-next)
(define-key company-search-map (kbd "C-p") 'company-select-previous)
(define-key company-active-map (kbd "<tab>") 'company-complete-selection)

Yasnippet

  • 最低限の設定は下記。最近のバージョンはTABが展開キーだと指定する必要がある。
  • 下記の設定だと標準のyas-installed-snippet-dir内のsnippetと、自分で追加したsnippet(.emacs.d/snippet)が使用される。
(require 'yasnippet)
(setq yas-snippet-dirs
      '("~/.emacs.d/snippets"
    yas-installed-snippets-dir))
(define-key yas-minor-mode-map (kbd "C-x i i") 'yas-insert-snippet)
(define-key yas-minor-mode-map (kbd "C-x i n") 'yas-new-snippet)
(define-key yas-minor-mode-map (kbd "C-x i v") 'yas-visit-snippet-file)
(yas-global-mode 1)
(custom-set-variables '(yas-trigger-key "TAB"))
  • 使い方としては、(キーバインドを変えているけど)、例えばpythonモードで、classでTABを打つとクラス定義のテンプレートを生成してくれるし、ifmでTABを押すとif name == 'main':を展開してくる。
  • 新しくsnippetを生成するときは、'C-x i i'でYasnippet編集バッファに移動して、名前(ファイル名)と、キー(TABで展開する指定文字)を決めて、その後ろに展開したいコードを書く。C-c, C-cで保存する。モードとか、フォルダを聞いてくるので適時応える。