Lambdaカクテル

京都在住Webエンジニアの日記です

emacsにevil-surround-mode導入した

EmadsのEvilで使えるプラグイン,evil-surround-modeを入れた。

github.com

このプラグインは,なにかをカッコなどで括る操作のショートカットを提供する。

ちなみにこれはsurround.vimをEvilにポートしたもの。なので実質surround.vimの解説になっているが…………

github.com

基本操作 (normal mode)

例では][はカーソル,>に続く行が入力

ys<word object><char> -- 文字列を囲う

word objectをcharでくくる。

foo ][bar piyo
> ysw"
foo "bar" piyo

文字列をダブコでくくれた。この場合はysiw"でもよいし,その方が単語中のどこでも使えるので便利そう。

foo ][bar piyo
> ysw(
foo ( bar ) piyo

カッコでくくると自動的にスペースが入れられるようだ。個人的にはうれしくない。

ちなみに閉じカッコを使うとスペースを入れない。

foo ][bar piyo
> ysw)
foo (bar) piyo

大変便利。ちなみに{}も同じような挙動。

foo ][bar piyo
> ysiw<a>
foo <a>bar</a> piyo

くくる文字として<を入力するとXMLタグとして入力できるようになる。

ちなみに.で再度くくることができる。この操作は他のほとんどのコマンドでも同様。

foo ][bar piyo
> ysiw)
foo ][(bar) piyo
> l.
foo (][(bar)) piyo

word objectならだいたいなんでも良いのでfを使ったりできる。

foo ][bar piyo
> ysfi)
foo ][(bar pi)yo

cs<char1><char2> -- 囲っている文字を書き換える

既にくくられているchar1をchar2に書き換える。

foo (][bar) piyo
> cs(*
foo *bar* piyo

ys同様にタグも書ける。

foo (][bar) piyo
> cs(<a>
foo <a>bar</a> piyo

ds<char> -- 囲っている文字を削除する

既に囲っている文字を削除できる。

foo (][bar) piyo
> ds(
foo bar piyo

ちなみに開きカッコと閉じカッコとでは,別の挙動をする。

foo ][bar piyo
> ysiw(
foo ][( bar ) piyo
> ds(
foo ][bar piyo // スペースも含めて削る。ちょうどysiw(の逆操作になる
> u
foo ][( bar ) piyo
> ds)
foo  bar  piyo // ysiw)の逆操作なので,スペースは削られない

タグを削るときはdstを使う。

foo ][ bar piyo
> ysiw<a>
foo ][<a>bar</a> piyo
>fbdst
foo bar piyo

yss<char> -- 行全体をくくる

sを重ねることで行全体を表現しているらしい。

foo ][bar piyo
> yss)
][(foo bar piyo)

基本操作 (visual mode)

ビジュアルモードだとあまりキーバインドで悩むことがない。

ここでは[]を選択している記号とする。

S<char> -- 選択している文字列を囲む

foo [bar] piyo
> S"
foo "bar" piyo

Vでvisual line modeになっているときは行の上下を囲むような挙動になる。

foo ][bar piyo
> V
[foo bar piyo]
> S!
!
foo bar piyo
!

Sf -- 関数の形式で囲む

見たほうがわかりやすいので例です。

][$foo
> ve
[$foo]
> Sfscalar
scalar($foo)

ちなみにマニュアルになかったがnormal modeではysiwfscalarのようにys<word object>fとすると使えた。

エイリアス

カッコでくくるときに指定する文字として,b B r aはそれぞれ)}]>のエイリアスになっている。記号は指が遠いのでまあ覚えておくと便利かもしれない。

改行させる

ysの代わりにySを,ビジュアルモードではSの代わりにgSを使うと,囲って改行される。

foo bar piyo
> ySiw{
foo {
bar
}piyo

感想

ysが微妙に覚えづらい。使いまくるしかない。Sは覚えやすい。

貴様!この記事の筆者をフォローしてください!(しなさい)