Vim操作方法

[Vim問題] sとS、cとCの違いは?

cとC、sとS
記事内に広告が含まれています。
スポンサードリンク

この記事では、Vim / neovim の操作のうち、一見同じに見えて実は異なる操作についてご紹介します。

スポンサードリンク

[解答] 変更する対象範囲が異なる

c と s 自体は似て非なるコマンドである点から押さえる必要があります。

c と s の違い

ヘルプを見ても、なかなか違いがわかりにくいと思いますが、次のように実際に動作を見ると違いが分かります。

cとsでIをYouに書き換え
cとsでIをYouに書き換え

s = cl ということになります。つまり、s はいきなり置換を始めてしまう一方、c は次の操作/モーションを待ちます。

この動作によって、一文字消していきなり挿入モードを始めるか、モーションで対象範囲を指定/削除してから挿入モードを始めるかの違いが出るわけです。

Vimmer の中では、対象範囲の広さから c でまかなってしまっている人が多そうです。しかし、VimGolfをやったりするなら s も活用した方が良いでしょうね。

c は change(変更)、 s は substitute(代替) の略称です。単語で覚えておいた方がラクかも知れません。

s と S の違いは?

同じように削除して挿入モードに入るという動きは変わりませんが、その削除対象が異なります。

sとSの挙動
sとSの挙動

s は一文字ですが、Sは行末までが対象となります。

S = cc とも考えられます。Shiftキーが必要になるので、ストロークが減るかと言えば微妙なところですが。

c と C の違いは?

こちらも削除して挿入モードに入るという動きは変わりませんが、その削除対象が異なります。

cとCの挙動の違い
cとCの挙動の違い

こちらも削除する対象が異なります。c は一文字またはモーションで指定した範囲までですが、Cは行末までが対象となります。

C = c$ = Di とも考えられます。こちらもShiftキーが必要になるので、ストロークが減るかと言えば微妙なところですが。

C と S の違いは?

こちらも非常に微妙な違いになります。

CとSの挙動の違い
CとSの挙動の違い

上記のアニメーションの通り、インデントが維持されるかどうかに違いが出てきます。

それ以外にも違いがあるようですが、実用上であまり気になるほどではなさそうです。

このVimコマンドの補足情報

  • 利用頻度4.0
  • 便利さ5.0
  • 覚え易さ2.0

関連するVimヘルプ

Vim のヘルプでは下記のように解説されています。

[“x]c{motion}           {motion} のテキストを [レジスタ x に入れ] 削除し、挿入
                        を始める。‘cpoptions’ がフラグ ‘E’ を含むときは、削除
                        すべきテキストがないと (例えば、”cTx” でカーソルが ‘x’
                        の直後にあるとき)、エラーが発生し挿入モードは始まらな
                        い (これはVi互換である)。
                        ‘cpoptions’ がフラグ ‘E’ を含まないときは、コマンド
                        “c” は削除すべきテキストがなくても、必ず挿入モードを始める。

[“x]cc                  [count] 行を [レジスタ x に入れ] 削除し、挿入を始める
                        (行単位linewise)。‘autoindent’ がオンのとき、最初の
                        行のインデントを保持する。

[“x]C                   カーソル位置から行の終わりまでと、[count]-1 行を [レジ
                        スタ x に入れ] 削除し、挿入を始める。”c$” と同義である
                        (行単位でないlinewise)。

[“x]s                   [count] 文字を [レジスタ x に入れ] 削除し、挿入を始め
                        る (s は Substitute –置換 を意味する)。”cl” と同義で
                        ある (行単位でないlinewise)。

[“x]S                   [count] 行を [レジスタ x に入れ] 削除し、挿入を始める。
                        “cc” と同義である (行単位linewise)。

change – Vim日本語ドキュメント

こちらは、Vim上では下記のコマンドでヘルプを確認できます。

:help c
:help C
:help s
:help S
:help cc

ヘルプで検索するときは、通常は大文字小文字は識別されませんので、どちらでも構いません。

Vimmer 必見の参考書

今回のようなVimの挙動を知るには、こちらの書籍が参考になります。


Vim/neovim関連の書籍で、もっとも評判が良くてバイブルと呼んでる人もいる一冊です。Vim/neovimのバージョンに依存しない沢山のTips形式で、その表題通りに「思考のスピードで編集」できるようになるノウハウが詰まっています。その高い評価は Amazon のレビューからも分かる通りです。Vimmer なら必ず一度は読んでおいて間違いありません。


こちらもVim関連の書籍で評価が高い書籍の一冊です。vim-jpで見かける上級Vimmer(Vimサポーターズ)の皆様による、Vimを実践で使ったノウハウからプラグイン関連の情報が詰まっています。日本の Vim界隈を知る上でも是非一読しておきたい一冊です。

Vim/neovim の設定ファイルやプラグインなど、Vim script に関するノウハウがいくつも詰まった一冊です。日本で Vim Script をここまで深く解説している唯一の書籍と言えます。Vim力を伸ばしたいと考えるなら、絶対に避けては通れない書籍でしょう。

プロフィール
管理人
Vim太郎

Vim力アップして、そろそろ上級 Vimmer の仲間入りしたいIT系エンジニアの端くれです。読んでくる訪問者の皆様と一緒に、Vim力を上げていくことができる記事が書ければと考えています。

\フォローする/
スポンサードリンク
関連記事