Vimコマンドの文型の備忘録

たまに頭が混乱するのでメモ

#モード
|モード|機能|切替方法|
|---|---|---|
|ノーマル|カーソルの移動や文字列のヤンクなどができる|vimを起動したとき、もしくは「esc」を押す|
|挿入|文字列の挿入ができる|ノーマルモードで「i」「a」「I」「A」のいずれかを押す|
|ビジュアル|矩形選択ができる|ノーマルモードで「v」「V」「Ctrl+v」のいずれかを押す|
|exコマンド|ファイルの保存や文字列の検索ができる|ノーマルモードで「:」「/」「?」のいずれかを押す|

#文型
|文型|型|
|---|---|
|第1文型(C)| {command}|
|第2文型(M)| {motion}|
|第3文型(OM)| {operator}{motion} | 
|第4文型(SO)| {selector}{operator}|
|第5文型(OT)| {operator}{text-object} |

#品詞
|コマンド|機能|
|---|---|
|コマンド(C)|それ一つで編集（編集対象と編集方法）が完結する操作|
|モーション(M)|基本的に行を示す操作。カーソルの移動にも使う|
|オペレーター(O)|編集方法を示す操作|
|セレクター(S)|行列(矩形)の編集範囲を示す操作|
|テキストオブジェクト(T)|編集するテキストを示す操作。記号などで囲まれているものの中を編集範囲にできる|
|カウント|各文の繰り返し回数を示す操作|

# 第一文型(C)
## スクロール移動
|コマンド|機能|
|---|---|
|Ctrl-u |半画面分の上へ（アップ）|
|Ctrl-d	|半画面分の下へ（ダウン）|
|Ctrl-b|一画面分の上へ（バックフォワード）|
|Ctrl-f|一画面分の下へ（フォワード）|

## 行に対する編集
|コマンド|機能|
|---|---|
|dd|カーソルのある行デリート|
|D|カーソルから行末までデリート|
|cc|カーソルのある行カット|
|C|カーソルから行末まで行カット|
|yy|カーソルのある行までヤンク|
|Y |カーソルから行末までヤンク|
|s|カーソルのある文字を消して挿入モードに入る|
|S|カーソルのある１行を全て消して挿入モードにはいる|

## カットとプット
|コマンド|機能|
|---|---|
|x|カーソルの下の文字を消す|
|X|カーソル一つ前の下の文字を消す|
|p| カーソルの下の行にプット|
|P| カーソルの行にプット|

## 数値の編集
|コマンド|機能|
|---|---|
|Ctrl-a|カーソルのある行の数値を足す（インクリメント）|
|Ctrl-x| カーソルのある行の数値を減らす（デクリメント）|

## アンドゥ・リドゥー、 繰り返し
|コマンド|機能|
|---|---|
|u|アンドゥー|
|Ctrl-r| リドゥー|
|.|直前のコマンドを繰り返す|

## インデントの編集
|コマンド|機能|
|---|---|
|>>|インデントをつける|
|<<|インデントをなくす|
|ctrl-t|挿入モードでインデントを追加
|ctrl-d	|挿入モードでインデントを削除

## 挿入
|コマンド|機能|
|---|---|
|i|カーソル位置からインサートモードに入る
|a|カーソルの直後からインサートモードに入る
|I|行頭からインサートモードに入る
|A|行末からインサートモードに入る

# 第二文型（M)
## 基本移動
|コマンド|機能|
|---|---|
|h|カーソルを左にずらす|
|j|カーソルを下に下げる|
|k|カーソルを上に上げる|
|l|カーソルを右にずらす|
|gj|カーソルを下に下げる（折り返しにも対応している）|
|gk|カーソルを上に上げる（折り返しにも対応している）|

## 基本行移動
|コマンド|機能|
|---|---|
|+|下の行の先頭へ|
|-|上の行の先頭へ|
|_| -1 行下の最初の非空白文字に移動|
|gg|そのファイルの先頭へ(Goto)|
|G|そのファイルの末尾へ(Goto)|

## オブジェクト単位で移動
|コマンド|機能|
|---|---|
|(|文後方に|
|)|文前方に|
|{|段落後方に|
|}|段落前方に|
|[[|セクション前方に、もしくは1桁目が '}' で始まる次の場所に。 |
|]]|セクション後方に、もしくは1桁目が '}' で始まる次の場所に。 |
|[]|セクション後方に、もしくは1桁目が '}' で始まる次の場所に。 |
|][|セクション前方に、もしくは1桁目が '}' で始まる次の場所に。 |


## 行頭行末移動
|コマンド|機能|
|---|---|
|0|行の先頭へ|
|^|行の先頭へ（正規表現のアンカーと一緒）|
|$|行の末尾へ（正規表現のアンカーと一緒）|

## 単語の単位で移動
|コマンド|機能|
|---|---|
|w|次の単語の先頭に進む（ワード）|
|W|次の単語（記号では区切られれていない）の先頭に進む|
|b|次の単語の先頭に戻る（バッグ）|
|B|次の単語（記号では区切られれていない）の先頭に戻る|
|e|今の単語の末尾に進む（エンド）|
|E|今の単語（記号では区切られれていない）の末尾に進む|
|ge|前の単語の末尾に戻る（Gotoエンド）|
|gE|前の単語（記号では区切られれていない）の末尾に戻る（Gotoエンド）|

## 行内で検索して移動
|コマンド|機能|
|---|---|
|fa|次のaまで飛ぶ|
|Fa|前のaまで飛ぶ|
|ta|次のaの手前まで飛ぶ|
|Ta|前のaの次まで飛ぶ|
|;|f, F, t, Tで検索した文字を同方向に繰り返し検索する|
|,|f, F, t, Tで検索した文字を逆方向に繰り返し検索する|
|%|ついになる括弧に移動|
|/||スクリーン桁位置に移動|

## 検索して移動
|コマンド|機能|
|---|---|
|/word|文字列wordを検索（上から下へ）|
|?word|文字列wordを検索（下から上へ）|
|*|  カーソルより下の文字を検索する|
|#|  カーソルより上の文字を検索する|
|n|  次の候補に|
|N|  前の候補に|

# オペレーター(O)
## デリート・カット・ヤンク
|コマンド|機能|
|---|---|
|d|選択範囲をデリート|
|c|選択範囲をカットして挿入モードに移行する|
|y|選択範囲をヤンク|

## インデント
|コマンド|機能|
|---|---|
|>|右にシフトする|
|>|左にシフトする|
|!|外部コマンドを使ってフィルターに通す|
|=|インデント整える|

## 大文字小文字入れ替え
|コマンド|機能|
|---|---|
|~|大文字/小文字を入れ換える|
|g~|大文字/小文字を入れ換える|
|gu|小文字にする|
|gU|大文字にする|

## 折りたたみ関係
|コマンド|機能|
|---|---|
|zi|折り畳みの有効無効の切り替え|
|zf|折り畳みを作成する|
|za|折り畳みの開け閉め|
|zd|折り畳みを削除する|
|zA| 折り畳みの開け閉め（再帰） |
|zD|折り畳みを削除する（再帰）|
|zE| 全ての折り畳みを削除|
|zR| 全ての折り畳みを開く|
|zM| 全ての折り畳みを閉じる |

# 第三文型(OM)
## 単語に対する編集コマンド
|コマンド|機能|
|---|---|
|yw|カーソル下のワードをヤンク|
|cw| カーソルの下のワードをカット|
|dw|カーソル下のワードをデリート|

## 行に対する編集
|コマンド|機能|
|---|---|
|d$|カーソルから行末までデリート|
|c$|カーソルから行末までカット|
|y$ |カーソルから行末までヤンク|
|dG|カーソル行以下をデリート|
|cG|カーソル行以下をカット|
|yG|カーソル行以下をヤンク|
|ggVG |全選択|

## カッコを閉じる
|コマンド|機能|
|---|---|
| f{ zf % | {の括弧を閉じる|
|space | 選択範囲を開ける|


# セレクター(S)
|コマンド|機能|
|---|---|
|v|文字単位で選択
|Ctrl-v|ブロック単位で選択
|V|行単位で選択

# 第四文型(SO)
## 複数行のインデントの操作
|コマンド|機能|
|---|---|
|Ctrl-V j = |行を矩形選択して、「=」でインデントを揃える|

## 複数行の行頭・行末に同じ文字を挿入する
|コマンド|機能|
|---|---|
|Ctrl-v j $ A 文字入力 esc |行末同じ文字列を入れる|
|Ctrl-v I $ A 文字入力 esc |行頭同じ文字列を入れる|

## 複数行のある行又は列の文字列を削除・挿入・置換する
|コマンド|機能|
|---|---|
|Ctrl-V j d |任意の行列を削除する|
|Ctrl-v j d |任意の列を削除する|
|Ctrl-V j c 文字入力 |任意の行列を挿入する|
|Ctrl-v j c 文字入力 |任意の列を挿入する|
|Ctrl-v j i 文字入力 esc |任意の列に同じ文字列を入れる|
|Ctrl-v j d 文字入力 esc |任意の列に同じ文字列を入れる|
|Ctrl-V j d 文字入力 esc |任意の行を文字列を入れる|
|Ctrl-v r 文字入力 |任意の列を置き換えるする|
|Ctrl-V r 文字入力 |任意の行列を置き換えるする|


## 複数行削除
|コマンド|機能|
|---|---|
|Ctrl-V j I 文字入力 esc |ある列に同じ文字列を入れる|


## 選択範囲を閉じる
|コマンド|機能|
|---|---|
|Ctrl-V zf | 選択範囲を閉じる|
|space | 選択範囲を開ける|


# テキストオブジェクト(T)
## テキストオブジェクトのプレフィックス?
|コマンド|機能|
|---|---|
| {Operator} a {Text object} |対象のオブジェクとのその中身に対してオペーレーターの操作をする(a)|
| {Operator} i {Text object}  |対象のオブジェクの中身に対してオペーレーターの操作する(inner)|

## テキストオブジェクト
|コマンド|機能|
|---|---|
| w |単語を区切りそうな文字列まで|
| W | 非空白文字の連続 |
| [,(,{,<,",` | 左の記号で囲まれている文字列 |
| b | ブロック。() 等カーソル位置から直近の囲み文字の範囲(前方一致) |
| B |block ブロック。() 等カーソル位置から直近の囲み文字の範囲(後方一致)|
| t |タグ|


# 第五文型(OT)
## プレーンテキストの文字の中身消し
|コマンド|機能|
|---|---|
|dit|カーソルのある行の最初のタグの中身を消す|
|cit|カーソルのある行の最初のタグの中身を消して挿入モードへ移行する|
|diw|カーソルのある行の最初の単語の中身を消す|
|ciw|カーソルのある行の最初の単語の中身を消して挿入モードへ移行する|
|dis|カーソルのある行の最初のセンテンスの中身を消す|
|cis|カーソルのある行の最初のセンテンスの中身を消して挿入モードへ移行する|
|dip|カーソルのある行の最初のパラグラフの中身を消す|
|cip|カーソルのある行の最初のパラグラフの中身を消して挿入モードへ移行する|

## プログラミング言語の文字の中身消し
|コマンド|機能|
|---|---|
|di"|カーソルのある行の最初の"の中身を消す |
|ci"| カーソルのある行の最初の"の中身を消して挿入モードへ移行す|
|di[|カーソルのある行の最初の[の中身を消す |
|ci[| カーソルのある行の最初の[の中身を消して挿入モードへ移行す|

## 同じ文字列をの置換
|コマンド|機能|
|---|---|
|* n cw esc n . |*で見つかったワード一つ一つを置換する|
|:/%s/word/word2|wordをword2にいっぺんに置換する|


# その他の第一文型(C)
## ファイル移動
|コマンド|機能|
|---|---|
|Ctrl-o |戻る|
|Ctrl-t |進む|

## ファイル表示操作
|コマンド|機能|
|---|---|
|:e filename|filenameを現在のウィンドウで開く(:edit)
|:sp filename|filenameを横分割したウィンドウで開く(:split)|
|:vs filename|filenameを縦分割して開く(:vsplit)|
|:sv filename|filenameを横分割で読み取り専用で開く(:sview)|

## ファイル保存操作
|コマンド|機能|
|---|---|
|:w hoge.txt|hoge.txtという名前つけて保存|
|:q|ウィンドウを閉じる|
|:wq|保存して終了|
|:q!|保存せずウィンドウを閉じる|
|:qa!|保存せず全てのウィンドウを閉じる|

## ウィンドウ
|コマンド|機能|
|---|---|
|Ctrl-w h|左のウィンドウへ|
|Ctrl-w j|下のウィンドウへ|
|Ctrl-w k|上のウィンドウへ|
|Ctrl-w l|右のウィンドウへ|
|Ctrl-w _|選択中のウィンドウの最大化|
|Ctrl-w =| ウィンドウを全て同じ大きさに|
|Ctrl-w +| ウィンドウの高さを一行減らす|
|Ctrl-w -|ウィンドウの高さを一行増やす|
|Ctrl-w <|ウィンドウの幅を一文字減らす|
|Ctrl-w >| ウィンドウの幅を一文字減らす|

## タブ
|コマンド|機能|
|---|---|
|gt|次のタブへ|
|gT | 前のタブへ|


## 貼り付け方法の変更
|コマンド|機能|
|---|---|
|:set paste|ペーストモードに(オートインデントされない)|
|:set nopaste|noペーストモードに(オートインデントされる)|

## 補完(挿入モードのサブモード)
|コマンド|機能|
|---|---|
|Ctrl-x|サブモードのプレフィックス|
|Ctrl-x Ctrl-o|Omni補完表示|
|Ctrl-x Ctrl-n|局所キーワード補完(前方)|
|Ctrl-x Ctrl-p|局所キーワード補完(後方)|
|Ctrl-n|次の候補へ(補完表示中)|
|Ctrl-p|前の候補へ(補完表示中)|
|CTRL-e|補完中止| 

## ヘルプ
|コマンド|機能|
|---|---|
|:h {command}|ヘルプ|


# References
http://vim-jp.org/vimdoc-ja/
http://qiita.com/takeharu/items/9d1c3577f8868f7b07b5
http://vimdoc.sourceforge.net/htmldoc/scroll.html
http://nanasi.jp/articles/howto/editing/blockwise-operation.html
http://www.webhtm.net/vim/mode.htm
http://qiita.com/satomyumi/items/755cfbb0e97d48280775#cit
http://shinespark.hatenablog.com/entry/2015/11/12/070000
http://motw.mods.jp/Vim/command.html
:h
http://blog.carbonfive.com/2011/10/17/vim-text-objects-the-definitive-guide/
http://qiita.com/b4b4r07/items/7fc12842d03e7e46412c
http://reddog.s35.xrea.com/wiki/Vim%20%E6%8A%98%E3%82%8A%E7%95%B3%E3%81%BF.html
http://daisuzu.hatenablog.com/entry/2015/12/05/002129