よく使うコマンド
ここでの説明で必要なので、まず、インサートモードで複数行の文章を入力してください。入力する文章は何でも構いません。入力できたら「Esc」キーでコマンドモードに戻っておいてくださいね。
なお、コマンドモードでのキー入力を、ここからは実態に合わせて「コマンド」というようにします。例えば、インサートモードに切り替える「i」キー入力のことを、iコマンドをいいます。
カーソルの移動
では、まず文章中の任意の場所に入力できるように、カーソルを移動させてみましょう。
十字キー(「←」「↓」「↑」「→」)を使うこともできますが、コマンドモードではh、j、k、lコマンドでカーソルを移動できます。hが左、jが下、kが上、lが右へ移動です。これら4つのコマンド(キー)は右手をホームポジションに置いた状態で押せるため、十字キーを使うよりも迅速に操作できるとされています(ほとんど変わらないという人もいると思いますが……)。
文字列の検索
次は/コマンドです。画面の左下(先ほど「– INSERT –」が表示された辺り)に「/」が表示され、その後ろに(インサートモードに切り替えなくても)文字列を入力できます。
何か文字列を入力したら「Enter」キーを押してください。すると、入力した文字列にマッチする文字が文章内にあった場合には、そこにカーソルが移動してくれます。つまり、/は文字列検索のコマンドです。表示された「/」の後ろに入力した文字列を文章中から検索します。
また、該当箇所が複数ある場合には、nコマンドで、次への該当箇所、またその次の該当箇所へと移動していってくれます。Nコマンド(「Shift」+「n」キーを押す)は、逆に前の該当箇所へ移動していきます。
コマンドは大文字・小文字を区別する
コマンドモードでは、「Shift」キーや「Ctrl」キー、「Alt」キーとアルファベットキーや数字キーの組み合わせで、キー入力によるコマンドを表現します。そのため、nコマンドと、N(「Shift」+「n」キー)コマンドは別物です。アルファベットキーを使うコマンドでは、大文字か小文字かに注意してください。
/コマンドと似た動作をするものに?コマンドがあります。?コマンドは逆検索(上方検索)です。/コマンドによる検索では上から下へ、?コマンドによる検索では下から上へ該当箇所を探します。また、nコマンドやNコマンドで次の該当箇所へ移動する動作も逆で、?コマンドで検索した後にnコマンドを使うと、文章中の前にある該当箇所へ順に移動していきます。
コピー、カット&ペースト
では次に、テキストファイルの編集でよく使う「コピー&ペースト」の方法を見ていきます。
yyコマンド(「y」キーを2回押す)は、カーソルがある行をコピーします。yは「yank」の頭文字で、viにおいてyankはコピーと同じような意味を持ちます。
次はペーストです。pコマンドを実行する(「p」キーを押す)と、カーソルのある行の次の行に、コピー(yank)した行の内容がペーストされます。これで1行コピー&ペーストができました。
行コピーの使いどころ
設定ファイルを編集するときには、既存の設定行をコピー&ペーストして使うことをお勧めします。タイプミスを防ぐためで、設定項目が長いときには特に有効です。
次に「カット&ペースト」をやってみましょう。今度は「d」キーを2回連続で押してddコマンドを実行します。すると、カーソルのある行がカットされて、その行は表示から消えます。そうしたら、カーソルを他の行に移動させて、pコマンドを実行してください。先ほどカットした行がペーストされたはずです。これで「カット&ペースト」が行えました。行の順番を入れ替えたりするときに使えますね。
複数行をまとめてコピー/カットする
カーソルがある行だけでなく、複数行まとめてコピペしたい場合には、yyやddの前に数字を打ち込んであげます。例えば、yyの前に10を先に入力して10yyコマンドを実行すると、yyコマンドが10回実行され、カーソルのあった行から10行分がコピーされます。この状態でpコマンドを実行すると、コピーした10行がペーストされます。
このようにviでは、コマンドの前にそのコマンドを実行する回数を指定できます。このルールはyやdコマンドに限りません。20lコマンドは、カーソルを20文字分右に移動させます。
行単位ではなく、もう少し細かい単位での操作も可能です。例えば、ywコマンド(「yw」とキー入力)では、ワード単位でコピーできます。また、deコマンド(「de」とキー入力)では、空白を含まない文字列の終わりまでカットできます。c$コマンド($は「shift」+「4」キー)を実行すると、行末までカットした後、インサートモードになります。
コマンドを適用する範囲の指定
ywコマンドのwやdeコマンドのe、c$コマンドの$は、いずれもコマンドの適用範囲を指定するものです。wはwordの意味で、ywはwordをコピーします。eはendの意味で、deは(空白を含まない)文字列の終わりまでカットします。$は行末の意味で、c$は行末までカットした後、インサートモードになります(d$aと同じ)。
先ほどの繰り返し回数の指定と同様、適用範囲の指定もyやd、c以外のコマンドでも使うことができます。

