vimの備忘録

自分向けの備忘録です。
vim操作を随時追加します。
([はてなブログ](http://hmu29.hatenablog.com/entry/2014/01/30/155549
)からこちらに移動しました。）

# テキストオブジェクトの選択

|keys|内容|
|:---|:---|
|ip|段落|
|ap|段落+前後どちらかの空白|
|iw|単語|
|aw|単語+前後どちらかの空白|
|is|文|

例

|keys|内容|
|:---|:---|
|vipd|ビジュアルモード  段落を削除する.|
|vipy|ビジュアルモード 段落をヤンク(コピー）する.|
|dip|段落を削除する.|
|yip|段落をヤンク(コピー）する.|
|gUaw|単語を大文字化する|
|guaw|単語を小文字化する|

# ビジュアルモード

|keys|内容|
|:---|:---|
|gv|前回の選択範囲を再選択|

# ファイル内の移動

|keys|内容|
|:---|:---|
| ' ' |直前のジャンプ位置に戻る|
| ' . |直前に変更された位置|
| g;  |直前に変更された位置（履歴を戻る）|
| g,  |直前に変更された位置（履歴を進む）|
| ctrl+o |戻る|
| ctrl+i |進む|
| * | カーソル位置の単語を下に検索 |
| # | カーソル位置の単語を上に検索 |

# カーソル移動

|keys|内容|
|:---|:---|
|ge|前の単語の末尾|

# 挿入モード中のカーソル移動、文字削除

|keys|内容|
|:---|:---|
|Ctrl+h|直前の１文字削除|
|Ctrl+w|直前の１単語削除|
|Ctrl+u|行頭まで削除|
|Ctrl+k|１文字進む|

※　シェルでも利用可能な模様。

# 挿入
|keys|内容|
|:---|:---|
|Shift+i|行頭(^)に移動して、挿入モード|
|Shift+a|行末($)に移動して、挿入モード|
|s|カーソル位置の文字を削除して、挿入モード|
|C|カーソル位置から行末までを削除して、挿入モード|
|S|カーソル行を削除して、挿入モード|

※Shift+iは行の先頭文字に移動する。(^i)　探しているのは0i...

# ウィンドウ操作

|keys|内容|
|:---|:---|
|Ctrl+w+x|ウィンドウの表示内容の入れ替え。[参考](http://thinkit.co.jp/article/123/3/)|

# コマンド

|keys|内容|
|:---|:---|
|:e!|編集した内容を破棄して、開き直す|
|:pwd|カレントディレクトリを表示する|
|:set ic|大文字小文字を無視する|
|:set noic|大文字小文字を区別する|

## args

参考 [vimgrepとQuickfix知らないVimmerはちょっとこっち来い](http://qiita.com/yuku_t/items/0c1aff03949cb1b8fe6b)

argsで指定した値を##で呼び出せる.

```vim
:ar[gs] 長いパラメータ
:grep binding ## "##は長いパラメータを指す"
:grep pry ##
```

## 置換

```sh
:範囲s /検索パターン/置換文字列/オプション
```
### 範囲

|keys|内容|
|:---|:---|
|(無指定) |当該行のみ対象
|%|ファイル全体を対象|

例
```sh
:s /error/result/ # 当該行の最初のerrorをresultに置換する
:%s /error/result/g # ファイル全体のerrorをresultに置換する
```

### オプション

|keys|内容|
|:---|:---|
||選択範囲の１つのみ置換する|
|g|選択範囲全体を置換する|
|c|置換時に確認をする。|

残念ながらxcodeのvimプラグインでは、c オプションは非対応の模様。

### ペースト

|keys|内容|
|:---|:---|
|"0p|コピーした内容をペーストする。|
|p|カーソルの１つ後ろにペーストする|
|P|カーソルの1つ前にペーストする|
|A (スペース) Ctrl+o0| カーソルの１つ後ろにスペースを１つ入れてペーストする|
|Ctrl+r {register}| 挿入モードでペースト. |
|Ctrl+r Ctrl+p {register}|挿入モードでペースト|

## 検索

|keys|内容|
|:---|:---|
|/検索ワード\c|大文字小文字を区別して検索する|

## vimgrep

参考 [vimgrepとQuickfix知らないVimmerはちょっとこっち来い](http://qiita.com/yuku_t/items/0c1aff03949cb1b8fe6b)

```vim
:vim {pattern} {file} ...
```

```利用例
:vim binding app/**/*.rb
```

# 加算・減算

|keys|内容|
|:---|:---|
|Ctrl+a|カーソル上の数値に対して+1する|
|Ctrl+x|カーソル上の数値に対して-1する|
|Ctrl+r =|挿入モードでCtrl+r = すると計算できる|

001などの0プレフィックスがついていると8進数として解釈される。

以下を設定すると10進数として解釈される。
```bash
set nrformats=
```

# スクロール

|keys|内容|
|:---|:---|
|Ctrl+u|上方向に半画面分|
|Ctrl+d|下方向に半画面分|
|Ctrl+b|上方向に１画面分|
|Ctrl+f|下方向に１画面分|
|Ctrl+e|上方向に１行分|
|Ctrl+y|下方向に１行分|

# バイナリモード

```bash
vim -b filename
```
# surround.vim

|keys|内容|
|:---|:---|
|ビジュアルモード中で:S'|選択範囲に'を付ける|
|ysiw'|iw(単語)の前後に'を挿入する|
|ds'|前後の'を削除する|
|cs'"|'を"に置換する|

# tcomment＿vim

https://github.com/tomtom/tcomment_vim

Ctrl + -を2回押す

# ソート

- :sort 昇順ソート
- :sort! 逆順ソート
- :sort u (重複削除)
- :sort n 最初に見つかる数字でソート
- :sort /\a\a\a/ r 正規表現ソート

元ネタ：[Qiita VIMで選択行をソートする](http://qiita.com/rohinomiya/items/f6c175e1f7d529cb15f0)

# vimdiff

```
]c :        - next difference
[c :        - previous difference
do          - diff obtain
dp          - diff put
zo          - open folded text
zc          - close folded text
:diffupdate - re-scan the files for differences
```

元ネタ：https://gist.github.com/mattratleph/4026987