はじめに
この記事はspacemacsのlispステートについて(割と自分向けに)書いた記事です。
lispを日常的に書くのにlisp-stateに慣れなければ、ということで調べました。(あと元vimmerにはpareditのキーバインドが厳しい)
キーバインド
トグル
| キー |
動作 |
| . |
lisp-stateとnormal-stateをトグルする |
normal-stateでSPC-k-[]でlisp-stateに入ることができます。
繰り返し
例えば10 sであれば10回後方のS式をslurpします。
移動
| キー |
動作 |
| h |
前方のシンボルに移動 |
| l |
後方のシンボルに移動 |
| k |
前の"("に移動 |
| j |
後ろの")"に移動 |
| 0 |
カーソル位置のS式の"("に移動(外側に移動しない) |
| $ |
カーソル位置のS式の")"に移動(外側に移動しない) |
| % |
0と$を繰り返す |
slurp/barf
| キー |
動作 |
from |
to |
| s |
飲み込む |
カーソルのあるS式の外側1つ後ろ |
カーソルのあるS式の最後尾 |
| S |
飲み込む |
カーソルのあるS式の外側1つ前 |
カーソルのあるS式の先頭 |
| b |
吐き出す |
カーソルのあるS式の外側1つ後ろ |
カーソルのあるS式の最後尾 |
| B |
吐き出す |
カーソルのあるS式の外側1つ前 |
カーソルのあるS式の先頭 |
| a |
飲み込む |
カーソルのあるS式の外側1つ前 |
カーソル前方 |
lispを書くときに必要な2つ道具です。
slurpは飲み込み、barfは吐き出しと言われます。
前方後方のシンボルやカッコをカーソルのあるカッコに飲み込み/吐き出しします。
queueやstackのpushやpopというとわかるかもしれません。
動かしてみるのが一番わかりやすいと思います(雑)。
insert-state
| キー |
動作 |
| i |
カーソル位置でinsert-stateに移行 |
| I |
カーソルのあるS式前方でinsert-stateに移行 |
| ( |
カーソルのあるS式の前に()を挿入後insert-stateに移行 |
| ) |
カーソルのあるS式の後に()を挿入後insert-stateに移行 |
なおinsert-stateを抜けると必ずnormal-stateになります。
visual-state
| キー |
動作 |
| v |
カーソル位置でvisual-stateに移行 |
| V |
カーソル位置でvisual-line-stateに移行 |
| C-v |
カーソル位置でvisual-block-stateに移行 |
囲う
| キー |
動作 |
| w |
カーソルのS式(そうでない場合は1つ前)を()で囲う |
| W |
カーソルのS式(そうでない場合は1つ前)の()を外す |
yank/paste
| キー |
動作 |
| y |
カーソル位置にある文字をyank |
| p |
カーソル位置にpaste |
| P |
カーソル位置の後方にpaste |
pasteはシンボルを感知しません。
つまりカーソル位置がシンボルにあった場合カーソル位置に挿入されシンボルはカーソル位置から真っ二つにされます。
delete
| キー |
動作 |
| ds |
後方にあるシンボルを消去する |
| Ds |
前方にあるシンボルを消去する |
| dw |
カーソル位置からシンボルの終端までを消去する |
| Dw |
カーソル位置からシンボルの前方までを消去する |
| dx |
カーソル位置の式を消去する |
| Dx |
カーソル前方の式を消去する |
| deleteは消すだけでyankはされません。 |
|
その他
| キー |
動作 |
| t |
カーソル位置と前方のカッコやシンボルを入れ替える |
| : |
コマンドの入力 |
| c |
? |
convoluteは説明を読んでも理解ができませんでした...
終わりに
使って理解するしかないと思います。意識せずかけるようになりたいですね...
各stateについてできることが色々あるので便利に使っていきたいです。
参考:
https://github.com/syl20bnr/evil-lisp-state