戻る

surround.vim解説

Nov 10, 2020

""や'', [], そして<p></p>といったタグのように囲っているものを別のものに置き換えたい場面は想像以上に多い. もちろん, もとから囲っているものはないが追加したい場合も多い. そもそもこのプラグインはとても人気なので, そのことからも有用性の高さを解するのは易い.

https://github.com/tpope/vim-surround がsurround.vimのgithubのページで簡単な説明があるが, ここでも基本から説明する. 導入は特に難しい所もないので各自で行うこと.

囲いを変更, 除去する

次のように""で囲っている場合, まずvimのカーソルを""内に持ってきてそこでcs"'と入力することで次のように''に変更できる. csはchange surroundings ... to ...という意味で解釈すると覚えやすい.


"Hello world!" 
結果:
'Hello world!'

さらにタグで囲むこともできる. cs't<q>


<q>Hello world!</q>

タグから""にするには, cst"とする.


"Hello world!" 

""を除去するには, ds"とする. delete surroundings という意味.


Hello world! 

囲いを追加する

囲いを変える, もしくは囲いを除去するのは比較的簡単だった. しかし囲いを追加するにはどこを基準に囲いたいのかも指定する必要がある. 例えば, Helloだけを囲いたい場合は, ysiw]とする. ysはyou surroundと解釈する. iwはテキストオブジェクト.


[Hello] world! 

さて, さっきは[ではなく]を使っていた. [を使うと, [ Hello ]のようにスペースも挿入してくれる. どっちがどっちかという覚え方は, vimではcontrol + [ をesc代わりに使う人が多いと思う. escはなんとなく空白のイメージがするので[は空白だ, と覚えれば一発.

実際に次のものをcs]{で変えてみよう.


[Hello] world! 
結果:
{ Hello } world! 

行全体を囲むには, yssbもしくはyss)とする.


{ Hello } world! 
結果:
({ Hello } world!) 

タグで囲んでみよう. ysiw<em>


<em>Hello</em> world! 

単語や行に対しての囲い込みは成功した. 今度は選択部分に対して囲い込みをする. Vで囲んでS<p class="important"> としてみよう.


<em>Hello</em> world! 
結果:
<p class="important">
  <em>Hello</em> world! 
</p>


.で繰り返しができるようにするためには, repeat.vimを導入すれば良い.