Vim のブログ

テキストエディター Vim の魅力、使い方のコツを初心者にも分かりやすく伝えていきたいと思います。

Vim のプラグイン紹介 〜 surround.vim でカッコつける 〜

surround.vim は、[], (), {} といった括弧や、'' や "" などの引用符、HTMLタグなど、「テキストを囲うもの」を編集するプラグインです。
「囲われているテキスト」には変更を加えず、「テキストを囲うもの」だけを追加、削除、変更することが出来ます。
Vim 本体にはプラグインを入れなくても「囲われているテキスト」だけ、もしくは「囲われているテキスト」と「テキストを囲うもの」の両方を編集する「テキストオブジェクト」という機能もあります。)

インストール方法

NeoBundleを使うと下の一行で簡単にインストールできます。

NeoBundle 'tpope/vim-surround'

選択中のテキストを括弧 / 引用符 / HTMLタグで囲う

個人的には surround.vim で一番よく使う機能です。例えば、ビジュアルモード

This is a selected text.

という選択状態の時に S (小文字ではなくて大文字であることに注意!)と「テキストを囲うもの」を入力することで、選択されたテキストを囲うことが出来ます。

元のテキストコマンド結果
This is a selected text. S' This is 'a selected text'.
This is a selected text. S" This is "a selected text".
This is a selected text. S[ This is [ a selected text ].
This is a selected text. S( This is ( a selected text ).
This is a selected text. S{ This is { a selected text }.
This is a selected text. S<b> This is <b>a selected text</b>.

「テキストを囲うもの」だけを削除もしくは変更する

例えば、ノーマルモードで

This is 'a surrounded text'.

というように、引用符で囲まれた区間にカーソルがあるとします。この前後の引用符のみを編集対象にするためのコマンドは s' (今回は大文字ではなくて小文字)となります。
d (削除)、 もしくは c (変更) コマンドに続いてこの s' を入力することで、引用符のみを削除、変更することが出来ます。
c (変更) コマンドの場合は、その後に変更後の「テキストを囲うもの」を指定してください。

元のテキストコマンド結果
This is 'a surrounded text'. ds' This is a surrounded text.
This is (a surrounded text). ds( This is a surrounded text.
This is <b>a surrounded text</b>. dst This is a surrounded text.
This is 'a surrounded text'. cs'" This is "a surrounded text".
This is 'a surrounded text'. cs'( This is ( a surrounded text ).
This is 'a surrounded text'. cs'<b> This is <b>a surrounded text</b>.

「囲われるテキスト」の選択と「テキストを囲う」操作を同時に行う

ビジュアルモードを経由せず、ノーマルモードから直接「テキストを囲う」ことも出来ます。
ys のあとに「囲われるテキスト」と「テキストを囲うもの」を続けて指定します。
はもともと、コピー(Yank)のコマンドなので ys というのは最初は違和感があって覚えにくいと思います。

「囲われるテキスト」はテキストオブジェクトを用いて指定します。

元のテキストコマンド結果
This is 'a surrounded text'. ysaw( This is 'a ( surrounded ) text'.
This is 'a surrounded text'. ysi'( This is '( a surrounded text )'.
This is 'a surrounded text'. ysa'( This is( 'a surrounded text' ).

このコマンドが surround.vim で一番難易度が高いです。最初に紹介したビジュアルモードを使う方法で代替できるので、覚えるのは後回しでもよいと思います。