コーディングが10倍捗る! viコマンド リファレンス

テック

こんにちはニシケンです。
viのコマンドをまとめてみました。

最近ではコンサルやデータ分析がメインとなっているためviを使用する機会が減ってきました。そのためいざviを使ってみるとコマンドを忘れてしまっている昨今です。
完全に忘れてしまわないうちに、本当に使えるviコマンドをまとめてリスト化してみました。

2019/08/31 複数のページにバラけていたviリファレンスをこちらのページにマージしました

ad

カーソル移動系

エディターとしての基本中の基本であるカーソルの移動です。
ホームポジションからまったく手を離さずに操作ができるため、思考を遮られることがありません。
キー配列に癖があり、初見殺しな箇所ではありますが、筋の通った操作設計をされているためコツを掴んでしまえばこっちのものです。

行内の移動

カーソルの上下左右の移動は右手のホームポジションのみで操作できるのが最高ですね。

コマンド機能
k一文字上へ移動
j一文字下へ移動
l一文字右へ移動
h一文字左へ移動
^行の先頭へ移動
$行の末尾へ移動
w次の単語へ移動
b前の単語へ移動
e単語の末尾へ移動
f[文字]行内の\'文字\'に進む
F[文字]行内の\'文字\'に戻る

行単位での移動

一行単位の移動ではなく、ズバッと大雑把に移動したい時に利用します。
こちらもホームポジションをベースに操作するため、少ない動作でダイナミックな移動が可能です。
特にプログラミングをする方は%の対応するカッコに移動するは便利だと思います。私はこれに感動した覚えがあります。

コマンド機能
-前の行の先頭へ
<ENTER>次の行の先頭へ
H画面先頭行へ
M画面中央行へ
L画面最終行へ
ggファイル先頭行へ
Gファイル最終行へ
:[数字]指定の行へ
%対応カッコに移動

画面スクロール

特にファイルの全体感を確認したい時に利用する操作です。
画面単位での移動なので行単位での移動よりも可読性に優れています。
特にソースレビューをする時に使うイメージです。

コマンド機能
<CTRL>+f1画面分 進む
<CTRL>+b1画面分 戻る
<CTRL>+d半画面分 進む
<CTRL>+u半画面分 戻る
zz現在行が画面中央に
zt現在行が画面先頭に

テキスト編集

テキストの挿入、上書き、削除などに使用するコマンドです。

入力開始

参照用のコマンドモードからエディットモードに切り替える際のコマンドです。
各コマンドの違いはどの位置からエディットモードを始めるかとなります。

コマンド機能
aカーソルの右から入力開始
iカーソルの左から入力開始
A行末から入力開始
I行頭から入力開始
o下に行を追加して入力開始
O上に行を追加して入力開始

テキストの削除

既存の文字の削除コマンドです。
基本は文字の削除ですが、どの位置をどれだけの両家スカを指定する形となります。

コマンド機能
xカーソルの1文字削除(del)
Xカーソル前の1文字を削除(bs)
[数字]x[数字]文字を削除
[数字]X前の[数字]文字を削除
d^カーソルから行頭までを削除
d$カーソルから行末までを削除
dd1行削除
[数字]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にする

コメント