Spacemacsの使い勝手が安定してきたのでまとめる

  • 59
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

はじめに

emacsからはじめてvimに出会い,vimと数年を過した。
そのあとモダンなsublimeやatomと移り,JetBrainsがエルドラドかと思っていた。

しかし,去年あたりからGitHub trendで話題になっていたSpacemacsを使いはじめてJetBrainsがわたしにとっての黄金郷ではないことに気がついた。
簡単にいえば、Spacemacsとはemacsの便利機能を設定の手間を最小限に、提供するemacs lisp群である、といえる。

使いはじめて3ヶ月程度経ち安定してきたのでSpacemacsへの思い、好きなところや設定の例まとめる。

Spacemacsのよさ

Spacemacsがいい、と思うポイントは以下の三つ。

  • layer(後述)を指定するだけで、便利機能がほとんど設定なしで使える
  • カスタマイズしようと思えば、emacs lispを書いて設定できる(敷居が高いかもしれないが)
  • SKKが快適に使える(重要)

layer

Spacemacsでは機能がlayerという単位でまとまっている。
たとえば、設定ファイルにpythonと書くだけでpythonスクリプト編集時に補完や定義へのジャンプ(後述するlayerを使えばファイル間の定義のジャンプも可能)といった機能が利用可能になる。
あるいは、gitというlayerを指定することでgitクライアントとしての機能がSpacemacsに加わる。

しかも、それぞれの機能に簡単なショートカットが割り当てられており、ストレスなく利用できる。(ショートカットについてはGitHubのSpacemacsリポジトリのドキュメントにまとめられているが、helmとの連携がとれているため【M-x】とタイプするだけでショートカットを覚えずとも機能を利用することができる。)

Spacemacsのインストール

インストールはとても簡単だ。
gitとemacsがインストールされていればコマンドをひとつたたくだけだ。
わたしはemacs上では日本語入力を無効にしてddskk利用したいのでEmacs For Macを利用している。

Spaceemacsをインストールするには

  1. バックアップをとり、
  2. gitコマンドを実行し、
  3. emacsを起動する。
cd ~
mv .emacs.d .emacs.d.bak
mv .emacs .emacs.bak
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d
emacs --insecure &

くわしくはreadmeに書いてある。

なお、最初の起動時にはすこし時間がかかる。
また、キーバインドをvimにするか、emacsにするか、指定する必要がある。
わたしはvimのキーバインドに設定した。

設定

インストールすると~/.spacemacsが作成される。
このファイルに設定を記述する。

layerの利用

ファイルの上のほうに使うlayerを記述する。
利用できるlayerはここにあるディレクトリである。
なお、各ディレクトリにはキーバインドや使える機能の説明がreadmeに書いてある。

具体的に、わたしは以下のような記述をしている。

dotspacemacs-configuration-layers '(
     python
     django
     c-c++
     latex
     html
     javascript
     typescript
     haskell
     markdown
     emacs-lisp
     cscope
     osx
     (shell :variables
            shell-default-height 30
            shell-default-position 'bottom)
     git
     github
     dash
     eyebrowse
     auto-completion
     better-defaults
     version-control
     syntax-checking
     spell-checking
     )

よく利用する言語のlayerと操作する上で便利機能のlayerを指定した。

pythonの使用例

各layerの詳しい使い方はreadmeにまかせるとしてここでは具体的にpython layerの使い勝手を紹介しよう。
例として補完はimpとタイプするだけでimportが候補として表示され、C-jで候補を選び、Enterを押すと入力内容が決定される。

また、SPC i sと入力するとバッファが開き、ifm Enterをタイプするとスニペットが展開される。

なお試したところ、auto-completionの記述がpythonより上だとpythonの補完が効かなかった。
auto-completionをpythonより下のほうに記述する必要がある。

layersにないelispのインストール

愛用するddskkはlayerにないので別途インストールする必要がある。
ddskkをインストールするには~/.spacemacsに次のように記述する。
記述箇所はlayerを記述したところの少し下あたりだ。

dotspacemacs-additional-packages '(
                                      ddskk
                                      )

別途インストールしたelispについてはそれぞれ設定が必要になる。(後述)

個別の設定

行番号とddskkの設定をファイルの一番下に記述する。
行番号はemacsにデフォルトである、linumを利用する。

(defun dotspacemacs/user-config ()
  "Configuration function for user code.
This function is called at the very end of Spacemacs initialization after
layers configuration. You are free to put any user code."

  ;; linum
  (require 'linum)
  ;; 行移動を契機に描画
  (defvar linum-line-number 0)
  (declare-function linum-update-current "linum" ())
  (defadvice linum-update-current
      (around linum-update-current-around activate compile)
    (unless (= linum-line-number (line-number-at-pos))
      (setq linum-line-number (line-number-at-pos))
      ad-do-it
      ))

  ;; バッファ中の行番号表示の遅延設定
  (defvar linum-delay nil)
  (setq linum-delay t)
  (defadvice linum-schedule (around linum-schedule-around () activate)
    (run-with-idle-timer 1.0 nil #'linum-update-current))
  ;; 行番号の書式
  (defvar linum-format nil)
  (setq linum-format "%5d")
  ;; バッファ中の行番号表示
  (global-linum-mode t)
  ;; 文字サイズ
  (set-face-attribute 'linum nil :height 0.75)

  ;; for ddskk
  (when (require 'skk nil t)
    (global-set-key (kbd "C-x j") 'skk-auto-fill-mode)
    (setq default-input-method "japanese-skk")
    (require 'skk-study)
    ;; use skkserve
    (setq skk-server-host "localhost")
    (setq skk-server-portnum 1178)
    )

  )

まとめ

Spacemacsは非常にいい。
とてもいい。
みんな使えばいい。