viはUNIXの標準的なエディタです。
viは様々な派生型(nvi、vimなど)が存在しますが、基本的な使い方はどのviも同じです。
viはWindowsのエディタに慣れた方から見ると、かなり操作方法が独特と感じられるかもしれません。
しかし基本的な使い方さえ覚えてしまえば、Windowsのエディタと違うがなかなか便利なエディタだと感じることが出来ると思います。
viは操作方法が原因でUNIXを始める方には敬遠されがちですが、ほぼ全てのUNIX系のOSで使えることから、viの使い方が分かれば全てのUNIXでファイルの編集が可能となります。
FreeBSDにも当然vi(nvi)が入っており、このviで設定ファイルを編集することになると思いますので、是非使い方を覚えましょう。
最初に最低限これだけ覚えておけばエディタとして使えるであろう操作を覚えましょう。
基本的な操作方法を以下にまとめました。
viには編集モードとコマンドモードという2つのモードがあります。
編集モードでは文字の入力が可能ですが、ファイルを保存したり文字のコピー、移動、削除といった作業は出来ません。
コマンドモードでは逆にファイルを保存したり文字のコピー、移動、削除といった作業は可能ですが、文字の入力はできません。
viではこの2つのモードを使い分けて作業します。
コマンドモードから編集モードに切り替えるには「i、a、A、o、R」などのキーを使い、編集モードからコマンドモードに切り替えるには「ESC」キーを使います。
ファイルの保存やviの終了はコマンドモードで行いますので、
よくわからなくなったら「ESC」でコマンドモードに戻ることを覚えましょう。
ではまずviを起動してみましょう。
ファイルを新規作成して編集したい場合は、
> vi
とコマンドのみを実行します。
既に編集したいファイルが存在している場合は、
> vi hogehoge.txt
のようにviの後にスペースを空けて、ファイル名を指定します。
viを起動すると一番上の行でカーソルが点滅し、他の行は「~」となっていると思います。
この「~」は何も書かれていない印です。
また、起動直後はコマンドモードなので、文字を入力することは出来ません。
では次にviを終了しましょう。
viを終了させるにはコマンドモードである必要があります。
まず最初に「ESC」キーを押して確実にコマンドモードに切り替えます
次に「:q」と入力してください。
一番下の行に「:q」と入力した文字が表示されるはずです。
「:q」が入力された状態でEnterキーを押せばviを終了できます。
また変なファイルを開いてしまったり、ファイルを変更したが保存しないで終了させるには、コマンドモードで「:q!」と入力しEnterキーを押してください。
viで文字を入力したい場合は、コマンドモードから編集モードに切り替えます。
編集モードに切り替えるキーはいくつかありますが、最低限「i」を覚えればなんとかなるでしょう。
「i」は現在のカーソル位置から入力するコマンドです。
では実際にやってみましょう。
まずviを起動します。
viはコマンドモードで起動しますので「i」を押して編集モードに切り替えましょう。
> vi
「i」キーを押す
編集モードに移行したら適当に文字を入力してください。
普通に入力できたと思います。
入力方法は基本的にはWindowsのエディタと同様なので、すぐに使えるようになると思います。
例えば、文字を消すにはWindowsのエディタと同じように「BackSpace」キーを使います。
文字が消えると思います。
カーソルの移動もWindowsと同じように「→、←、↑、↓」キーで行います。
行の終わりで改行したい場合は「Enter」キーで行います。改行を消すには行の先頭で「BackSpace」キーで行います。
文字が入力し終わったら編集モードからコマンドモードに戻ります。
「ESC」で戻ってください。
なお、コマンドモードに一旦戻ってしまうと再度編集モードに切り替えても、行の削除が出来なくなります。
行を削除するにはコマンドモードで、消したい行の上で「dd」キーで行います。
また、コマンドモードで文字を1文字消したい時は、消したい文字の上で「x」キーで行います。
編集した文章を保存するときは、コマンドモードで「:w」と入力しEnterキーを押します。
:w
このとき、新規作成でviを起動したときは保存するファイルを指定する必要があります。
この場合は:wの後にスペースを空けて保存したいファイル名を入力します
:w hogehoge.txt
これで保存されました。
またviでは保存と終了を同時に行うことができます。
保存は「:w」終了は「:q」ですが、2つを組み合わせることが可能です。
:wq
上記のようにすれば、保存と同時にviを終了することが出来ます。
ちなみに読み取り専用のファイルを開いてしまい、それを強制的に保存したいときは、
:wq!
とします。
以上がviで最低限知っておくべき操作方法です。
これだけの操作を知っていれば最低限エディタとして使えると思います。
最低限の操作は上記を覚えてもらえば可能だと思います。
以下にviの比較的よく使われるであろうコマンド一覧を記載しておきますので、必要に応じて使ってください。
また各コマンドの前に数字を打つと、その回数分だけ同じ動作を繰り返します。(可能なコマンドのみ)
| 操作 | コマンド | 内容 |
|---|---|---|
| viの起動 | vi | viを新規作成で起動 |
| vi [ファイル名] | 指定したファイルをviで編集 vi hogehote.txtのようにする ファイル名にはワイルドカード(*、?など)も使用可能 |
|
| ファイルを開く | :e [ファイル名] | 指定したファイルを開く |
| 保存と終了 | :q | 終了 |
| :q! | 変更箇所を破棄して終了 | |
| :wq | 保存して終了 | |
| :wq! | 強制的に保存して終了 | |
| :w | 保存 | |
| :w [ファイル名] | 指定したファイルに保存 | |
| :zz | 保存して終了 | |
| カーソル移動 | h、← | 左 |
| j、↓ | 下 | |
| k、↑ | 上 | |
| l、→ | 右 | |
| O | 行頭へ | |
| $ | 行末へ | |
| Enter | 次の行の行頭へ | |
| w | 次の単語へ | |
| b | 前の単語へ | |
| ctrl + b | 前方向に1ページスクロール | |
| ctrl + u | 前方向に半ページスクロール | |
| ctrl + f | 後方向に1ページスクロール | |
| ctrl + d | 後方向に半ページスクロール | |
| 1G | 文頭へ | |
| G | 文末へ | |
| nnG | nn行目へ | |
| 削除、変更 | x | 1文字削除 |
| dd | 1行削除 | |
| cw(変更したい文字) | 1単語変更 | |
| c$ | カーソル位置から行末まで変更 | |
| dw | 1語削除 | |
| d^ | カーソルのある位置から左側を削除 | |
| d$ | カーソル位置から右側の行末まで削除 | |
| アンドゥ | u | 直前の修正を取り消す |
| U | この行に対して行ったすべての修正を取り消す | |
| 繰り返し | .(ピリオド) | 直前の変更操作の繰り返し |
| 検索 | /正規表現 | 前方検索 カーソルが所望の文字列に移動 |
| ?正規表現 | 後方検索 カーソルが所望の文字列に移動 | |
| f正規表現 | 行内の指定した1文字(正規表現 )へ移動(下方向) | |
| F正規表現 | 行内の指定した1文字(正規表現 )へ移動(上方向) | |
| n | nを押すとページ下方を検索 | |
| N | Nを押すとページ上方を検索 | |
| 置換 | r | カーソルのある1文字を次に指定した文字で置換 |
| R | カーソルのある位置から複数個の文字を置換 | |
| s | カーソルのある1文字を複数個の文字で置換 | |
| S | カーソルのある行全体を置換 | |
| cc | カーソルのある行全体を置換 | |
| cw | カーソルのある位置からこの語の最後まで置換 | |
| cf指定文字 | カーソルのある位置から指定した1文字(指定文字)まで置換 | |
| カット コピー ペースト | yy | 1行コピー |
| y0 | カーソルのある位置から行の先頭までコピー | |
| y$ | カーソルのある位置から行の終わりまでコピー | |
| yw | カーソルのある単語をバッファに複写 | |
| dd | 1行カット | |
| p | カーソルのある位置の前に貼りつける | |
| P | カーソルのある位置の後に貼りつける | |
| その他 | :r [ファイル名] | 指定したファイルをカーソルの下に挿入 |
| :r! [コマンド] | シェルのコマンドを実行し、結果をカーソルの下に挿入 | |
| :! [コマンド] | シェルのコマンドを実行する | |
| :! [コマンド] % | シェルコマンドの引数に編集中のファイルを指定して実行 | |
| :h | 日本語マニュアルを表示 | |
| :sh | 一時的にシェルに戻る。viに戻るときはexit | |
| % | 選択している括弧に対応する括弧にジャンプ | |
| << | カーソルのある行の文字を右へ1タブ分移動 | |
| >> | カーソルのある行の文字を左へ1タブ分移動 | |
| :! cc % | 編集中のファイルをコンパイル | |
| :! cc %; a.out | 編集中のファイルをコンパイルし実行 |