はじめに
つい最近、Vimを始めたので一番気に入ってるテキストオブジェクトについてまとめようと思います。初心者Vimmerなので、完全な説明ができていない場合もありますがよろしくお願いします。
基本
Vimのテキストオブジェクト操作は、以下の3要素の組み合わせで構成されます。
{操作コマンド} + {範囲指定} + {対象オブジェクト}
1. 操作コマンドの例
-
c(change): 変更 -
d(delete): 削除 -
y(yank): コピー -
v(visual): ビジュアルモードで選択 -
gU: 大文字変換 -
gu: 小文字変換 -
g~: 大文字小文字を切り替え
2. 範囲指定
-
i(inner): オブジェクトの内部のみ -
a(around): オブジェクト全体(区切り文字を含む)
3. 対象オブジェクト
以下で説明
対象オブジェクトの種類
単語系
| オブジェクト | 説明 | 例 |
|---|---|---|
w |
単語(word) |
diw: カーソル位置の単語を削除 |
W |
空白区切りの単語 |
daW: 空白を含めて削除 |
括弧系
| オブジェクト | 別名 | 対象 | 使用例 |
|---|---|---|---|
( または )
|
b |
小括弧 |
yib: 括弧内をコピー |
{ または }
|
B |
中括弧 |
diB: 中括弧内を削除 |
[ または ]
|
なし | 角括弧 |
ya[: 角括弧ごとコピー |
< または >
|
なし | アングルブラケット |
di<: アングルブラケット内を削除 |
引用符系
| オブジェクト | 対象 | 使用例 |
|---|---|---|
" |
ダブルクォート |
di": 引用符内を削除 |
' |
シングルクォート |
ci': 引用符内を変更 |
` |
バッククォート |
yi`: バッククォート内をコピー |
その他
| オブジェクト | 対象 | 使用例 |
|---|---|---|
p |
段落(paragraph) |
dap: 段落全体を削除 |
t |
タグ(HTML/XML) |
dit: タグ内を削除 |
s |
文(sentence) |
das: 文全体を削除 |
テキストオブジェクトを使った操作例
関数の引数を操作する
↓ カーソル位置
function sum(number a, number b) {
return a + b;
}
カーソルが括弧内にある状態で:
-
yib: 「number a, number b」をコピー(括弧は含まない) -
yab: 「(number a, number b)」をコピー(括弧を含む) -
dib: 括弧内の引数をすべて削除(括弧は含まない) -
cib: 括弧内の引数を削除して挿入モードへ(括弧は含まない)
文字列を操作する
↓ カーソル位置
const message = "Hello, World!";
カーソルが文字列内にある状態で:
-
yi": 「Hello, World!」をコピー(引用符は含まない) -
ya": 「"Hello, World!"」をコピー(引用符を含む) -
ci": 文字列内容を変更
HTMLタグ内を操作する
<div class="container">
↓ カーソル位置
<p>This is a paragraph.</p>
</div>
<p>タグ内にカーソルがある状態で:
-
dit: 「This is a paragraph.」を削除 -
dat: 「<p>This is a paragraph.</p>」全体を削除
ビジュアルモードでの選択
ビジュアルモードを使用するにはvキーを押すことでできます。テキストを選択できるようになり、h, j, k, lで選択しながら移動ができます。
ビジュアルモードの基本
テキストオブジェクトと組み合わせることで、操作前に選択範囲を確認できます。
↓ カーソル位置
const userName = "John Doe";
カーソルが文字列内にある状態で:
-
vi": 文字列内をビジュアル選択(引用符は含まない) -
va": 文字列全体をビジュアル選択(引用符を含む) -
vit: HTMLタグ内をビジュアル選択 -
vat: HTMLタグ全体をビジュアル選択
ビジュアル選択後の操作
ビジュアル選択した後は、以下の操作が可能です:
-
d: 選択範囲を削除 -
y: 選択範囲をコピー -
c: 選択範囲を変更 -
U: 選択範囲を大文字に変換 -
u: 選択範囲を小文字に変換 -
~: 選択範囲の大文字小文字を切り替え
大文字・小文字変換
Vimでは、テキストオブジェクトと組み合わせて大文字・小文字の変換を簡単に行えます。
変換コマンドの種類
| コマンド | 機能 | 使用例 |
|---|---|---|
gU |
大文字に変換 |
gUiw: 単語を大文字に |
gu |
小文字に変換 |
guiw: 単語を小文字に |
g~ |
大文字小文字を切り替え |
g~iw: 単語の大文字小文字を切り替え |
実用例
単語の変換
↓ カーソル位置
const userName = "John";
-
gUiw: 「John」→「JOHN」に変換 -
guiw: 「John」→「john」に変換 -
g~iw: 「john」→「jOHN」に変換
行全体の変換
テキストオブジェクトを使わない場合の行全体の変換コマンド:
-
gUU: 現在行全体を大文字に変換 -
guu: 現在行全体を小文字に変換 -
g~~: 現在行全体の大文字小文字を切り替え
↓ カーソル位置(行のどこでも可)
const greeting = "Hello, World!";
-
gUU: 「const greeting = "Hello, World!";」→「CONST GREETING = "HELLO, WORLD!";」 -
guu: すべて小文字に変換 -
g~~: 大文字小文字を切り替え
まとめ
- 操作コマンド(削除、変更、コピー、選択、変換)
- 範囲指定(内部のみ、全体)
- 対象オブジェクト(単語、括弧、引用符、タグなど)
JISOUのメンバー募集中!
プログラミングコーチングJISOUでは、新たなメンバーを募集しています。
日本一のアウトプットコミュニティでキャリアアップしませんか?
興味のある方は、ぜひホームページをのぞいてみてください!
▼▼▼
https://projisou.jp