覚えておきたい Vim コマンド 備忘録

よく忘れるvimのコマンドをまとめました。
私向けの備忘録となってます。
間違いやあらも多いのでお気をつけ下さい。

# 基本

| コマンド | 説明 |
|:-----------|:------------|
|x       |1文字削除         |
|dd(連打)     |1行切り取り |
|dd(x行目で１回目のdを押し、y行目で2回目のdを押す)|x行目〜y行目までを切り取り|
|5dd (xdd)|5(x)行削除|
|yy(x行目で１回目のを押し、y行目で2回目のyを押す)|x行目からy行目までをコピー|
|p|貼り付け|
|u|undo|
|CTRL + r|redo|
|.|直前のコマンドを実行|
|CTRL+n|補完|
|CTRL+p|前候補を検索|
|CTRL+n|次候補を検索|

# カーソルの移動

| コマンド | 説明 |
|:-----------|:------------|
|h,j,k,l|←,↓,↑,→|
|w|1単語分前へ移動|
|b|1単語分後ろへ移動|
|gg|ファイル先頭に戻る|
|Shift + g|ファイル末尾に進む|
|0|行頭へ|
|$|行末へ|
|^|行の最初の空白でない文字へ|
|5l|5文字分右へ|
|CTRL+f|ページアップ|
|CTRL+b|ページダウン|
|Shift+m|カーソルを画面の中心へ|
|f|fを押して文字を打ち込むと、カーソル行にあるその文字のところに進む。文字入力後、; を押すと戻る|
|%|(, ), {, }, [, ] カッコ移動などの対応する場所へ移動|
|mk|現在のカーソル位置をマーク|
|'k|マークした位置へ|
|d'k|現在位置からマークまでを削除|


# 見た目

## インデント

| コマンド | 説明 |
|:-----------|:------------|
|=|選択行のインデント修正|
|gg, shift+v, shift+g, =|ファイル全体のインデント修正|
|ctrl-t, ctrl-d|挿入モードでインデントを追加/削除|
|>>|インデント|
|<<|インデントを削除|
|:set shiftwidth=4|インデント幅をスペース4つ分にする|
|:set autoindent|オートインデントをON|
|:set smartindent|スマートなオートインデントをON|

## フォーマット

| コマンド | 説明 |
|:-----------|:------------|
|:%!fmt|すべての行をフォーマット|
|!}fmt|現在位置にあるすべての行をフォーマット|
|5!!fmt|次の5行をフォーマット|

## その他設定、Syntax highlightingなど

| コマンド | 説明 |
|:-----------|:------------|
|:syntax on|色付けする|
|:syntax off|色付け止める|
|:set syntax=ruby (rubyの部分は言語名)|指定した言語のモードで色付け|
|:set number|行番号の表示|
|:set nonumber|行番号の非表示|

[:set syntax={}に関してはコチラ](http://vim-jp.org/vimdoc-ja/syntax.html)


# 検索・置換・正規表現

## 検索

| コマンド | 説明 |
|:-----------|:------------|
|/lover|文字列hogeを検索（上から下へ）|
|?lover|文字列hogeを検索（下から上へ）|
|検索候補表示中に n |カーソルより下側にある検索候補に移動|
|検索候補表示中に shift+n |カーソルより上側にある検索候補に移動|
|*|今単語がある位置の単語を検索（カーソルより下側）|
|#|今単語がある位置の単語を検索（カーソルより上側）|
|/lo[vb]er|文字列の"lover"か"lober"を検索する|
|/\<love|文字列"love"から始まる単語を検索|
|/love\>|文字列"love"で終わる単語を検索|
|/\<love\>|文字列"love"を検索|
|/^love|文字列"love"から始まる行を検索|
|/love$|文字列"love"で終わる行を検索|
|/^love$|文字列"love"だけの行を検索|
|/\<….\>|4文字の単語を検索|
|/love\|kill|"love"と"kill"を検索|
|/\<\d\d\d\d\>|4桁の数字を検索|
|/^n{3}|空の3行を検索|
|:bufdo /love/|現在開いているファイル全部の中から文字列"love"を検索|

[vimでの正規表現に関してはコチラ](http://archiva.jp/web/tool/vim_regexps.html)

## 置換

| コマンド | 説明 |
|:-----------|:------------|
|:s/before/after|カーソルのある行にある最初の文字列"before"を"after"に置換（1つずつ）|
|:s/before/after/g|カーソルのある行にある文字列"before"をすべて"after"に一括置換|
|:s/before/after/gc|カーソルのある行にある文字列"before"をすべて"after"に置換。確認を表示させる|
|:%s/before/after/g|現在使っているファイルにある文字列"before"を"after"に一括置換|
|:%s/before/after/g|現在使っているファイルにある文字列"before"を"after"に置換。確認を表示させる|
|:%s;/var/home;/usr/home;gc|パス名などを置換するときは、"/"でなく、";"を区切り文字に使用|
|:63,79s /lover/killer/g|特定範囲のみ置換： 63〜79行目までの範囲にある"lover"を"killer"に一括置換|
|:%s/^/Goodbye/g|ファイル全体のすべての行の先頭に"Goodbye"を追加|
|:%s/$/\./g|ファイル全体のすべての行の末尾に"."を追加|
|:3,$s/lover/killer/g|特定範囲のみ置換： 3行目から最終行の範囲にある"lover"を"killer"に一括置換|
|:%s/ /^M/g;|ファイル全体の中からスペース（空文字）を改行(CR)に置換（改行は CTRL+vを押した後にEnterを押すと入力される）|
|:%s/GoodByeMyLove/ILoveYou/gi|ファイル全体の中から"GoodByeMyLove"を"ILoveYou"に置換する。"GoodByeMyLove"は大文字小文字関係なく検索する|
|:%s/ *$/g|ファイル全体の行末の空文字（空白、スペース）を削除|
|:%s#<[^>]+>##g|タグに囲まれたテキストは残しつつ、HTMLタグを全て削除|
|:g/love/d|"love"を含んでる行を削除|
|:v/goodbye|"goodbye"を含んでいない行だけを削除|
|:%s/^(.*)n1$/1/|同じ行が2回続いたら片方削除|
|CTRL+a|カーソル上の数字をインクリメント|
|CTRL+x|カーソル上の数字をデクリメント|
|argadd **/*.c|カレントディレクトリ以下にある.cファイルを選択|
|:argdo %s/lover/friend/gc \| update|選択されたファイルの中の文字列"lover"を"friend"に置換|
|:tabdo %s/lover/friend/g|すべてのタブに対して、"lover"を"friend"に置換|

# ファイル操作

| コマンド | 説明 |
|:-----------|:------------|
|:e filename|filenameを現在のウィンドウで開く|
|:split filename|filenameを横分割したウィンドウで開く|
|:vsplit filename|filenameを縦分割して開く|
|:sview filename|filenameを横分割で読み取り専用で開く|

画面分割については下に。

# 画面

## 画面分割

| コマンド | 説明 |
|:-----------|:------------|
|:sp|上下分割|
|:vs|左右分割|
|CTRL+w CTRL+w(CTRL+wを2回押す)|次の画面へ|
|CTRL+w ↑（矢印）|カーソルを上のウィンドウへ|
|CTRL+w _|選択中のウィンドウを最大化|
|CTRL+w =|分割したすべてのウィンドウを同じ大きさに|
|10 CTRL+w +|選択中のウィンドウを10行大きくする|
|:close|画面を閉じる|
|:hide|現在のウィンドウを閉じる|
|:only|現在のウィンドウ以外を閉じる|
|:b 2|バッファの2番目を開く|


## タブ

| コマンド | 説明 |
|:-----------|:------------|
|:tabnew|新しいタブ作成|
|:tabe filename|filenameをタブで開く|
|:tabclose|タブを閉じる|
|gt|次のタブへ|
|g shift+t|前のタブへ|
|{i}gt|i番目のタブへ|
|:tabdo %s/before/after/g|すべてのタブに対して、一括置換|
|:tabs|開いているタブをリスト表示|
|:tabo|今使っているタブ以外を閉じる|
|:tabfirst|最初のタブを表示|
|:tablast|最後のタブを表示|
|:tabm n|現在のタブをn番目へ|
|:tab ball|バッファをすべてタブで開く|

```vim
vim -p file1 file2
     open files as tabs
```

file1 file2をタブで開く


# ヴィジュアルモード


| コマンド | 説明 |
|:-----------|:------------|
|v|ヴィジュアルモードに入って一文字選択|
|shift+v|ヴィジュアルモードに入って一行選択|
|CTRL+v|矩形（くけい）選択 （複数行選択）|
|v, gg, shift+g|全選択|
|CTRL + v, I(shift + i), input words or delete, esc|矩形選択後、選択範囲の編集| 

# その他便利なコマンド

## UNIXとのインタラクション

| コマンド | 説明 |
|:-----------|:------------|
|:!pwd|pwd” を実行し、Vimに戻る|
|!!pwd|“pwd” を実行し、実行結果をファイルに挿入|
|:sh, CTRL + z|一時的にUnixへ戻る|
|$ exit, fg |Vimに戻る|

## 設定

| コマンド | 説明 |
|:-----------|:------------|
|:set tabstop=x|タブの設定|
|:set ignorecase|大文字小文字の区別をなくす|
|:set noignorecase|大文字小文字を区別する|
|:ab hoge abcdefghijklmn|abcdefghijklmnのショートカットにhgoe定義|
|Ctrl+n Ctrl+p（挿入モードで）|単語を補完|
|Ctrl+x Ctrl+l（挿入モードで）|行を補完|
|:set dictionary=hoge|“hoge” を “dictionary” に定義|

## cit

| コマンド | 説明 |
|:-----------|:------------|
|c or d or i|変更 or 削除 or 挿入|
|i or a|中身 or 全体|
|t or " or ) or ]|binding character(<>. (), tag, [])|
|cit|タグの中身を削除して入力モードに入る|
|ca"|""を含んだ全体を削除して入力モードに入る|
  

**********
OSによっては、~/.vimrc ファイルに:filetype indent on
という記述がないと、インデントがきかない場合があるらしい。
.vimrc ファイルがない場合は、ホームディレクトリ以下に .vimrc というファイルを作成して、編集してみるのもよいかと。
**********

【参考】
・http://loumo.jp/wp/archive/20080701175525/
・http://archiva.jp/web/tool/vim_regexps.html