vimのメモ晒し

予告通り、Vimを使い始めた時から書きためたメモを晒します!
主にショートカット集といった感じです。
少しでもお役にたてたら嬉しいです!


もっと整形してからUPしようかと思いましたが、そう思ってると公開できそうにないので、この形で勘弁を。
間違いがあったらゴメンナサイ。

オススメ

普段Vimを使ってる人が「あ、こんな機能あったんだ」となりそうなオススメは、次のあたりです。
とりあえず先に抜き出してみました。

{       ノーマルモード。パラグラフ頭へ移動。
}       ノーマルモード。パラグラフ末尾へ移動。
C-y     ノーマルモード。カーソル位置をそのままに上へ。
C-e     ノーマルモード。カーソル位置をそのままに下へ。
gi      ノーマルモード。最後に挿入モードを抜けた場所に戻って挿入モードへ。
[I      ノーマルモード。カーソル上の単語のリストを表示。
C-a     ノーマルモード。カーソル下にある数値に+1する。(デフォルトは8進数。:set nrformats-=octalで10進数になる)
C-x     ノーマルモード。カーソル下にある数値に-1する。

ap      ヴィジュアルモード。パラグラフを選択。(次の段落まで)
i       ヴィジュアルモード。パラグラフを選択。(その段落のみ)
u       ヴィジュアルモード。選択範囲の大文字を小文字に。
U       ヴィジュアルモード。選択範囲の小文字を大文字に。

C-y     挿入モード。前の行の文字を挿入。
C-e     挿入モード。後の行の文字を挿入。

ノーマルモード

ここからが自分メモの内容です。

○カーソル移動
        h       左へ。
        j       下へ。
        k       上へ。
        l       右へ。
        w       次の単語へ。
        e       単語の末尾へ。
        gg      文書の先頭へ。
        gg   行目へ。
        G       文書の末尾の行へ。
        0       行頭へ移動。
        _       行頭へ移動。(インデントを考慮する)
        $       行末へ移動。
        {       パラグラフ頭へ移動。
        }       パラグラフ末尾へ移動。

        H       ウィンドウ上部の行へ移動。
        M       ウィンドウ中間の行へ移動。
        L       ウィンドウ下部の行へ移動。
        zt      カーソル位置を画面上部へ。
        zz      カーソル位置を画面中央へ。
        zb      カーソル位置を画面下部へ。
        C-y     カーソル位置をそのままに上へ。
        C-e     カーソル位置をそのままに下へ。

        `.      最後に変更した場所に移動。
        `"      前のファイルから動いた時のカーソル位置へ移動。

        //ジャンプリストは、「g」や検索コマンドでジャンプしたときにスタックされていく。
        ``      1つ前のジャンプ位置に。もう一度押すと、元の位置に。
        C-o     1つ前のジャンプ位置に。
        C-i     1つ後のジャンプ位置に。
        :jump   ジャンプリストの表示

        gt      次のタブへ。
        gT      前のタブへ。

○マーク
        m    カーソル位置にという名前のマークをつける。(が大文字の場合はグローバル)
        `    マークにジャンプする。
        '    マークの先頭にジャンプする。
        :marks  マーク一覧を表示する。


○挿入・上書きモードへ
        i       カーソル位置から挿入モードへ。
        I       カーソル行の先頭から挿入モードへ。
        a       カーソルの次の文字から挿入モードへ。
        A       カーソル行の末尾から挿入モードへ。
        o       カーソル行の後に行を挿入して挿入モードへ。
        O       カーソル行の前に行を挿入して挿入モードへ。
        s       カーソル位置の文字を削除して挿入モードへ。(clと同じ)
        S       カーソル行の内容を削除して挿入モードへ。(ccと同じ)
        c    の位置まで削除して挿入モードへ。にはカーソル移動に使うwや$が使える。
        C       カーソル位置から行末まで削除して挿入モードへ。(c$と同じ)
        gi      最後に挿入モードを抜けた場所に戻って挿入モードへ。

        R       上書きモードへ。
        r    カーソル上の文字をに置き換え、通常モードへ。


○検索・置換
        >行中での検索(カーソル移動)
        f    カーソル以降のまで移動。 ex.「2fc」とすると、2つ目の「c」まで移動。
        F    カーソル以前のまで移動。
        t    カーソル以降のの一字前まで移動。
        T    カーソル以前のの一字後まで移動。
        ;       直前のf/F/t/Tを繰り返す。

        ex.「dfc」とすると、現在の位置から最初の「c」の文字までをを削除。
        ex.「>テスト」という行で、カーソルが末尾にあり、「>」以外を削除したい時は、「dT>」とすればよい。

        >ファイル内の検索
        /      カーソルより後方のを検索。
                        末尾に「\c」をつけると小文字大文字無視。
                        末尾に「\C」をつけると小文字大文字チェック。(詳しくはヘルプの「pattern-overview*」参照)
        ?      カーソルより前方のを検索。
        n       前回の「/」or「?」検索を繰り返す。
        N       前回の「/」or「?」検索を逆方向に繰り返す。

        *       カーソル上の単語を、カーソルより後方を検索。(単語単位の検索)
        #       カーソル上の単語を、カーソルより前方を検索。(単語単位の検索)
        g*      カーソル上の単語を、カーソルより後方を検索。(単純検索)
        g#      カーソル上の単語を、カーソルより前方を検索。(単純検索)
        [I      カーソル上の単語のリストを表示。
        ]I      カーソル以前の、カーソル上の単語のリストを表示。

        memo:
                全ての検索・ジャンプは、引数として使える。
                ex.「d/^:」 次の「:」まで全部削除。
                ex.「y/:memo/;?>」 カーソル位置から、次の「:memo」の手前の「>」までヤンク。    //「;」が区切り文字?

        >置換
        :%s///gc      に置換
        :%s///gn           ファイル中のの数をカウントする。


○削除・コピー・レジスタ
        >削除
        d    の位置まで削除。には、「$」など、位置を指定するコマンドが使える。
                dj      現在の行と次の行2行削除。
                dk      現在の行と前の行2行削除。
        dd      1行削除。最初に行数を数字で指定することもできる。
        D       カーソル位置から行末まで削除。

        >コピー
        y    の位置までコピー。には、「$」など、位置を指定するコマンドが使える。
                yj      現在の行と次の行2行コピー。
                yk      現在の行と前の行2行コピー。
        yy      1行コピー。最初に行数を数字で指定することもできる。
        "y   レジスタにコピー。はa〜z。
        p       直後にペースト。
        P       直前にペースト。
        "p   レジスタをカーソル位置の直後にペースト。
        "P   レジスタをカーソル位置の直前にペースト。

        >レジスタ
        :reg    レジスタの一覧表示。


○折りたたみ
        zf   折り畳みを作成する。はモーションによる範囲指定。(ヴィジュアルモードでも使用可能)
        zF   行折りたたむ。
        zd      カーソル行にある折り畳みを1つ削除する。
        zD      カーソル行にある折り畳みを全て削除する。
        zE      ウィンドウにある折り畳みを全て削除する。
        zo      カーソル行にある折り畳みを1つ開く。
        zO      カーソル行にある折り畳みを全て開く。
        zc      カーソル行にある折り畳みを1つ閉じる。
        zC      カーソル行にある折り畳みを全て閉じる。
        za      カーソル行にある折り畳みを1つ開く/閉じる。
        zA      カーソル行にある折り畳みを再帰的に開く/閉じる。

        zr      全ての折り畳みを1階層開く。
        zR      全ての折り畳みを開く。
        zm      全ての折り畳みを1階層閉じる。
        zM      全ての折り畳みを閉じる。

        zi      折りたたみの有効/無効。

        :set foldmethod=indent  インデントで折りたたみを自動作成する。
        :set foldmethod=marker  マーカー(デフォルトは{{{内容}}})で折りたたみを自動作成する。


○ウィンドウ操作
        C-w C-s ウィンドウを分割して縦に並べる。
        C-w C-v ウィンドウを分割して横に並べる。
        
        C-w C-h 分割してある左のウィンドウにカーソル移動。(C-w hでも可)
        C-w C-j 分割してある下のウィンドウにカーソル移動。(C-w jでも可)
        C-w C-k 分割してある上のウィンドウにカーソル移動。(C-w kでも可)
        C-w C-l 分割してある右のウィンドウにカーソル移動。(C-w lでも可)
        
        C-w C-w 分割してある次のウィンドウにカーソル移動。(C-w wでも可)
        C-w C-r 分割ウィンドウの入れ替え。


○その他
        C-a     カーソル下にある数値に+1する。(デフォルトは8進数。:set nrformats-=octalで10進数になる)
        C-x     カーソル下にある数値に-1する。
        >>      右にインデント。
        <<      左にインデント。
        gf      カーソル下にあるファイル名のファイルをカレントディレクトリから開く。
                「set suffixesadd=.<拡張子>」で拡張子の補完ができるようになる。
                C-w f   画面分割で開く。(C-W C-Fでも可)
                C-w gf  新しいタブで開く。
        gF      カーソル下にあるファイル名のファイルをカレントディレクトリから開く。(行数指定)
                C-w F   画面分割で開く。(C-W C-Fでも可)
                C-w gF  新しいタブで開く。
        gv      最後にヴィジュアルモードで選択した範囲を再選択する。
        .       直前の操作を繰り返す。

ヴィジュアルモード

○選択
        ap              パラグラフを選択。(次の段落まで)
        ip              パラグラフを選択。(その段落のみ)
        iB              {}内を選択。
        ib              ()内を選択。

○整形
        >       選択行を右にインデント
        <       選択行を左にインデント
        =       インデントを整形。
        ~       選択範囲の小文字・大文字を入れ替える。
        u       選択範囲の大文字を小文字に。
        U       選択範囲の小文字を大文字に。

挿入モード

C-a     前回の挿入モードで入力した内容を挿入する。
C-t     タブインデント。
C-d     逆タブインデント。
C-y     前の行の文字を挿入。
C-e     後の行の文字を挿入。
C-r=    その後に入力した計算結果を挿入。

C-o     ノーマルモードとして1つだけコマンドを実行し、挿入モードに戻る。

C-g C-j 1行下へ。(C-o jと同じ)
C-g C-k 1行上へ。(C-o kと同じ)

コマンドウィンドウ

C-f     コマンドの履歴表示。(C-cでコマンド入力に戻る)
C-c     ノーマルモードに戻る。
C-p     コマンドの履歴を戻る。
C-n     コマンドの履歴を進む。

C-r +   クリップボードの内容をペースト。
C-r  レジスタをペースト。

C-d     直前の内容からの候補を全て表示する。

grep・QuickFix

検索結果は、QuickFixのエラーリストとして扱われる。
(コンパイルのエラーなどのリストと同じなので“エラー”扱いになっている?)

:vim /<検索ワード>/ <対象ファイル>
        <対象ファイル>はスペース区切りで複数指定可能。
        :lvimでQuickFixでなくロケーションウィンドウを使用する。
cn      QuickFixの次の検索結果へ。
cN      QuickFixの前の検索結果へ。
cope[n] QuickFixを開く。
ccl     QuickFixを閉じる。
col     古いエラーリストに移動。
cnew    新しいエラーリストに移動。

lope[n] ロケーションウィンドウを開く。
lcl     ロケーションウィンドウを閉じる。

tags関連

C-]             タグジャンプ
C-t             タグジャンプを戻る

補完機能

C-n     カーソル位置より前方検索して補完。補完候補表示中に押すと、次の候補へ。
C-p     カーソル位置より後方検索して補完。補完候補表示中に押すと、前の候補へ。
C-x C-k 辞書補完。(事前に:set dictionary=fileで辞書ファイルを登録しておく必要がある)

C-x C-l 行全体補完
C-x C-] タグ補完
C-x C-f ファイル名補完
C-x C-i パスパターン補完
C-x C-d マクロ名の補完(?)
C-x C-v コマンドライン補完
C-x C-n 局所ワード補完
C-x C-p 局所ワード補完
C-x C-e 上スクロール(補完機能じゃないけど)
C-x C-y 下スクロール(補完機能じゃないけど)

よく使うコマンド

:set hlsearch   検索を強調表現。
q:              コマンドの履歴表示。
:noh            現在の検索ハイライトを消す(次の検索時にはONになる)

たまに使うコマンド

:set expandtab          タブをスペースで入力する。「noexpandtab」でタブのまま。
:set imi=2 ims=2        日本語入力をインサートモード時と検索時、デフォルトでONに。
:set imi=0 ims=0        日本語入力をインサートモード時と検索時、デフォルトでOFFに。
:set filetype=     開いているファイルのファイルタイプを強制設定。
:set syntax=       開いているファイルをの強調表現で表示する。
:set syntax=            開いているファイルの強調表現をすべてOFFに。
:set ro                 開いているファイルを今だけ読み取り専用にする。
                        (:set noroで解除)
:set autoread           他プログラムで文書が変更された時に、自動的に更新する。
                        これを指定しないと、1回ごとに更新を確認してくる。
                        また、vimgrep時に古いデータで取得する場合がある。
                        他ソフトで編集していて、vimgrepを頻繁に使う際には指定すると良い。
:set complete+=k        辞書も検索で引っかかるようにする。

:%retab                 現在のタブモードで置換しなおす。
                       「:set expandtab」の後に実行すると、タブが全てスペース化。
:Zenkaku                その行を全て全角にする。
:so %                   開いているファイルをコマンドとして読み込む。
                        vimrcで実行すると再起動しなくても反映できる。(ただし今までの設定も消さないので完全再現ではない)
:e                 カレントディレクトリにあるファイルを簡易表示。

:!                 コマンドプロンプトコマンドを実行の後、Vimに戻る。
!!                 コマンドプロンプトコマンドの実行結果を挿入。
!                  コマンドをフィルタとして使用。ヴィジュアルモード限定。
                        選択した範囲を引数としてコマンドを実行し、選択範囲を実行結果に置き換える。

:sh[ell]                        シェルの起動。
:exe[cute]              引数をEXコマンドとして実行。
                        ex)
                        :exe "e" $MYGVIMRC      //スペースで引数を区切ると、スペースを挟んで連結してくれる
                        :exe "echo " "hello" "world"
                        :exe "e " . $MYGVIMRC   //"."で連結すると、スペースを挟まずに連結される

その他

○ファイルエクスプローラ
        i               詳細表示。
        x               関連付けされたアプリケーションで開く。
        -               ひとつ上のディレクトリへ。

○ヘルプ
        :h           ヘルプのの項目を表示する。
        :helpgrep    ヘルプに対してgrepをかける。

その他面白機能

gR      仮想置換モード。画面上の文字幅で置換を行う。タブ文字などが使われている場合に違いが現れる。
        ↓そこから……
        C-t     カーソル後を残してタブインデント
        C-d     カーソル前をタブインデント。ただし、インデント前の文字も残る。

Tips

レジスタ%に現在編集中のファイル名が入っている。
・コマンドラインで%と打つと、編集中のファイル名に展開される。%<で拡張子抜きのファイル名。
・ファイルパスは「/**/」を挟むと以下の階層を再帰的に検索できる。
・コマンドモードでは色々便利。
 例えば「:e」コマンドでは、「./**/te」などと打った状態でをすると
 ファイル名の先頭が「te」のファイルの一覧が取得できたりと、便利に使うことができる。

調べるたびに新たな発見があるVimが好きw