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 のあとに「囲われるテキスト」と「テキストを囲うもの」を続けて指定します。
y はもともと、コピー(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 で一番難易度が高いです。最初に紹介したビジュアルモードを使う方法で代替できるので、覚えるのは後回しでもよいと思います。