検索
連載

Linuxの定番テキストエディタ「vi」をマスターしよう(1)基本操作編“応用力”をつけるためのLinux再入門(18)

「vi」は、ターミナルで使用する「テキストエディタ」です。ほとんどのLinux環境に備わっており、設定ファイルの編集にviを使うように設定されているコマンドもあるため、最低限の操作は知っておく必要があります。

Share
Tweet
LINE
Hatena
「“応用力”をつけるためのLinux再入門」のインデックス

“応用力”をつけるためのLinux再入門

Linuxの定番テキストエディタ「vi」とは?

 「vi」は、端末で動作するテキストエディタです。マウスはもちろん、矢印キーやファンクションキーのような特殊キーを使用せずに操作できるので、全ての操作をあらかじめスクリプトとして記述しておき、一気に編集するような操作も可能です。また、「遠隔地にあるサーバにsshでログインして設定ファイルを修正する」場合にも使用できます。

 現在広く利用されているのは「vim(Vi IMproved)」コマンドで、多くの場合「vi」でvimが起動するようになっています。vimでは矢印キーが使用できる他、多段アンドゥ(Undo)や構文強調表示にも対応しています。

viの起動と終了をマスターしよう

 「vi ファイル名」で、viが起動します。100行目にカーソルを移動して起動したい場合は、「vi +100 ファイル名」、abcと記述されている行に移動しておきたい場合は「vi +/abc」のように、「+行番号」や「+/検索文字列」を指定します。

viの起動方法

vi ファイル名

(指定したファイルを開いて起動する)

vi +100 ファイル名

(指定したファイルの100行目にカーソルを移動して起動する)

vi +/abc

(abcと記述されている行にカーソルを移動して起動する)



 viには、文字で操作する「ノーマルモード(コマンドモード)」と、文字を入力する「編集モード」の2つのモードがあります。例えば、ノーマルモードでの[h]キーは「1つ左へ移動する」、編集モードの[h]キーは「hという文字を入力する」という意味になります。

 [Esc]キーで常にノーマルモードになります。「ファイルを保存したい」「viを終了したい」といった操作を行いたい場合には、まずは[Esc]キーを押すとよいでしょう。

 ファイルを上書き保存して終了するには、「ZZ」(大文字の「Z」を2回)を入力します。保存と終了を分けて操作したい場合、[:]キーに続けて「w」で保存(write)、「q」(quit)で終了します。“強制的に”であれば「!」を付けます。

 「:」から始まるコマンドの場合は、自分が入力した内容を確認したり、修正したりした上でコマンドを実行できます。

 ノーマルモードで[:]キーを押すと画面最下行にコロン(:)が表示されるので、「q!」のようにコマンドを入力し、[Enter]キーを押すことでコマンドが実行されます。

●viを終了するコマンド
:w 保存する(編集は続行する)
:wqまたは「ZZ」 保存して終了する
:q! 変更を破棄して終了する

 なお、上記のコマンドは[Esc]キーでノーマルモードにしてから実行し、最後に「Enter」キーを入力する必要があります。


ワンポイント:「-y」オプションで起動したviの動作

 「-y」オプションを付けてviを起動した場合は、動作が異なります。「-y」オプションは、マウスでクリックしてカーソルを移動して入力できる「easy mode」で起動するオプションで(evimコマンド相当)、基本的にずっと「挿入モード」です。

 [Ctrl]+[L]キーで通常の操作に戻り、「ZZ」コマンドで保存終了するか、[Ctrl]+[O]キー(挿入モード時は「1回コマンドを実行して、挿入モードに戻る」という操作になる)に続けて「:q!」を入力して、変更を破棄して終了してください。


 以下の画面1の実行例では、「vi /etc/bashrc」で/etc/bashrcファイルを参照しています(Ubuntu環境の/etc/bash.bashrc相当)。

viコマンドの実行例

vi /etc/bashrc

(/etc/bashrcを開く(rootユーザーの場合は編集可能))

vi +R /etc/bashrc

(/etc/bashrcを読み込み専用で開く)


画面1
画面1 viの画面(/etc/bashrc)

 /etc/bashrcは一般ユーザーでは変更できないファイルなので、最下行に「[読み込み専用]」と表示されています。なお、通常のファイルを読み込み専用で表示したい場合は、「+R」オプションを使用します。

 以下の画面2は、viで[Esc]キーに続いて「:q!」と入力した状態です。この後に[Enter]キーを押すと、ファイルを保存せずに終了します。最低限このキー操作を覚えておけば、いつでも変更を破棄して終了することができます。

画面2
画面2 「:q!」で保存せずに終了した(編集操作を一切していない場合、つまり、画面を開いて矢印キーでスクロールしただけてあれば「:q」のみで終了できる)

●「ZZ」コマンドの注意点

 viに不慣れなころ、よくやりがちな操作に[Ctrl]+[Z]があります。ファイルを保存して終了するコマンドは「ZZ」([Shift]キーを押しながら[Z]キーを2回)なのですが、キー操作ということで、つい[Ctrl]キーに指が伸びてしまうのかもしれません(画面3)。

画面3
画面3 [Shif]キーと[Ctrl]キーを間違えた場合

 しかし、[Ctrl]+[Z]は、シェルの「停止」のキー操作です。viはファイルを開いて表示あるいは編集状態のまま停止してしまうので、「fg」コマンドでフォアグラウンドに戻し、終了操作を行ってください。

カーソル移動の基本をマスターしよう

 カーソル移動の基本は「h」「j」「k」「l」、つまり右手のホームポジション付近に並んだ4つのキーです。vimの場合は、矢印キーでも移動できます。

●上下左右のカーソル移動
「h」または[←] 左へ移動する
「j」または[↓] 下へ移動する
「k」または[↑] 上へ移動する
「l」または[→] 右へ移動する

 コマンドの前に数字を入れ、例えば「3j」のようにすると「jコマンドを3回」、つまり「3行下へ移動」という動作になります。行頭/行末には以下のキーで移動します。

●行頭/行末への移動
「0(ゼロ)」または[Home] 行頭へ移動する
「$」または[End] 行末へ移動する

 インデントされたプログラムコードのように先頭に空白がある場合、「行の頭」というと、「その行の最初の非空白文字」へ移動したくなるかもしれません。この場合は以下のキーを使います。これらも、「3-」で3行上、「5+」で5行下、「2L」で画面上の下から二行目の先頭へ移動、といったように行数を指定することが可能です。

●上下行の先頭への移動
「^」 行の先頭(その行の最初の非空白文字)へ移動する
「-」 上の行の先頭(その行の最初の非空白文字)へ移動する
「+」または[Enter] 下の行の先頭(その行の最初の非空白文字)へ移動する
「H」 画面一番上の行の先頭(その行の最初の非空白文字)へ移動する
「L」 画面一番下の行の先頭(その行の最初の非空白文字)へ移動する

 ファイルの先頭行と最終行へは「G」で移動します。「G」は行移動のコマンドで、「G」のみの場合は末尾に移動しますが、「5G」で5行目、「30G」で30行目のように、移動したい行番号を指定することもできます。

●ファイルの先頭と最終行への移動
「gg」または「1G」 1行目の先頭(最初の非空白文字)へ移動する
「G」 ファイルの最終行の先頭(最初の非空白文字)へ移動する

 以下の画面4に主なカーソルの移動操作をまとめておきます。これを見て、カーソル操作をマスターしてください。

画面4
画面4 主なカーソル移動操作

●単語単位の移動

 単語単位での移動は「e」と「w」、「b」と「ge」で行います。この場合の「単語」とはアルファベットと数字、アンダースコアで構成された文字列です。それ以外の文字、つまりスラッシュ(/)やピリオド(.)などは単語の区切り扱いとなります()。大文字の「E」「W」「B」を使用すると、空白文字だけが区切り扱いとなります。

【※】単語の区切り文字は、「iskeyword」オプションで変更できます(詳細は次回解説)。viの既定値は「@,48-57,_」、vimの初期値は「@,48-57,_,192-255」で192以降で定義されているアクサン記号付きの文字なども単語構成文字に含まれています。



●単語単位での移動
「e」または「E」 単語の末尾へ移動する
「w」または「W」 次の単語の頭へ移動する
「b」または「B」 前の単語の頭へ移動する
「ge」または「gE」 前の単語の末尾へ移動する

 例えば、「sample1.txt sample2.txt」という文字列で、1つ目の「s」にカーソルがある場合、「w」コマンド(次の単語の先頭)は「sample1.txt」の「.」へ移動、「W」コマンドの場合は「sample2.txt」の「s」へ移動します。

画面スクロールの基本をマスターしよう

 [Ctrl]+[B]キーで1画面分上へスクロール(PageUp)、[Ctrl]+[F]キーで1画面分下へスクロール(PageDown)します。

●スクロール
[Ctrl]+[B] 1画面上へスクロール(Before)する
[Ctrl]+[F] 1画面下へスクロール(Forward)する
[Ctrl]+[D] 半画面上へスクロールする(下の方にあるテキストが表示される)
[Ctrl]+[U] 半画面下へスクロールする(上の方にあるテキストが表示される)
[Ctrl]+[E] 1行上へスクロールする
[Ctrl]+[Y] 1行下へスクロールする

 また、「zz」で現在カーソルがある行が画面の真ん中に、「zt」で最上段(top)に、「zb」で最下段(bottom)になるようにスクロールすることができます。

●カーソル基準のスクロール
「zz」 カーソル行が画面中央になるようにスクロールする
「zt」 カーソル行が画面最上段になるようにスクロールする
「zb」 カーソル行が画面最下段になるようにスクロールする

筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.