Spacemacsを使い始めた話 #emacs #spacemacs
Spacemacsってなに?
- Emacsの拡張(魔改造?)
- 全体的に人間に優しくなった(キーボードショートカットのサジェストとか出たりする)
- 設定管理をいいかんじにしてくれる(layerシステム)
- キーバインドがVim(Evil)かEmacsか選べる
- 私はEmacsバインドで使ってます
おすすめする理由
- 素のEmacsよりはいろいろ親切(上記)
- とりあえず各種プログラミング言語のIDEとか覚えなくても開発し始められて便利
- (Spacemacsに限った話ではないけど)ターミナルまでEmacs上で操作できるようになってくると、マウス触ることがほぼなくなるくらいにはキーボードだけで操作できる時間が増えてうれしいです
- マウス捨てたい
- トラックボール掃除するのめんどい
- Vim派のひとと宗教戦争(笑)でネタにできて楽しいです(冗談です)
導入方法
めんどうなのでググってください
使っててオススメの拡張
利用中のバージョンはSpacemacs 0.200.7、Emacs 24.5.1、Ubuntu 16.04.2 LTS(デスクトップ)です。
もろもろ検索 ivy
Spacemacsのデフォルトではhelmが推奨ですが、ivy(swiper)もいい感じに動いてくれます。 migemoはローマ字入力でいいかんじに日本語を検索してくれるやつです。 ivyでmigemoを使うのにググってもよくわからなかったのですが、avy-migemo-e.g.swiperでいいみたいです。 cmigemoは別途インストールしてください。 クリップボード履歴の検索はcounselってやつみたいです。
設定
- dotspacemacs-configuration-layersに
ivy
- helm関連のデフォルト設定は全部コメントアウト
- dotspacemacs-additional-packagesに
avy-migemo
- dotspacemacs/user-configで以下
;; migemo (require 'migemo) (setq migemo-command "cmigemo") (setq migemo-options '("-q" "--emacs" "-i" "\a")) (cond ((eq system-type 'darwin) (setq migemo-dictionary "/usr/local/share/migemo/utf-8/migemo-dict") ) ((eq system-type 'gnu/linux) (setq migemo-dictionary "/usr/share/cmigemo/utf-8/migemo-dict") ) ((eq system-type 'windows-nt) (setq migemo-dictionary "c:/app/cmigemo-default-win64/dict/utf-8/migemo-dict") )) (setq migemo-user-dictionary nil) (setq migemo-regex-dictionary nil) (setq migemo-coding-system 'utf-8-unix) ;; initialize migemo (migemo-init) ;; avy-migemo (require 'avy-migemo) (avy-migemo-mode 1) (require 'avy-migemo-e.g.swiper) ;; M-yでkill-ring履歴から検索 (global-set-key (kbd "M-y") 'counsel-yank-pop)
シェル multi-term
Emacs上でシェルを動かす場合はいくつか選択肢があるのですが、なんかよさそうだったのでmulti-termにしてみました。 シェル上でのコピペがつらいなーという感じだったのですが、コピーしたいときはモード切り替えするのが無難みたいです。 Windows上でシェルを動かすのは諦めたので、もっぱらUbuntuでしか使ってないです。
設定
- dotspacemacs-configuration-layersに
shell
- dotspacemacs/user-configで以下。キーバインドはお好みで。
;; multi-term ;; emacs に認識させたいキーがある場合は、term-unbind-key-list に追加する (require 'multi-term) (dolist (x '("C-q")) (add-to-list 'term-unbind-key-list x)) ;; terminal に直接通したいキーがある場合は、term-unbind-key-listからdeleteする ;(dolist (x '("C-c")) ; (delete x term-unbind-key-list)) ;; term-mode-hook (add-hook 'term-mode-hook '(lambda () (define-key term-raw-map "\C-h" 'term-send-backspace) (define-key term-raw-map "\C-y" 'term-paste) (define-key term-raw-map term-view-toggle-key 'toggle-term-view))) ;; C-q c で multi-term を起動する (define-key ctl-q-map (kbd "c") 'multi-term); 事前に (defvar ctl-q-map (make-keymap)) (define-key global-map (kbd "C-q") ctl-q-map) とかしてるのが前提なので普通は global-set-keyとかでいけるはずなので適当にしてください ;; C-t で term-mode と fundamental-mode + view-modeを切り替える (setq term-view-toggle-key (kbd "C-t")) (defun toggle-term-view () (interactive) (cond ((eq major-mode 'term-mode) (fundamental-mode) (view-mode) (local-set-key term-view-toggle-key 'toggle-term-view) (setq multi-term-cursor-point (point))) ((eq major-mode 'fundamental-mode) (View-exit) (goto-char multi-term-cursor-point) (multi-term-internal))))
ファイルツリーをEmacs上で見る neotree
spacemacsのデフォルトで使えます。
M-x neotree
とかやると起動します。面倒ならglobal-set-keyしてください。
M-x neotree-dir
またはneotreeのバッファ上でC-c c
とやるとツリー表示のルートディレクトリを移動できます。
neotreeのバッファに移動してからのswiperでのバッファ内検索が本当に捗るのでおすすめです。そうでもないか。
その他雑感
あとは各言語のlayerいれたりキーバインドをいじったりしてるくらいです。 オレオレレイヤーは作らずに、dotspacemacs/user-configを秘伝のタレ置き場として雑につかっても、とりあえずなんとかなってます。
ところでキーバインドでC-hをバックスペースにしたい派なんですが、その場合spacemacsキー(EvilのひとはSPC, Emacsバインドの人はM-m)を押したときのヘルプのページングとバインドが被ります。いろいろ試したんですが、とりあえず下記にしたらうまくいきました。理由はよくわかりません。とりあえずC-hかF1押しておけばいいかんじに解釈してくれます。
(global-set-key (kbd "C-h") 'delete-backward-char) (global-set-key (kbd "<F1>") help-map)
あとWindows10でNTEmacs使ってる場合、M-mを押すとウィンドウが最小化されて「ウオアアアアア!!!」ってなるんですが未解決です。たすけてください。
とりあえずこんなところで。