Vim学習メモ (IP)

#よく参考にするサイト
- [Vim幼稚園からVim小学校へ](http://qiita.com/hachi8833/items/7beeee825c11f7437f54)

今日から少しずつsublimeからvimへと移行していく際にググったことや勉強になったことなどを自分のモチベーションが続くまで書き続けていこうと思います。

![VOe71EA.png](https://qiita-image-store.s3.amazonaws.com/0/87666/e8e14295-5875-cc6e-08fd-a0a5cca529fa.png)

~~aside from the fact that motivation and demotivation are two sides of the same coin.~~

#basics

1. `/[word]` or `?[word]`で単語検索
2. `i`でテキスト編集開始
3. `:`でエディットモード閉じる

#Insert mode: hit `i` to initiate 
 
#Normal mode: what you hit the escape key to get to

1. `gg`でカーソルを一番上に持っていく *equivalent of command + ↑
2. `shift + g`で一番下へ *equivalent of command + ↓
3. __`w`__でカーソルを次の単語に持っていく
4. __`b`__で一単語戻る
5. `control + f`で画面単位で下へ
6. `control + b`で画面単位で上へ
7. `^`で行の始まりへ
8. `$`で行末へ
9. `f + 1st letter of word to get to`で行きたい単語の始まりへ
10. ↑の候補が複数ある場合は`;`を押して次に行ける
11. `%`で対応する括弧まで飛ぶ
12. `shift + v`で行ごと選択
13. `control + v`で自由に選択
14. `:undolist`で今まで編集履歴確認
15. __`ctrl + r`__が`ctrl + z`の反対。= redo
16. `x`でカーソル上の文字をカット
17. `dd`でカーソルがある行をまるごとカット
18. `[arbitrary num]dd`で消したい行数だけカット
19. （カットしたもしくはコピーしたものを）`p`で貼り付け
20. `yy`でカーソルがある行をまるごとコピー
21. `[num]yy`で指定した行数分だけコピー
22. `/[word to look up for]`で単語検索
23. 単語検索後`n`で下へ（下にある候補へ）`N`で上へ
24. `*`でカーソルがある位置の単語を検索（下方向）
25. `#`でカーソルがある位置の単語を検索（上方向）
26. `:s/[word]/[word to replace with]`でカーソルがある行の指定した単語/文字を書き換え
27. `:s/[word]/[w to replace with]/g`でカーソルがある行の指定した物全てを書き換え
28. `:%s/[w]/[wrw]/g`でファイル上の単語全てを書き換え
29. `:sv <file name>`でsplit layout (vertically)
30. `:tabnew`で新しいタブを作成
31. `:tabe [file name]`で指定したスクリプトを新たなタブとして開く
32. `.`でひとつ前に行った処理をもう一度
33. `ctrl+n`で入力候補を出す
34. `:%s/foo/bar/g"スクリプトないすべての`foo`を`bar`に変換
35. `:%s/foo/bar/gc"スクリプトないすべての`foo`を`bar`に変換（w/ confirmation)変えたい`foo`の数 != スクリプト内全ての`foo`のときとかに便利。
36. `ciw`で現在選択している単語を消してそのままInsert Modeへ。
37. `dd`でカーソルのある行を削除。
38. `D`で同じ行でカーソル以降の単語を全て削除。

#tricks 

1. スクリプト内のコード全選択: `gg` + `shift v` + `shift g`
2. 全選択してインデントを直す: `gg + shift+v + shift+g + =`
3. 選択箇所を一気に編集: `ctrl + v`で挿入/編集箇所を選択し`shit + i`を押して編集をして`esc`

##To comment out/uncomment blocks in Vim

####to comment out

1. `ESC`
2. `CTRL + V` (visual block mode)
3. ↓と↑でライン選択
4. `SHIFT + i`
5. `#`
6. `ESC`

####to uncomment

1. `ESC`
2. `CTRL + V`
3. ↓と↑でライン選択 or ←と→(w/ SHIFT)を使ってより広範囲に。
4. `d` or `x`
5. `ESC`

##split windows/multiple windows

- 横分割: `CTRL + W, S` *upper case s
- 縦分割: `CTRL + W, v` *lower case v
- 画面移動: `CTRL + W`, `CTRL + W`

#vimrc
1. `vi ~/.vimrc`でvimのファイルを開いてここで色々ショートカットキーの調整etcが行える
2. `set number`を追加すればライン番号が反映される
3. 例えばpythonを頻繁に使う人は`au FileType python set`でpythonのファイルを専用のキーを設定出来る。
4. vimに移行した途端に謎の`TabError: inconsistent use of tabs and spaces in indentation`が出てきた場合は[こちら](http://stackoverflow.com/questions/880668/how-to-avoid-indentation-error-after-changing-tab-stops-in-vim)
5. タブを`ctrl tab`で回れるようにしたい場合は[こちら](http://stackoverflow.com/questions/12546750/vim-keyboard-shortcut-to-move-around-tabs)

#おすすめplug-ins
1. [Vundle](http://note.kurodigi.com/vim-vundle-install/)
2. [NERD Tree](http://wonderwall.hatenablog.com/entry/2016/04/06/213105)

#ref

- [How to avoid indentation error after changing tab stops in Vim?](http://stackoverflow.com/questions/880668/how-to-avoid-indentation-error-after-changing-tab-stops-in-vim)
- [How To Show Line Numbers In vi / vim Text Editor](http://www.cyberciti.biz/faq/vi-show-line-numbers/)
- [ドットインストール](http://dotinstall.com/lessons/basic_vim)
- [How do I do redo (i.e. “undo undo”) in Vim?](http://stackoverflow.com/questions/1555779/how-do-i-do-redo-i-e-undo-undo-in-vim)
- [Vim keyboard shortcut to move around tabs](http://stackoverflow.com/questions/12546750/vim-keyboard-shortcut-to-move-around-tabs)
- [What's a quick way to comment/uncomment lines in Vim?](http://stackoverflow.com/questions/1676632/whats-a-quick-way-to-comment-uncomment-lines-in-vim)
- [How to open files in vertically/horizontal split windows in Vim from the command line](http://superuser.com/questions/486532/how-to-open-files-in-vertically-horizontal-split-windows-in-vim-from-the-command)
- [Search and replace](http://vim.wikia.com/wiki/Search_and_replace)
- [これまでのVimの勉強内容まとめ](http://qiita.com/letsspeak/items/fd33d0f2e0fb0afe4531)