よく使うコマンド
ここでの説明で必要なので、まず、インサートモードで複数行の文章を入力してください。入力する文章は何でも構いません。入力できたら「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
以外のコマンドでも使うことができます。