viコマンド（vimコマンド）リファレンス



## 起動

    基本
    $ vi ファイル名    ...指定して起動  
    $ vi ファイル名1 ファイル名2 … ファイル名n    ...複数ファイル起動  
    $ vi -R ファイル名 or $ view ファイル名   ...読み込み専用で起動

    初期表示位置を指定して起動
    $ vi + ファイル名    ...最後の行から表示   
    $ vi +行数 ファイル名    ...指定行から表示
    $ vi +/文字列 ファイル名    ...文字列が最初に見つかった場所から表示

    その他
    $ vi -r ファイル名   ...壊れたファイルをリカバリする

## カーソル移動

    1文字移動
    [←] or [h] or [BackSpace]
    [→] or [l] or [Space]
    [↑] or [k] or [Ctrl]+[p]
    [↓] or [j] or [Ctrl]+[n]

    数字指定移動
    数字[←] or 数字[h] or 数字[BackSpace]
    数字[→] or 数字[l] or 数字[Space]
    数字[↑] or 数字[k] or 数字[Ctrl]+[p]
    数字[↓] or 数字[j] or 数字[Ctrl]+[n]

    行移動
    [^]    ...現在行の先頭位置へ
    [$]    ...現在行の末端位置へ
    [G]    ...最終行の先頭位置へ
    [-]    ...前行の先頭位置へ
    [Enter]    ...次行の先頭位置へ
    :数字    ...指定行へ

    移動
    [w]    ...1語次へ
    [b]    ...1語前へ
    [e]    ...単語末尾へ

## 画面スクロール

    画面移動
    [H]    ...画面先頭へ(H: Header の意味)
    [M]    ...画面中央へ(M: Middle の意味)
    [L]    ...画面最終行へ(L: Lower の意味)

    1画面分
    [Ctrl]+[f]			… (f: Forward の意味)
    [Ctrl]+[b]			… (b: Back の意味)

    半画面分
    [Ctrl]+[d]			… (d: Down の意味)
    [Ctrl]+[u]			… (u: Up の意味)


## 終了

    終了
    :q    ...書込みを行わず終了(quit の意味)
    :q!    ...書込みを行わず強制終了
    :wq    ...書込み後終了
    :wq!    ...書込み後強制終了

## ファイル操作

    書込み (上書き)
    :w    ...書込み保存(w: write の意味)
    :w!    ...強制書込み
    :w ファイル名    ...別名で書込み
    :w! ファイル名     ...別名で強制書込み
    :数字,数字 w     ...n行目からn行目までを保存

    複数ファイルを編集中に
    :n    ...次のファイルの編集に移る(n: next の意味)
    :n!   ...次のファイルの編集に強制的に移る
    :rew    ...先頭のファイルに移る
    :arg    ...現在何番目のファイルを編集中かを確認
    :args    ...編集中ファイルの一覧を確認
    :rewind   ..現在のファイルの変更内容を保存して、リストの最初から編集をやり直す
    :rewind!    ...現在のファイルの変更内容を保存しないで、リストの最初から編集をやり直す
    :e#   ...直前の編集ファイルに戻る

    読み込み
    :e     ...現在開いているファイルを再度読込み(e: edit の意味)
    :e!     ...現在開いているファイルを再度強制読込み
    :e ファイル名    ...ファイルを編集用に読込み
    :e! ファイル名    ...ファイルを編集用に強制読込み

## 編集

    開始
    [a]   ...カーソルの右から入力開始(a: Add の意味)
    [A]   ...行末から入力開始
    [i]   ...カーソルの左から入力開始(i: Insert の意味)
    [I]   ...行頭から入力開始
    [o]   ...現在の行の下に１行挿入し、その行頭から入力開始
    [O]   ...現在の行の上に１行挿入し、その行頭から入力開始
    ＊入力モードに入る前に入力済みの文字が挿入される

    挿入
    :r    ...現在行の直下に現在のファイルの内容を挿入(r: read の意味)
    :r ファイル名    ...現在行の直下に別ファイルの内容を挿入
    :r! コマンド    ...現在位置の直後にシェルコマンドの結果を挿入(ex: !!hogehoge)

## 削除

    削除
    [x]   ...カーソルの文字を1文字削除
    数字[x]   ...カーソルから後ろに指定数分削除
    [X]   ...カーソル直前の文字を1文字削除
    数字[X]   ...カーソル直前の文字を指定数分削除

    行削除
    [D]   ...カーソルから行の終端までの文字を削除
    [d$]    ...カーソルから行の最後までを削除
    [d^]    ...カーソルから行の先頭までを削除    
    [dd]    ...カーソルの行を1行削除
    数字[dd]    ...カーソルの行をn行削除

    :行番号[d]   ...指定行削除
    :開始行,終了行[d]   ...指定範囲行削除
    :g/文字列/d    ...指定文字列のある行を全て削除

    ワード削除
    [dw]    ...1ワード削除(ワード：前後を空白かTABに挟まれた文字列)
    数字[dw]    ...指定ワードを削除
    [de]    ...1ワード削除(dwと異なる点は区切り文字(空白 or TAB)を削除しない)
    数字[de]    ...指定ワードを削除
    [df文字列    ...カーソルから最初に見つかった指定文字列までを削除

## コピー&ペースト

    行コピー
    [yy]    ...カーソル位置の現在行をコピー
    行数[yy]    ...カーソル位置の現在行から指定行数分をコピー

    ワードコピー
    [yw]    ...カーソル位置から1ワード分コピー
    数字[yw]    ...カーソル位置から指定ワード分コピー

    その他コピー
    [yl]    ...1文字分コピー
    [y0]    ...カーソル位置から行頭までコピー
    [y$]    ...カーソル位置から行末までコピー

    ペースト
    [p]    ...コピーした内容をカーソルの後にペースト
    [P]    ...コピーした内容をカーソルの前にペースト


## 検索

    [/]文字列    ...カーソルの後方に検索を行う
    [?]文字列    ...カーソルの前方に検索を行う
    [n]文字列    ...次の検索該当文字列へ([/]→後方に [?]→前方に)
    [N]文字列    ...前の検索該当文字列へ

## 置換

    1文字だけ
    [r]文字     ...カーソルの文字を1文字だけ違う文字に変更(r: Replace の意味)
    数字[r]文字    ...カーソルから指定文字分を違う文字に変更
    [R]    ...カーソルからESCを押すまでの文字を上書き更新

    ワード(c系)
    [cw]    ...カーソルから1ワード分をESCを押すまで入力した文字に置換
    数字[cw]    ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換    
    [ce]    ...カーソルから1ワード分をESCを押すまで入力した文字に置換(区切り文字を置換しない)
    数字[ce]    ...カーソルから指定ワード数分をESCを押すまで入力した文字に置換
    [cf]文字列    ...カーソルから最初に見つかった指定文字列までをESCを押すまで入力した文字に置換
    [C]      ...カーソルから行の最後までをESCを押すまで入力した文字に置換

    指定(s系)
    [s]    ...カーソルの文字をESCを押すまで入力した文字に置換
    数字[s]    ...カーソルから指定文字数分をESCを押すまで入力した文字に置換
    [S]    ...カーソルから行の最後までをESCを押すまで入力した文字に置換
    :s/文字列1/文字列2/    ...カーソル行で最初の「文字列1」のみを「文字列2」に置換する(s: Substitute の意味)
    :s/文字列1/文字列2/g    ...カーソル行の「文字列1」を全て「文字列2」に置換する(g: Global の意味)    
    :s/文字列1/文字列2/c    ...カーソル行で最初の「文字列1」を「文字列2」に置換する前に確認が入る(c: Cheange の意味)
    :行数s/文字列1/文字列2/    ...指定行で最初の「文字列1」のみを「文字列2」に置換する
    :行数s/文字列1/文字列2/g    ...指定行で「文字列1」を全て「文字列2」に置換する
    :%s/文字列1/文字列2/g    ...全ての行で「文字列1」を全て「文字列2」に置換する
    :開始行,終了行s/文字列1/文字列2/    ...指定範囲行内で各行の最初の「文字列1」を「文字列2」に置換する
    :開始行,終了行s/文字列1/文字列2/g     ...指定範囲行内の「文字列1」を全て「文字列2」に置換する
    :開始行,$s/文字列1/文字列2/g     ...指定開始行から最終行までの「文字列1」を全て「文字列2」に置換する
    :&, &   ...直前のsコマンドの繰り返し

    小文字、大文字
    ~      ...カーソル行の大文字⇔小文字を置換 (置換完了のESCは不要)
    数字~    ...カーソルから指定文字分の大文字⇔小文字を置換 (置換完了のESCは不要)

    結合(改行をスペースに置換)
    [J]   ...現在行と直下の行を結合する
    数字[J]   ...現在行から指定行数下を結合する

## 取り消し

    [u]    ...直前の操作をやめる(u: Undo の意味)
    [U]    ...行全体に操作を取りやめる
    [.]   ...直前の変更操作の繰り返し
    Ctrl-[R]    ...取り消しの取り消し


## ウインドウ操作

    :sp ファイル名   ...ウインドウを横に分割
    :vs ファイル名   ...ウインドウを縦に分割
    :q,:only    ...カーソルのあるウインドウ以外を全部閉じる
    :new    ...空の横ウインドウを開く
    :vnew   ...空の縦ウインドウを開く
    Ctrl-w w    ...次のウインドウに移動
    Ctrl-w p    ...前のウインドウに移動
    Ctrl-w o    ...現在のウインドウ以外を閉じる

## バッファ

    :ls   ...バッファリストの表示
    :b    ...バッファ	バッファを表示
    :bn   ...次のバッファを表示
    :bp   ...前のバッファを表示
    :bd   ...バッファ削除 バッファ番号指定は :bd 5などで指定可能

## その他
    :set nu   ...行番号を表示する
    :set nonu   ...行番号の表示をやめる
    :set showmode   ...現在のモードを表示する
    :set showmatch    ...()や{}の対応の報告をするようになる
    :set ignorecase   ...大文字/小文字の区別なく検索する
    :set autoindent   ...自動インデントモード
    :set noautoindent   ...自動インデントモードをやめる
    :set all      ...すべてのオプションを表示する
    :set ruler     ...ルーラー（右下に表示される行・列の番号）を表示する
    :set tabstop=数値     ...タブの大きさを半角スペース数で指定
    :set nowrap         ...折り返し表示しない
    :set history=数値     ...コマンド履歴の保存数
    :set backup       ...ファイルを保存する時にバックアップファイルを作成する
    :set nobackup       ...バックアップファイルを作成しない
    :syntax on,off    ...カラー表示のオンオフ
    :Tutorial   ...30分程度のVi利用方法のチュートリアル
    :vert diffsplit ファイル名   ...今のファイルと、他のファイルとの差分を取るコマンド 

# 役に立ったらいいね！＆ストックすると喜びます🤗