「Linux標準教科書」の第6章は「viエディタ」です。
ここでは、viというテキストエディタの使い方が解説されています。
これは、Linuxの本来の使い方であるターミナル(コマンドライン)で操作できるLinux標準搭載のテキストエディタで、マウスや矢印キーを使わずに操作ができる反面、操作方法が独特なため、特別に章が設けられています。
今回は、このviエディタとその改良版のvimエディタの使い方について勉強したので、私なりにまとめて紹介します。
覚えることが沢山あるので、vi(vim)を使いながら、必要なときに必要な分だけ覚えていくのが一番良い方法だと思います。
そんな時に、この記事を備忘録(チートシート)として使っていただけると幸いです。
vi(vim)の特徴
先ほど「vi(vim)の操作方法は独特」と書きましたが、他のテキストエディタと大きく違うのが、「モード」と「コマンド」です。
vi(vim)には、役割の違う「モード」があり、このモードを切り替えながらテキストを編集していきます。
そして、モードの操作には「コマンド」の入力が必要になります。
このため、「コマンドの切り替え方法」と「操作のためのコマンド」を覚えなくてはなりません。
また、viもvimも、Linuxの本来の使い方であるターミナル(コマンドライン)による操作ができるテキストエディタであるという特徴があり、これがLinuxに標準搭載されている大きな理由といえます。
viとvimの違いとモードの切り替え
Linux標準教科書の第6章の冒頭の文章に「vi(vim)」と表記されています。
冒頭でも少し書きましたが、viとvimは別のソフトウェアで、viの改良版がvimです。
viとvimは具体的にどう違うのかというと、モードの種類が違います。
viには2つ、vimには4つのモードがあり、下の表のように各モードで役割が違います。
viは起動時にはコマンドモードで開き、vimはノーマルモードで開きます。
各モードへは上の表にあるキーで切り替え、「Esc」でviではコマンドモードに、vimではノーマルモードに切り替えます。
viは2つのモードを行き来するだけなのですが、vimは、必ず「Esc」でノーマルモードに戻ってからでないと、インサートモード・コマンドモード・ビジュアルモードへの切り替えができません。
また、vimにはviにはないビジュアルモードが搭載されています。
このように、viとvimではモードに違いはありますが、使用するコマンドはほとんど一緒です。
では、viとvim、どちらを使えば良いでしょうか。
もし、今後プログラミングを学びたいと思っている方にはvimをおすすめします。
なぜかというと、Visual Studio Codeのようなプログラミング用のテキストエディタには、vimと同じような操作ができるプラグインなどがあるからです。
「別にプログラミングをやる気はないし、簡単な方がいいよ」という方はviをおすすめします。
vi(vim)で使う基本的なコマンド
viもvimも、操作にコマンドを多く使います。
コマンドは、入力するとターミナルの一番下の行に入力の内容などが表示されます。
コマンドモードに切り替えると、カーソルがターミナルの一番下の行に移動します。
これから紹介するコマンドは、Linux標準教科書よりも少し数が多いです。
実は、以前vimを少し使ったことがあり、その時に調べて使ったものも含めました。
コマンドの表内で赤字で表記してある分がLinux標準教科書に掲載されていたコマンドで、黒字の部分が追加した分です。
また、基本的にviをベースに紹介しますが、vimをお使いの方は、viをvimと置き換えて読んでください。
vi(vim)の起動・保存・終了
ファイル操作で最も基本的なviの起動とファイルの保存、終了のコマンドを表にまとめました。
目的 | コマンド | 備考 |
ただの起動(空の無名ファイルを開く) | vi | オープニング画面が表示されるので、「i」でインサートモードに切り替えて、打ち込み始めると画面が変わる |
既存のファイルを開いて起動 | vi ファイル名 | |
ファイルを名前を付きで新規作成して起動 | vi ファイル名 | 同じディレクトリ内に同名のファイルがない場合 |
別のディレクトリにあるファイルを開いて起動 | vi 開きたいファイルのパス | |
編集中の上書き保存 | :w | viは終了しないので、そのまま編集続行可能 |
別名で保存 | :sav ファイル名 | 実行後は、別名で保存したファイルを編集することになる |
上書き保存してviを終了させる | :wq | |
ただの終了 | :q | |
強制的に終了 | :q! |
viは、ターミナルでviと入力しただけでも起動できるのですが、その場合は以下の画像のようにオープニング画面が表示されます。
ここから「i」キーを押し、何か文字を入力しだすと、名前のない空のテキストファイルが開いて入力された文字が表示され始めます。
この状態から名前をつけて保存したい場合は、「:sav ファイル名」で保存します。
また、「vi ファイル名」で起動すると、ターミナルを起動したディレクトリ内に同名のファイルがない場合は、名前付きで新規作成できます。
vi(vim)のモードの切り替え
vi(vim)でテキストファイルを編集するには、モードの切り替えが必要です。
モードの種類と切り替え方法は先ほど表にまとめて紹介しましたが、切り替えコマンドだけ抜き取って表にしたものを念のため紹介します。
コマンドを確認するだけならこちらの方が便利だと思います。
目的 | コマンド | 備考 |
インサートモードに切り替え | i | カーソルの現在ある位置の左側に入力できるようになる |
インサートモードに切り替え | a | カーソルが右にひとつ移動し、その左側に入力できるようになる |
インサートモードに切り替え | I(大文字) | カーソルが行頭に移動して、その左側から入力できるようになる |
インサートモードに切り替え | A(大文字) | カーソルが行末最終文字の右側に移動して、その左側から入力できるようになる |
コマンドモードに切り替え | : | |
ビジュアルモードに切り替え | v | |
各モードからコマンド(ノーマル)モードに切り替え | 「Esc」キー |
文字の入力をするインサートモードへの切り替えコマンドはいくつかあり、それぞれ微妙に違います。
表中の備考にそれぞれの特徴を入れましたので、必要に応じたコマンドを使ってください。
特に、行末に文字を追加したい場合、「i」キーで切り替えると最後から2番目に文字が入力されてしまいます。
「a」キーで切り替えましょう。
カーソルの移動
vi(vim)ではカーソルの移動にマウスや矢印キーは使いません。
コマンドモード(ノーマルモード)で以下のキーを使います。
目的 | コマンド | 備考 |
ひとつ上にカーソルを移動 | j | |
ひとつ下にカーソルを移動 | k | |
ひとつ左にカーソルを移動 | h | |
ひとつ左にカーソルを移動 | l | |
1単語進む | w | |
1単語もどる | b | |
1行上にカーソルを移動 | gk | |
1行下にカーソルを移動 | gj | |
カレント行の行頭へカーソルを移動 | 0(ゼロ) | |
カレント行の行末へカーソルを移動 | $ | |
行番号を指定してカーソルを移動 | :行番号 | |
ファイルの先頭行(1行目)にカーソルを移動 | gg | |
ファイルの最終行にカーソルを移動 | G(大文字) | |
次のページへ移動 | 「Ctrl」キー+f | |
前のページへ移動 | 「Ctrl」キー+l |
単純なカーソルの移動なら、ブラインドタッチのホームポジションに手を置いて、右手だけで操作できます。
慣れるまで時間がかかりますが、慣れてしまうととても使いやすく、会社でワードを使うときにうっかりコマンドを打ってしまうほどです。
文字のカット・アンド・ペースト
テキストの編集では、カット・アンド・ペーストは必須の操作ですが、その中でvi(vim)のカットは特徴的で、削除の役割も兼ねています。
目的 | コマンド | 備考 |
1文字カット | x | 削除ではなく、カット(pやPで貼り付け可能)だが、削除としても使用する |
カーソルのある単語をカット | dw | カーソルのある単語だけをカットする |
1行カット | dd | 削除ではなく、カット(pやPで貼り付け可能)だが、削除としても使用する |
任意の行数をカット | 行数dd | カーソルのある行から指定した行数カットする |
カーソルのある単語をコピー | yw | カーソルのある単語だけをコピーする |
1行コピー | yy | カーソルのある行をコピーする |
任意の行数をコピー | 行数yy | カーソルのある行から指定した行数コピーされる |
カーソルの文字の次または次の行にペースト | p | |
カーソルの文字の前または前の行にペースト | P(大文字) |
Windowsのメモ帳やオフィススイートでは削除はバックスペースキーや「Del」キーを使いますが、vi(vim)の場合は表中のコマンドを使ってカットします。
カットされた部分のデータは残っているのですが、ペーストしないままにしておくと、結果削除になります。
コマンドの取り消しと繰り返し
Linux標準教科書では、カット・アンド・ペーストのところにコマンドの取り消しが掲載されていますが、取り消しと繰り返しは便利な機能なので、少し多めに紹介します。
目的 | コマンド | 備考 |
コマンドを1回取り消し(アンドゥ) | u | Linux標準教科書には「カット、ペーストを1回取り消し」と書いてあるが、その他のコマンドや入力にも有効 |
アンドゥを取り消す | 「Ctrl」キー+r | |
直前のコマンドを実行 | . | |
直前のコマンドを複数回実行 | 繰り返したい回数. | 2.で2回コマンドを繰り返す |
文字列の検索
vi(vim)で文字列を検索すると、検索結果としてカーソルが最初にヒットした文字列に飛びます。
また、環境によっては検索してヒットした文字列がハイライトされます。
目的 | コマンド | 備考 |
文字列を検索する | /検索文字列 | カーソルが検索した文字列のところまで飛ぶ |
カーソルのある単語を下方向に検索 | * | もう1回*を押すと、下方向の次のヒットした単語に飛ぶ |
カーソルのある単語を上方向に検索 | # | もう1回*を押すと、上方向の次のヒットした単語に飛ぶ |
検索した文字列を次の文字列から検索しなおす | n | |
検索した文字列を前の文字列から検索しなおす | N(大文字) | |
:nohでも、「Esc」キー2回連打でも消すことができる場合がある | :nohlsearch | :nohでも、「Esc」キー2回連打でも消すことができる場合がある |
文字列の置き換え
vi(vim)で文字列の置き換えを行う場合、コマンド1つで、1回だけ置き換えるのか、1行に含まれるものすべてを置き換えるのか、ファイル全体の該当部分をすべて置き換えるのか指定することができます。
目的 | コマンド | 備考 |
カーソルのある行の最初のoldをnewに置き換える | :s/old/new | 置き換えはヒットした最初の文字列だけ |
指定した行の最初のoldをnewに置き換える | :行数s/old/new | |
指定した行のすべてのoldをnewに置き換える | :行数s/old/new/g | |
ファイル全体のすべてのoldをnewに置き換える | :%s/old/new/g | |
ファイル全体のすべてのoldをnewに置き換える(置き換えのたびに確認) | :%s/old/new/gc | 確認メッセージがコマンドの部分に表示されたら、yキーでYes、nキーでNo、qキーで中断の意思表示を入力 |
ビジュアルモード
ビジュアルモードはviにはなく、vimにはある機能なため、Linux標準教科書には掲載されていませんが、vimを使うなら覚えておきたい機能なので、紹介します。
ビジュアルモードは、コピーやカットをするときの範囲選択をハイライトの帯で視覚的にわかりやすくするためのモードです。
ハイライトの帯の形状によって、以下の3つのコマンドを使い分けます。
目的 | コマンド | 備考 |
カーソルのあった場所を起点に、カーソルが移動した先までが範囲(ハイライト表示) | v | 任意の場所にカーソルを移動してからvを入力して起点を決め、範囲を指定(ハイライト)して、カットやコピーなどのコマンドを入力する |
カーソルのあった行を起点に、カーソルが移動した先の行までが範囲(ハイライト表示) | V(大文字) | 任意の行にカーソルを移動してからVを入力して最初の行を決め、範囲を指定(ハイライト)して、カットやコピーなどのコマンドを入力する |
カーソルのあった場所を起点に、カーソルが移動した先までを対角とした長方形が範囲(ハイライト表示) | 「Ctrl」キー+v | 任意の場所にカーソルを移動してから「Ctrl」キーとvを入力して起点を決め、範囲を指定(ハイライト)して、カットやコピーなどのコマンドを入力する |
まとめ
「Linux標準教科書」第6章の「viエディタ」の使い方について勉強したので、私なりにまとめて紹介しました。
vi(vim)は、Linuxの本来の使い方であるターミナル(コマンドライン)で操作できるLinux標準搭載のテキストエディタで、マウスや矢印キーを使わずに操作ができる反面、操作方法が独特なため、特別に章が設けられています。
覚えることが沢山あるので、vi(vim)を使いながら、必要なときに必要な分だけ覚えていくのが一番良い方法だと思います。
そんな時に、この記事を備忘録(チートシート)として使っていただけると幸いです。