はじめに
この記事は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