• 加筆
  • 2017.12.08
  • 修正
十一月
27
月曜日

Spacemacs入門

エディタはVim派だけどClojureの開発でCIDERを使ってみたいという動機から唐突に Spacemacs へ入門してみる。

まずはインストールと基本的な使い方をメモ。


インストール

SpacemacsのドキュメントmacOS向けの前提条件インストールガイドを読みながらインストールを実施。

emacs-plus

emacs-plushomebrewのEmacs formulaeを元にしたformulaeでSpacemacsを利用するための前提となるEmacs本体とその他必要なライブラリをインストールする。

brew tap d12frosted/emacs-plus
brew install emacs-plus
brew linkapps emacs-plus

Spacemacs

Stableであるmasterブランチからspacemacsをclone

git clone https://github.com/syl20bnr/spacemacs ~/.emacs.d

Source Code Pro

推奨フォントをインストールしておく。

Cask 経由で homebrew-fonts から Source Code Pro をインストールする。

brew tap caskroom/fonts
brew cask install font-source-code-pro

Emacs起動

Emacs初回起動時にはSpacemacsが必要するelispパッケージが自動的にインストールされる。

コンフィグレーション

ドットファイル

ドットファイルは $HOME/.spacemacs となる。

ドットファイルの肥大化を抑制し用途毎に異なるファイルに分割して管理したい場合は、ディレクトリ $HOME/.spacemacs.d を作成し直下のinit.elを起点とした管理をすることもできる。

とりあえず今回は.spacemacs.dのスタイルを適用し、作成済みの .spacemacs.spacemacs.d/init.el へと移動した。

mkdir $HOME/.spacemacs.d
mv $HOME/.spacemacs $HOME/.spacemacs.d/init.el

SPC f e d でSpacemacs用ドットファイルを開くことができる。
( SPC はスペースキー )

コンフィグレーションの反映

修正したコンフィグレーションは、SPC f e R で反映される。

レイヤー

レイヤーはSpacemacs固有の仕組みで用途に応じた一つ上のelispパッケージとそのSpacemacs用コンフィグレーションをまとめた単位。 以下に公式が提供済みの各種レイヤーがある。

$HOME/.spacemacs.d/init.eldotspacemacs/layers関数内dotspacemacs-configuration-layersリストに利用したいレイヤーを追加しコンフィグレーションを反映させれば利用可能となる。

モードライン

モードラインには現在のウインドウ、バッファ等のステータスが表示される。
Spacemacsではカスタマイズされたpowerlineを使用している。

モードライン要素の切り替え

モードライン中に表示する要素は SPC t m から任意の要素を表示を切り替えることができる。
(例: SPC t m b でバッテリー状況の表示/非表示を切り替え)

Evilステート

Evilではvimにおけるモードをステートと呼ぶ。
(Emacsではメジャー・マイナーモードという概念が別途あるため)

モードラインの一番左側にはウインドウ番号が表示されるが、その背景色は現在のEvilのステートを表している。

マイナーモード

モードライン中の丸付き文字(など)は有効になっているマイナーモードの種類を表す。

Powerlineセパレータのカスタマイズ

Powerlineのセパレータ一覧から好みのセパレータを選択することができる。

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(setq powerline-default-separator 'セパレータ名)

Powerlineの色不具合の回避

Powerlineセパレータの色合いが異なり見た目がおかしい件は、

  • sRGB色空間を無効にする
  • セパレータをutf-8に変更する(矢印)
  • セパレータをnilに変更する(装飾なし)

のいずれか解消できる。今回はutf-8セパレータを変更することで対応した。

https://github.com/milkypostman/powerline/issues/54

sRGB色空間を無効化する場合

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(setq ns-use-srgb-colorspace nil)

utf-8セパレータを変更する場合

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(setq powerline-default-separator 'utf-8)

または

(setq powerline-default-separator nil)

バックスラッシュの入力問題

macOSでは ¥ キーで円記号(U+00A5)、Option + ¥ でバックスラッシュ(U+005C)が入力される。
このためEmacsでOptionキーをメタキーとして利用しているとバックスラッシュが入力できなくなる。

この問題については以下のいずれかで対処できる。

バックスラッシュを優先

¥を打つと\が入力されるようにする。
半角の¥の入力はできなくなる。

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(define-key evil-insert-state-map [165] [92])

16592は円記号キーとバックスラッシュの10進数のASCIIコード値。
これで円記号キーでバックスラッシュが入力されるようになる。

Optionをメタキーとして使用しない

macOS用レイヤーを導入しOptionキーをメタキーとして利用しないようにすることができる。

$HOME/.spacemacs.d/init.eldotspacemacs/layers関数内dotspacemacs-configuration-layersリストに以下を追加。

(osx :variables osx-use-option-as-meta nil)

これで ¥ キーで円記号(U+00A5)、Option + ¥ でバックスラッシュ(U+005C)が入力される。

ただしこれによりメタキーが未定義状態となる。

Spacemacs的にはLeader keyを起点に操作するため困るケースは少ないのかもしれないが、Transient stateの開始などはM-SPCを利用するため影響はありそうだ。

Optionをメタキーとしたまま Option + 円記号 の時だけバックスラッシュを入力する

Optionはメタキーのままの設定で M-¥を打つと\が入力されるようにする。

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加

(define-key evil-insert-state-map (kbd "M-¥") [92])

前述の二つの方法に比べデメリットは無さそうなので今回はこれで行くことにした。

ファイル操作

ファイル操作系のキーバインドから一部抜粋。

ファイルブックマーク
SPC f b
ファイルを開く
SPC f f
最近開いたファイルから開く
SPC f r
ファイルを保存
SPC f s
ファイルを別名で保存
SPC f c
全てのファイルを保存
SPC f S
ファイラ(dired)へジャンプ
SPC f j
カレントファイルをリネーム
SPC f R
サイドバーにファイルツリーを表示・非表示(NeoTree)
SPC f t
改行コードをdosからunixへ変換
SPC f C d
改行コードをdosからunixへ変換
SPC f C u

バッファ操作

バッファ操作系のキーバインドから一部抜粋。

直近操作した二つのバッファを交互の選択
SPC TAB
バッファの選択(helm)
SPC b b
バッファの削除
SPC b d
現在のバッファ以外を削除
SPC b m
*spacemacs* ホームバッファを開く
SPC b h
次のバッファを選択
SPC b n
前のバッファを選択
SPC b p
ファイルから再読込
SPC b R
読み込み専用モードのトグル
SPC b w
スクラッチバッファを選択
SPC b s

ウインドウ操作

ウインドウ操作系のキーバインドから一部抜粋。

指定番号のウインドウへ移動
SPC w 0〜9
ウインドウを削除
SPC w d
新規フレーム作成
SPC w F
水平分割して新しいウインドウを作成
SPC w s
垂直分割して新しいウインドウを作成
SPC w v
右側のウインドウへ移動
SPC w l
左側のウインドウへ移動
SPC w h
上のウインドウへ移動
SPC w j
下のウインドウへ移動
SPC w k
右側のウインドウと入れ替え
SPC w L
左側のウインドウと入れ替え
SPC w H
上のウインドウと入れ替え
SPC w J
下のウインドウと入れ替え
SPC w K

検索

検索系のキーバインドから一部抜粋。

カレントバッファ内の検索
SPC s s
カーソル下の単語でカレントバッファ内の検索
SPC s S
全てのバッファ内の検索
SPC s b
カーソル下の単語で全バッファ内の検索
SPC s B
最後に検索した検索結果を再度表示
SPC r l

プロジェクト

プロジェクト検索系のキーバインドプロジェクト管理系のキーバインドから一部抜粋。

検索

プロジェクトのファイル内を検索
SPC /
カーソル下の単語でプロジェクトのファイル内の検索
SPC *
プロジェクト内のファイルを名前で検索
SPC p f
プロジェクト内のディレクトリを名前で検索
SPC p d

ファイル

別プロジェクトのファイルを開く

SPC p p

プロジェクト内の最近開いたファイルを開く

SPC p r

サイドバーにファイルツリーを表示・非表示(NeoTree)

SPC p t

プロジェクトルートをファイラ(dired)で開く

SPC p D

バッファ

別プロジェクトのバッファを選択

SPC p p

プロジェクト内のバッファの選択

SPC p b

プロジェクトの全バッファを削除

SPC p k

UI

フォント

デフォルトのフォントを変更する場合$HOME/.spacemacs.d/init.eldotspacemacs/init関数内dotspacemacs-default-fontを修正する。

;; 例) RobotoMono Nerd Fonrtに変更。 
dotspacemacs-default-font '("RobotoMono Nerd Font"
                               :size 12
                               :weight light
                               :width normal
                               :powerline-scale 1.1)

カラーテーマ

カラーテーマはデフォルトでspacemacs-darkが使用されている。

テーマを変更する場合$HOME/.spacemacs.d/init.eldotspacemacs/init関数内dotspacemacs-themesリストを修正を修正する。

テーマの選択(helm)
SPC T s
dotspacemacs-themesで指定されている次のテーマへ切り替え
SPC T n

その他UI関連のトグル

UIトグル系のキーバインドから一部抜粋。

80桁を超える文字列をハイライト表示

SPC t 8

SPC t h h

シンタックスハイライト表示

SPC t h s

長い行を折り返し表示

SPC t l

長い行を単語位で折り返し表示

SPC t L

行番号を表示

SPC t n

フルスクリーン

SPC T F

フレームを最大化

SPC T M

背景の透明化

SPC T T

スペルチェック

aspellのインストールと設定

homebrewで aspell をインストール。

$ brew install aspell

デフォルトの言語を設定。

$ echo "lang en_US" > ~/.aspell.conf

レイヤーの追加とコンフィグレーション

スペルチェック用レイヤーを導入。

$HOME/.spacemacs.d/init.eldotspacemacs/layers関数内dotspacemacs-configuration-layersリストに以下を追加。

(spell-checking :variables spell-checking-enable-by-default nil)

デフォルト状態は無効ににしておき必要に応じてスペルチェックを実行する。

$HOME/.spacemacs.d/init.eldotspacemacs/user-configに以下設定を追加し、スペルチェックに aspell を利用する。

(setq ispell-program-name "aspell")

以上でスペルチェックが利用可能。

キーバインド

スペルチェックを有効 / 無効にする
SPC t S
バッファに対してスペルチェックを実施
SPC S b
スペルミスの修正
SPC S c
次のスペルミスへジャンプ
SPC S n