• 加筆
  • 2018.10.01
  • 修正
十一月
27
月曜日
2017

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

Spacemacsのドキュメントには brew linkapps emacs-plus の記述が残っているが、最近のbrewではlinkappsサブコマンドが削除されているので 以下のように手動でシンボリックリンクを作成しLaunchpad上から起動できるようにしておく。

ln -sf /usr/local/opt/emacs-plus/Emacs.app /Applications

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を起動すると初期設定のための以下の質問が表示されるのでカーソルキーの上下で選択肢を選びENTERで確定する。

編集スタイルとしてvimまたはemacsのいずれかを選択。今回は vim を選択。

What is your preferred editing style?
-> Among the stars aboard the Evil flagship (vim)

Spacemacsのディストリビューションを選択。推奨の spacemacs を選択。

What distribution of spacemacs would you like to start with?
-> The standard distribution, recommended (spacemacs)

入力補完フレームワークを選択。 今回は helm を選択。

以上でSpacemacsが必要するelispパッケージのダウンロードとインストールが開始される。

コンフィグレーション

ドットファイル

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

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

またSpacemacsからは SPC f e d でドットファイルを開くことができる。
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 'セパレータ名)

今回はデフォルトの wave セパレータを使用した。

(defun dotspacemacs/user-config ()
  ・・・
  ;; powerlineセパレータ
  (setq powerline-default-separator 'wave))

Powerlineの色不具合の回避

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

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

のいずれか解消できる。今回はApple RGBを使用するオプションを利用した。

(defun dotspacemacs/user-config ()
  ・・・
  ;; powerlineセパレータにApple RGBを使用する
  (setq powerline-image-apple-rgb t))

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

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

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-initに以下設定を追加

(setq-default evil-search-module 'evil-search)

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

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

以上でノーマル、インサート、コマンドモードのいずれでもM-¥\が入力できるようになる。
前述の二つの方法に比べデメリットは無さそうなので今回はこれで対応することにした。

ファイル操作

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

ファイルブックマーク
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