こんにちはニシケンです。
viのコマンドをまとめてみました。
最近ではコンサルやデータ分析がメインとなっているためviを使用する機会が減ってきました。そのためいざviを使ってみるとコマンドを忘れてしまっている昨今です。
完全に忘れてしまわないうちに、本当に使えるviコマンドをまとめてリスト化してみました。
2019/08/31 複数のページにバラけていたviリファレンスをこちらのページにマージしました
カーソル移動系
エディターとしての基本中の基本であるカーソルの移動です。
ホームポジションからまったく手を離さずに操作ができるため、思考を遮られることがありません。
キー配列に癖があり、初見殺しな箇所ではありますが、筋の通った操作設計をされているためコツを掴んでしまえばこっちのものです。
行内の移動
カーソルの上下左右の移動は右手のホームポジションのみで操作できるのが最高ですね。
コマンド | 機能 |
---|---|
k | 一文字上へ移動 |
j | 一文字下へ移動 |
l | 一文字右へ移動 |
h | 一文字左へ移動 |
^ | 行の先頭へ移動 |
$ | 行の末尾へ移動 |
w | 次の単語へ移動 |
b | 前の単語へ移動 |
e | 単語の末尾へ移動 |
f[文字] | 行内の\'文字\'に進む |
F[文字] | 行内の\'文字\'に戻る |
行単位での移動
一行単位の移動ではなく、ズバッと大雑把に移動したい時に利用します。
こちらもホームポジションをベースに操作するため、少ない動作でダイナミックな移動が可能です。
特にプログラミングをする方は%の対応するカッコに移動するは便利だと思います。私はこれに感動した覚えがあります。
コマンド | 機能 |
---|---|
- | 前の行の先頭へ |
<ENTER> | 次の行の先頭へ |
H | 画面先頭行へ |
M | 画面中央行へ |
L | 画面最終行へ |
gg | ファイル先頭行へ |
G | ファイル最終行へ |
:[数字] | 指定の行へ |
% | 対応カッコに移動 |
画面スクロール
特にファイルの全体感を確認したい時に利用する操作です。
画面単位での移動なので行単位での移動よりも可読性に優れています。
特にソースレビューをする時に使うイメージです。
コマンド | 機能 |
---|---|
<CTRL>+f | 1画面分 進む |
<CTRL>+b | 1画面分 戻る |
<CTRL>+d | 半画面分 進む |
<CTRL>+u | 半画面分 戻る |
zz | 現在行が画面中央に |
zt | 現在行が画面先頭に |
テキスト編集
テキストの挿入、上書き、削除などに使用するコマンドです。
入力開始
参照用のコマンドモードからエディットモードに切り替える際のコマンドです。
各コマンドの違いはどの位置からエディットモードを始めるかとなります。
コマンド | 機能 |
---|---|
a | カーソルの右から入力開始 |
i | カーソルの左から入力開始 |
A | 行末から入力開始 |
I | 行頭から入力開始 |
o | 下に行を追加して入力開始 |
O | 上に行を追加して入力開始 |
テキストの削除
既存の文字の削除コマンドです。
基本は文字の削除ですが、どの位置をどれだけの両家スカを指定する形となります。
コマンド | 機能 |
---|---|
x | カーソルの1文字削除(del) |
X | カーソル前の1文字を削除(bs) |
[数字]x | [数字]文字を削除 |
[数字]X | 前の[数字]文字を削除 |
d^ | カーソルから行頭までを削除 |
d$ | カーソルから行末までを削除 |
dd | 1行削除 |
[数字]dd | [数字]行を削除 |
ビジュアルモード
ビジュアルモードを利用することにより、マウスを使わずに長い文字列や、行単位での選択が可能となります。
ビジュアルモードで選択することにより、コピー&ペーストや切り取り、削除、インデント処理などをまとめて行うことが可能となります。
コマンド | 機能 |
---|---|
v | カーソルの移動で文字を選択する |
V | 行単位で文字を選択する |
</CTRL>+v | カーソルの移動でボックス型で選択する |
</esc> | ビジュアルモードを終了する |
検索置換
エディターの必須機能といえば検索と置換機能と言っても過言ではないと思います。
これらの機能を正規表現を利用して行えるため非常に強力です。
コマンド | 機能 |
---|---|
/[検索文字列] | [検索文字列]を検索する |
n | 次の検索文字列に移動する |
N | 前の検索文字列に移動する |
:%s/[from]/[to]/[g] | [from]文字列を[to]文字列に置換する。[g]を追加すると一括置換となる |
外部コマンド
ふとした拍子にOSコマンドを打ちたいんだけど、ホームポジションから指を離したくない場合によく利用します。
あるコマンドの実行結果の確認や、その内容をテキストで使用したいケースが結構あるんですよね。
コマンド | 機能 |
---|---|
:![cmd] | [cmd]コマンドを実行して結果を表示する |
:r![cmd] | [cmd]コマンドを実行して結果をカーソルの位置に挿入する |
:r [ファイル名] | [ファイル名]の内容をカーソルの位置に挿入する |
q: | コマンドのヒストリーをリスト表示する。実行選択が可能 |
その他編集
テキストの入力削除以外の編集コマンドです。
特にアンドゥーとリドゥーは頻繁に利用されるコマンドです。
コマンド | 機能 |
---|---|
> | 行をインデントする |
< | 行を逆インデントする |
J | 行と下の行をくっつける |
<CTRL>+a | カーソルの数値を+1する |
<CTRL>+x | カーソルの数値を-1する |
u | アンドゥー(やりなおし) |
+r | リドゥー(やりなおしをやりなおす) |
メモリー操作
viでメモリーに保存されるのは大まかに分けてテキストか動作となります。クリックボードとマクロというような感覚でOKです。
コピペ
メモリー(ヤンク)をクリックボード的に利用するコマンド類です。コピーして貼り付けるをどの粒度で行うかをコマンドで指定します。
コマンド | 機能 |
---|---|
yy | 現在の行をコピー(ヤンク) |
[数字]yy | [数字]行をコピー |
y$ | カーソルから行末までをコピー |
p | 下の行にペースト |
P | 上の行にペースト |
dd | 現在の行をカット |
[数字]dd | [数字]行をカット |
d$ | カーソルから行末までをカット |
マクロ
メモリー(レジスター)をマクロ的に利用するコマンド類です。マクロの記憶と実行を指定することができます。
コマンド | 機能 |
---|---|
q[文字] | レジスタへ[文字]コマンドを記憶(開始) |
q | レジスタへの記憶を終了 |
@[文字] | レジスタ[文字]を実行 |
@@ | 最後に実行したレジスタを実行 |
ファイル保存操作
基本中の基本であるファイルの保存と終了についてです。
ちなみに読み込み専用で開いた際に保存したい場合は、コマンドの最後に!をつければ強制実行ができます。
ファイルの保存
ファイルの保存についてです。上書きか、別名保存、となります。
コマンド | 機能 |
---|---|
:w | 上書き保存 |
:w! | 上書き保存 強制的に |
:w [ファイル名] | 別名で保存 |
:w! [ファイル名] | 別名で保存 強制的に |
ファイルの終了
ファイルを閉じてviを終了する際のコマンドです。
終了する際は保存して終了するか、保存せずに終了するか、の2択となります。
また、ファイルを修正して修正を破棄して終了する際には強制終了の!が必要となります。
コマンド | 機能 |
---|---|
:q | 保存せずに終了 |
:q! | 保存せずに終了 強制的に |
:wq | 保存して終了 |
:wq! | 保存して終了 強制的に |
複数ファイルの操作
ここからが若干、難易度が上がります。
vi [ファイル名]
コマンドでviを実行中でもファイルの操作が可能です。
ファイルのオープン
:e
コマンドは現在開いているファイルの再読み込みを行います。!を追加する場合は今までの変更を破棄して再読み込みとなります。
:e [ファイル名]
の場合は指定したファイル名を新たに表示します。その際に開いていたファイルはバックグラウンドで実行しているため破棄されることはありません。このあとのファイル遷移コマンドで再表示が可能となります。
コマンド | 機能 |
---|---|
:e | 現在のファイルを再読み込み |
:e! | 現在のファイルを再読み込み 強制的に |
:e [ファイル名] | ファイルを別途開く(複数ファイルモード) |
:e![ファイル名] | ファイルを別途開く 強制的に |
ファイルの遷移
:e [ファイル名]
で開いた複数のファイル(表示されているのは1ファイルのみ)の切り替えを行います。
コマンド | 機能 |
---|---|
:ls | バッファ(ファイル)一覧を表示 |
:bn | 次のバッファ(ファイル)を表示 |
:bp | 前のバッファ(ファイル)を表示 |
:bd | バッファを閉じる |
カレント操作
現在開いているカレントディレクトリ情報の参照となります。
ファイルを新たに引く場合はカレントディレクトリからの相対パスを利用して開く形となります。
コマンド | 機能 |
---|---|
:cd [path] | カレントを[path]に移動する |
:cd %:h | カレントを現在のファイルのあるpathへ移動する |
:pwd | カレントのpathを表示する |
ウインドウ表示
viでは画面(ウインドウ)の分割が可能です。分割したウインドウで複数のファイルを表示して便利に使いましょう。一覧性が向上します。
やはり、viなので手をホームポジションから話すことなく、画面の上下左右分割が自由自在です。
ウインドウの分割
画面の上下左右の分割ができます。左右も上下も上限は有りません。好きなだけ分割できます。編集ウインドウ(カレントウインドウ)の移動も</CTRL>キーを組み合わせて行うことができます。
</CTRL>とwキーの同時押しを連打すると次のウインドウに切り替わり、</CTRL>とwキーの同時押しの直後に{h,j,k,l}を押すと上下左右に移動します。
コマンド | 機能 |
---|---|
:sp | 上下に画面を分割 |
:vsp | 左右に画面を分割 |
<CTRL>+w <CTRL>+w | ウインドウを順番に移動する。2回押す |
<CTRL>+w {h,j,k,l} | ウインドウを{上,下,左,右}に移動する。連続で押す |
ウインドウの操作
不要になったウインドウの削除やサイズの変更を行います。
ウインドウサイズの増減のキーにある最後の+と-はキーボードのキーとなります。
コマンド | 機能 |
---|---|
:q | ウインドウを閉じる |
:qall | ウインドウを閉じる すべて |
:qonly | ウインドウを閉じる 自分以外 |
<CTRL>+w + | ウインドウサイズを増やす |
<CTRL>+w - | ウインドウサイズを減らす |
設定コマンド
これまでの操作コマンドとは異なり、これらは設定コマンドとなります。エディターとしてどう振る舞うかの指定が可能です。
注意しないといけないのは、これらの設定はviを閉じると無効となることです。
これらの設定をデフォルト値にするには設定ファイルの記載が必要となります。
コマンド | 機能 |
---|---|
:set num | 行数を表示する |
:set nonum | 行番号を表示しない |
:set ruler | カーソルの位置が右下に表示される |
:set wrap | 長いテキストの折返し |
:set showmatch | 対応するカッコなどをハイライト表示する |
:set matchtime=3 | 対応カッコのハイライトを3秒にする |
:set autoindent | 改行時のインデントをONにする |
:set shiftwidth=4 | インデントの空白数を4にする |