> [!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`を押すと貼り付けもできます。