【Linux】vi(Vim)エディタとは?コマンドモードの切り替え方や使い方
この記事からわかること
- Linux:viコマンドとは?
- viコマンドとVimの違い
- インサートモードとコマンドモードの特徴と違い
- コピー/検索/保存/切り取り/置換などのコマンド
index
[open]
\ アプリをリリースしました /
viエディタ(コマンド)とは?
vi(ブイアイ)エディタとはテキストファイルをコマンドライン上で編集できるエディタ機能です。「Visual Editor」/「Visual Interface」とも呼ばれLinuxやUnixでは「Emacs(イーマックス)」と並ぶ2大巨頭です。
Linuxではデフォルトのエディタがviエディタに設定されておりviコマンドを実行することで簡単に起動させることができます。
viエディタには「コマンドモード」と「インサートモード」の2つのモードがあり、切り替えることで操作方法が変化します。(Vimでは6つ)
vi(ブイアイ)とVimの違い
Vim(ヴィム)というのはviの上位互換として開発されたエディタです。「Vi Improved」の略称でviの「Improved:改良」版ということになります。Linuxにデフォルトで搭載されているviエディタはVimが使用されているので今はvi=Vimという認識でもそれほど混乱はしないと思います。とはいえVim独自の機能も多いので別物であることは間違いありません。
viエディタ(コマンド)とは?〜まとめ〜
- CUIで操作できるテキストエディタ
- コマンドモードとインサートモードの2つがある
- Vimはviの上位互換
- LinuxのデフォルトエディタはVim
使い方とコマンド
Vimを起動するにはコマンドライン上でviコマンドを実行します。引数をなしで実行するとVimのバージョンやコマンドのヘルプが表示されます。
$ vi
~
~ VIM - Vi IMproved
~
~ version 8.2.4113
~ by Bram Moolenaar et al.
~ Vim is open source and freely distributable
~
~ Help poor children in Uganda!
~ type :help iccf<Enter> for information
~
~ type :q<Enter> to exit
~ type :help<Enter> or <F1> for on-line help
~ type :help version8<Enter> for version info
~
Vimはテキストエディタなので入力するファイル名を引数に指定すればそのファイルをVimで開き編集可能になります。拡張子が「txt」はもちろんのこと「html」や「php」などのファイルでも起動、編集できます。
$ vi ファイル名
読み取り専用で開く
viコマンドのみの場合は編集できますが、中身をみたいだけの場合は-Rを指定すると読み取り専用として開くことができます。
$ vi -R ファイル名
コマンドモードの使い方
viコマンドでファイルを開くとファイルの中身がコマンドライン上に表示されます。
$ vi sample.txt
これはサンプルテキストです。
起動させたばかりでは「コマンドモード」になっています。自由に文字を入力できる訳でなく、カーソルの移動や切り取り、コピー、貼り付け、検索など多種多様な機能が短いコマンドを入力するだけで操作することができます。
カーソルを操作するコマンド
カーソルを移動させるのは矢印キーでも可能ですが、横一列に並んでいる「h,j,k,l」キーでも操作することができます。また行頭やファイル末尾など一気に移動できるコマンドも用意されています。
| コマンド | 機能 |
|---|---|
| k (または↑キー) | 1文字上に移動 |
| j (または↓キー) | 1文字下に移動 |
| h (または←キー) | 1文字左に移動 |
| l (または→キー) | 1文字右に移動 |
| 0 | 行頭へ |
| $ | 行末へ |
| gg | ファイルの先頭へ |
| H | カーソルを画面の最上行へ移動 |
| L | カーソルを画面の最下行へ移動 |
| G | ファイルの末尾へ |
| :n (nGでも可) | n行目に移動 |
viエディタを終了/ファイルを保存するコマンド
viエディタでの起動はviコマンドでしたが終了するには:qキーを押してEnterキーで実行になります。ファイルを編集している場合はE37: No write since last change (add ! to override)「変更点があるけど上書きされていません」といったエラーが出るので保存して終了か保存せず終了のコマンドを実行します。
| コマンド | 機能 |
|---|---|
| :q | 終了する |
| :q! | 保存せず終了する |
| :w | 保存する |
| :w ファイル名 | 「ファイル名」に変更して保存する |
| :wq (またはZZまたは:x) | 保存して終了する |
| :wq! | 強制保存して終了する |
| :e! | 編集前(最後の保存時)に戻す |
| :!コマンド | viエディタを閉じずに通常のコマンド(lsなど)を実行 |
| :r ファイル名 | ファイルの内容をカレント行の次行に組み込む |
コピー/検索/保存/切り取り/置換などのコマンド
検索機能は/を入力後検索した文字列を打ち込みEnterキーを押します。複数のマッチがあった場合はnキー(逆方向はShift + n)で1つずつマッチ部分にカーソルを表示させることができます。
| コマンド | 機能 |
|---|---|
| dd | 行切り取り |
| dw | カーソル位置の単語を削除 |
| yy | 行コピー |
| p | カーソル位置の後ろに貼り付け |
| P | カーソル位置の前に貼り付け |
| x(またはDeleteキー) | カーソル位置を1文字切り取り |
| X(またはBackSpaceキー) | カーソル位置の左を1文字切り取り |
| / | カーソル位置より後ろを検索 |
| ? | カーソル位置より前を検索検索 |
| :%s/AAA/BBB/ | 文字列AAAをBBBに置換(一回のみ) |
| :%s/AAA/BBB/g | 文字列AAAをBBBに置換(全て) |
viエディタで可能な置換はsedコマンドのsコマンドと同じです。gスイッチをつければマッチする全ての文字列を置換することができます。
繰り返し/取り消し/設定
viエディタでの起動はviコマンドでしたが終了するには:qキーを押してEnterキーで実行になります。ファイルを編集している場合はE37: No write since last change (add ! to override)「変更点があるけど上書きされていません」といったエラーが出るので保存して終了か保存せず終了のコマンドを実行します。
| コマンド | 機能 |
|---|---|
| 数値コマンド (例:2yy) | 指定数値分コマンドを繰り返す(例:2行分コピー) |
| . | 直前のコマンドを再実行 |
| u | 操作を取り消す |
| Ctrl + R | やり直し(取り消しを取り消す) |
| Ctrl + f | 画面を次の画面に移動 |
| Ctrl + b | 画面を前の画面に移動 |
| :set 設定名 | エディタの表示設定を変更する |
:setコマンドで表示設定を変更することができます。
| コマンド | 設定 |
|---|---|
| :set number (nuでも可) | 行番号を表示 |
| :set nonumber (nonuでも可) | 行番号を非表示 |
| :set tabstop=タブ幅 (tsでも可) | タブ幅を指定 |
| :set hlsearch | 検索結果のハイライト |
| :set nohlsearch | 検索結果のハイライト |
ホームディレクトリに「.vimrc」ファイルを作成し、中にsetコマンドを記述しておくとデフォルトの設定を変更することもできます。その際はset numberのように:は取り除いて記述します。
インサートモードに切り替えるコマンド
インサートモードに切り替えるのでよく使うのはiです。他のコマンドをカーソル位置を調整しながら切り替えるコマンドなので最初はiさえ覚えれば問題はありません。
インサートモードに切り替わると下側に-- INSERT --と表示されます。コマンドモードに戻るにはEscキーを押して切り替えることが可能です。
| コマンド | 機能 |
|---|---|
| i | 現在指定のカーソル位置から切り替え入力開始 |
| a | 現在指定のカーソル位置から1つ右から切り替え入力開始 |
| I | カーソル位置を行頭に移動し切り替え入力開始 |
| A | カーソル位置を行末に移動し1つ右から切り替え入力開始 |
| Esc | インサートモードからコマンドモードに切り替える |
インサートモードでは通常のメモ帳などのように編集や追記が可能になります。
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。








