> [!code]- Markdown原文 (こちらをVimに貼り付けて進めましょう) > ~~~ > まとまりを表すモノのことを[[テキストオブジェクト]]といいます。 > > [[オペレータ]]の範囲に幅を持たせる用途[^1]で使います。[[モーション]]のように単独では使えません。 > > ## [[テキストオブジェクト]]の例 > > `di"`と押してみましょう。`d`は削除の[[オペレータ]]です。 > > ```txt > ▼ > I play tennis with "Ichiro" every day! > ``` > > `i"`は`ダブルクォーテーションの内側(inner ")`というまとまりを指す[[テキストオブジェクト]]です。つまり、この操作をするとダブルクォーテーションの中身が削除されます。 > > ## aとi > > [[テキストオブジェクト]]はほとんどの場合[^2]、`a`か`i`から始まります。 > > - `i`は内側 (`inner`という意味) > - `a`は外側を含む (`a`という意味) > > 私は`inside`と`around`の方がしっくり来たのでそう覚えています。各自しっくり来る覚え方で覚えるといいでしょう。 > > `da"`と押して、`di"`との挙動が違うことを確認しましょう。 > > ```txt > ▼ > I play tennis with "Ichiro" every day! > ``` > > ## オススメの[[テキストオブジェクト]] > > よく使う[[テキストオブジェクト]]を表にまとめました。厳密には`a`と`i`が付きますが、冗長なのでカットしています。 > > | テキストオブジェクト | 意味 | 備考 | > | -------------------- | ------------------------ | -------------------------------- | > | `w` | 単語 | wordの略 | > | `W` | 空白で区切られたブロック | wordの略 | > | `p` | 段落 | paragraphの略 | > | `"` | `""`の範囲 | 現在行の次に出現する範囲が対象 | > | `'` | `''`の範囲 | 現在行の次に出現する範囲が対象 | > | `)` | `()`の範囲 | 現在位置が`()`内であることが必要 | > | `]` | `[]`の範囲 | 現在位置が`()`内であることが必要 | > | `}` | `{}`の範囲 | 現在位置が`{}`内であることが必要 | > > > ## よく使う[[オペレータ]]+[[テキストオブジェクト]] > > [[オペレータ]]と[[テキストオブジェクト]]を組み合わせた実践的な操作を練習してみましょう。 > > ### Change inner word ---> `ciw` > > 単語を変更するため、`ciw`と入力してからそのまま好きな単語を書いてみましょう。 > > ```txt > ▼ > I like Vim the most in the world. > ``` > > ### Change inner "..." ---> `ci"` > > ダブルクォーテーションの中身を変更するため、`ci"`と入力してからそのまま好きな単語を書いてみましょう。 > > ```txt > ▼ > I like "Vim" the most in the world. > ``` > > ### Delete a "..." ---> `da"` > > ダブルクォーテーションで囲まれた単語をダブルクォーテーションごと消すために、`da"`と入力してみましょう。 > > ```txt > ▼ > I like "Vim" the most in the world. > ``` > > `c`は`i`と、`d`は`a`と連携することが多いです。 > > ### Delete a paragraph ---> `dap` > > main関数を削除するため、`dap`と入力してみましょう。 > > ```python: > #!/bin/env python > > def main(): > ▼ > print("hogehoge") > pass > > main() > ``` > > ### Yank a {...} ---> `ya}` > > `{}`で囲まれた部分を`{}`を含めて[[ヤンク]]するため、`ya}`と入力してみましょう。 > > ```json > { > "id": 1, > "name": "Ichiro", > "favorite": { > "food": ["apple", "orange"], > ▼ > "animal": ["dog", "cat"], > } > } > ``` > > 好きなところに移動して`p`を押すと貼り付けもできます。 > ~~~ まとまりを表すモノのことを[[テキストオブジェクト]]といいます。 [[オペレータ]]の範囲に幅を持たせる用途[^1]で使います。[[モーション]]のように単独では使えません。 [^1]: [[オペレータ]]のためだけに存在するわけではありません ## [[テキストオブジェクト]]の例 `di"`と押してみましょう。`d`は削除の[[オペレータ]]です。 ```txt ▼ I play tennis with "Ichiro" every day! ``` `i"`は`ダブルクォーテーションの内側(inner ")`というまとまりを指す[[テキストオブジェクト]]です。つまり、この操作をするとダブルクォーテーションの中身が削除されます。 ## aとi [[テキストオブジェクト]]はほとんどの場合[^2]、`a`か`i`から始まります。 [^2]: https://vim-jp.org/vimdoc-ja/motion.html#text-objects の記載には全てついています - `i`は内側 (`inner`という意味) - `a`は外側を含む (`a`という意味) 私は`inside`と`around`の方がしっくり来たのでそう覚えています。各自しっくり来る覚え方で覚えるといいでしょう。 `da"`と押して、`di"`との挙動が違うことを確認しましょう。 ```txt ▼ I play tennis with "Ichiro" every day! ``` ## オススメの[[テキストオブジェクト]] よく使う[[テキストオブジェクト]]を表にまとめました。厳密には`a`と`i`が付きますが、冗長なのでカットしています。 | テキストオブジェクト | 意味 | 備考 | | -------------------- | ------------------------ | -------------------------------- | | `w` | 単語 | wordの略 | | `W` | 空白で区切られたブロック | wordの略 | | `p` | 段落 | paragraphの略 | | `"` | `""`の範囲 | 現在行の次に出現する範囲が対象 | | `'` | `''`の範囲 | 現在行の次に出現する範囲が対象 | | `)` | `()`の範囲 | 現在位置が`()`内であることが必要 | | `]` | `[]`の範囲 | 現在位置が`()`内であることが必要 | | `}` | `{}`の範囲 | 現在位置が`{}`内であることが必要 | ## よく使う[[オペレータ]]+[[テキストオブジェクト]] [[オペレータ]]と[[テキストオブジェクト]]を組み合わせた実践的な操作を練習してみましょう。 ### Change inner word ---> `ciw` 単語を変更するため、`ciw`と入力してからそのまま好きな単語を書いてみましょう。 ```txt ▼ I like Vim the most in the world. ``` ### Change inner "..." ---> `ci"` ダブルクォーテーションの中身を変更するため、`ci"`と入力してからそのまま好きな単語を書いてみましょう。 ```txt ▼ I like "Vim" the most in the world. ``` ### Delete a "..." ---> `da"` ダブルクォーテーションで囲まれた単語をダブルクォーテーションごと消すために、`da"`と入力してみましょう。 ```txt ▼ I like "Vim" the most in the world. ``` `c`は`i`と、`d`は`a`と連携することが多いです。 ### Delete a paragraph ---> `dap` main関数を削除するため、`dap`と入力してみましょう。 ```python: #!/bin/env python def main(): ▼ print("hogehoge") pass main() ``` ### Yank a {...} ---> `ya}` `{}`で囲まれた部分を`{}`を含めて[[ヤンク]]するため、`ya}`と入力してみましょう。 ```json { "id": 1, "name": "Ichiro", "favorite": { "food": ["apple", "orange"], ▼ "animal": ["dog", "cat"], } } ``` 好きなところに移動して`p`を押すと貼り付けもできます。