vi
viは、テキストファイルの編集を行うコマンドです。
ファイルを指定してviコマンドを実行すると、編集モードになるのでそこでvi中のコマンドを駆使してファイルを編集します。慣れるととても便利ですが、慣れるまでが大変です。
構文
- (構文)
- vi [オプション] <ファイル名>
オプション | 説明 |
---|---|
-b | バイナリモードで開く |
-R | 読み取り専用モードで開く |
vi中のコマンド
viにはコマンドモードとexモードの2つがあります。コマンドモードはテキストの編集を行うモードで、exモードは保存の方法を指定したりviの設定を行うモードです。
コマンドモードとexモードの切替えは、[:]キーと[ESC]キーで切り替えます。
コマンド | 説明 |
---|---|
i | カーソル位置から編集モードにする |
I (大文字のアイ) | 行頭に文字を追加 |
a | カーソル位置の1文字後ろから編集モードにする |
A | カーソルがある行のから編集モードにする |
o (小文字のオー) | カーソルがある行の次行を追加して編集モードにする |
O (大文字のオー) | カーソルがある行の前行を追加して編集モードにする |
h | カーソルを左に移動する(「←」キーと同じ) |
j | カーソルを下に移動する(「↓」キーと同じ) |
k | カーソルを上に移動する(「→」キーと同じ) |
l (小文字のエル) | カーソルを右に移動する(「↑」キーと同じ) |
dd | カーソルがある行を削除する |
yy | カーソルがある行をコピーする |
x (小文字のX) | カーソル位置の文字を削除(10xとやると10文字分削除する) ※クリップボードに保存される。WindowsのCtrl+[x]と同じ働き |
X (大文字のX) | カーソル位置の左の文字を削除(10Xとやると10文字分削除する ※クリップボードに保存される。WindowsのCtrl+[x]と同じ働き |
p (小文字のP) | クリップボードに行が保存されていれば、現在行の下に行を挿入する 文字列が保存されていれば、カーソルの位置の後に文字列を挿入する |
P (大文字のP) | クリップボードに行が保存されていれば、現在行の上に行を挿入する 文字列が保存されていれば、カーソルの位置の前に文字列を挿入する |
D | カーソル位置から行末までの文字を削除する |
J | 行を連結する(ただし間に1文字分のスペースが入ることに注意) |
0 (数字のゼロ) | 行の先頭へ移動する |
$ | 行の末尾へ移動する |
nG | 指定した行(n)へ移動する 例)1G ⇒ 1行目へ移動する |
gg | ファイルの先頭へ移動する |
G | ファイルの末尾へ移動する |
+ | 次の行の先頭へ移動する |
u (小文字のU) | 直前に実行したコマンドを取り消す |
U (大文字のU) | (その行から移動していない限り)その行へ行った変更を全て取り消す |
. | 直前に実行したコマンドを実行する |
w (小文字のW) | 右へ1単語分移動する |
W (大文字のW) | 右へ1単語分移動する(区切り文字を超える) |
b | 左へ1単語分移動する |
B | 左へ1単語分移動する(区切り文字を超える) |
H | 画面上端へ移動する |
M | 表示しているテキストの真ん中の行へ移動する |
L | 画面下端へ移動する |
[Ctrl]+[F] | 1画面分先へ移動 |
[Ctrl]+[B] | 1画面分前へ移動 |
[Ctrl]+[U] | 半画面分先へ移動 |
[Ctrl]+[D] | 半画面分前へ移動 |
[Ctrl]+[Y] | 1行分先へ移動 |
[Ctrl]+[E] | 1行分前へ移動 |
[Ctrl]+[G] | ファイル名、行数、位置を表示する |
[Ctrl]+[L] | 画面の再描画 |
[F1] | 大文字⇔小文字の変換 |
コマンド | 説明 |
---|---|
:w | 上書き保存する |
:w ファイル名 | ファイル名を指定して保存する |
:q | viを抜ける |
:q! | viを強制的に抜ける ※編集中のファイルを保存せずに抜ける場合等に使用。 |
:wq | ファイルを保存してviを抜ける |
ZZ | 上書き保存して終了 |
:e ファイル名 | 現在のファイルを終了して指定したファイルをviで開く |
:set number | 行番号を表示する (:set nu でも可) |
:set nonumber | 行番号を非表示にする (:set nonu でも可) |
:set ruler | ルーラーの表示 |
:set noruler | ルーラーの非表示 |
:set showmode | 入力モードの表示 |
:set noshowmode | 入力モードの非表示 |
:行番号 | 指定した行へ移動する 例):1 ⇒ 1行目へ移動する |
:%s/変更前文字列/変更後文字列/g | 全ての変更前文字列を変更後文字列へ置換する (例)文字列"foo"を"bar"へ変更する ⇒ :%s/foo/bar |
:r <ファイル名> | カーソル行の下に読込んだファイルを挿入する |
:5,10 d | 行の5行目から10行目までを削除する |
/文字列(正規表現) | 下方向へ文字列を検索する |
?文字列(正規表現) | 上方向へ文字列を検索する |
n | 検索を下方向へ繰り返す |
N | 検索を上方向へ繰り返す |
[ESC] | コマンドモードからexモードに移る |
サンプル
test.txtをviで編集する
$ vi test.txt
test2.txtファイルをviで新規作成する
$ vi test2.txt
既存ファイルにtest2.txtが存在しない前提です。
備考
- viは、visual editorの略です。
- 存在しないファイルを指定すると、新規作成モードになります。
- exモードからコマンドモードに移るには[:]キーを押します。
- コマンドモードで、コマンドを確定させるには[Enter]キーを押します。
- コマンドモードからexモードに移るには[Esc]キーを押します。
- 不正に編集終了したファイルをviで開くと以下のようなメッセージが表示される場合があります。
E325: ATTENTION Found a swap file by the name ".xxxxx.swp" ~~このような場合は、対象ファイルと同じディレクトリ内に.swpという拡張子の隠しファイルがあるのでそれを消すと表示されなくなります。
※隠しファイルを表示するには、lsコマンドの-aオプションで表示できます。