← Vim研究所

Vimのcwとciwの違い 単語の途中にカーソルがあるときに差が出る

2019-11-29 公開 ・ 更新: 2026-08-05

cwで単語を書き換えたつもりが、単語の後半だけ残ってしまったことがあります。単語の頭で試したときはうまくいったのに、途中のカーソル位置だと結果が変わります。ciwとの違いを理解していないと、この不一致にいつまでも振り回されることになります。

目次(4項目)
キーこれだけ覚える
cwカーソル位置から単語末尾までを変更(前半は残る)
ciwカーソル位置に関係なく単語全体を変更
wモーション:次の単語の先頭までの相対範囲
iwテキストオブジェクト:単語そのものの絶対範囲

どちらも「変更」+「単語」だが範囲指定が違う

cwは変更のオペレータcとモーションwの組み合わせ、ciwは同じcとテキストオブジェクトiwの組み合わせです。両方とも「単語を変更する」という見た目ですが、対象範囲の決め方が異なります。

対象範囲
w(モーション)カーソル位置から次の単語の頭まで
iw(テキストオブジェクト)カーソルがどこにあっても、その単語全体

単語の先頭にカーソルがあるときは、この2つはたまたま同じ範囲になるので違いに気づきにくくなります。差が出るのは単語の途中にカーソルがあるときです。cwはそこから後ろだけを対象にするため、単語の前半が変更されずに残ります。ciwはカーソル位置に関わらず単語全体を対象にするので、常に単語まるごとを書き換えられます。

具体例で見る違い

test sentenceで、sentenceの3文字目(n、単語の途中)にカーソルを置いて実行すると差がはっきり分かります。

BEFORE
test sentence
       ^ カーソル
cwNEW<Esc>
AFTER
test seNEW
BEFORE
test sentence
       ^ カーソル
ciwNEW<Esc>
AFTER
test NEW

同じカーソル位置から始めても、cwはそこから後ろのntenceだけを対象にするのに対し、ciwはカーソル位置に関係なくsentence全体を対象にします。

実務ではciwを使う場面のほうが多い

カーソルを単語の先頭に正確に合わせてからcwを打つより、単語のどこにカーソルがあってもciwを打てば済むほうが速く済みます。移動の精度を気にしなくていい分、ciwのほうが実用上のミスが少なくなります。単語の一部だけを変更したい、という明確な意図があるとき以外はciwを選んでおけば安全です。

要点:単語全体を書き換えたいならciw、カーソル位置から後ろだけを書き換えたいならcwです。迷ったらciwを選んでおけば、カーソル位置のズレによる事故を防げます。
使ってみて

cwだけ覚えていた時期は、単語の途中にカーソルがあるたびに変更範囲がズレて、結局uで取り消してカーソルを単語頭に移動し直すという二度手間をやっていました。ciwを覚えてからはカーソル移動の精度を気にしなくてよくなり、単純に手数が減りました。今ではcwをあえて使う場面のほうが少なく、単語頭だと分かっている場合でもciwを打つ癖がついています。

まとめ

cwciwの違いは、モーション(相対的な範囲指定)とテキストオブジェクト(絶対的な範囲指定)の違いそのものです。この考え方はdwdiwywyiwなど他のオペレータでもそのまま成り立つので、1組覚えれば残りにも応用できます。似た系統の違いとして、cwdwの間にも見た目以上に独自の癖があります。詳しくはcwとdwの違いのほうで扱っています。

← Vim研究所 トップへ戻る