社内で喋ったVim勉強会(知らなそうなコマンドとかpluginについて)

社内でVimの勉強会を実施したのでQiitaTeamには投稿していましたが、別にPrivateな内容でもないのでこっちにも投稿しておきます。

尚、plugin周りは大幅に追記しています。(社内の人すまんね)   
別に特殊なことはやってないけど、[オレのvimrc](https://github.com/okbm/dotfiles/blob/master/.vimrc) 晒しておきます。

# 基礎編

## 最初に
```
$ vimtutor
```
- vimの基本的な操作はこれで多分事足りる

## 基本編

- [Vimの生産性を一撃で高めるシンプルなテクニック - RickyNews](http://www.rickynews.com/blog/2014/05/14/vim-speedup-strategy/)
    - Karabinerを入れてキーリピート爆速にしよう
    - 個人的な好みだが83(default)から6にした
- caps lockをctrlキーに割り当てる

### 移動系とか
パッと思いついたやつ書いておきます

| コマンド   | なに？      |
|:-----------|:------------|
| ctrl + f   |ページ送り|
| ctrl + d   |半ページ送り|
| ctrl + b   |ページ戻り|
| ctrl + u   |ページ半戻り|
| w          |単語分進む|
| b          |単語分戻る|
| gg         |ファイルの一番上へ|
| G          |ファイルの一番下へ|
| g:         |前に変更した場所に飛ぶ|
| diw        |カーソル上の単語消す|
| dit        |カーソル上のタグの中を消す|
| di"        |"で囲まれた中を消す|
| ciw        |カーソル上の単語消して、insertモードになる|
| :set paste |いい感じにコピペできる|
| vで範囲選択 -> = | ガタガタの見た目がいい感じになる |
| ctrl + v で範囲選択 -> shift + iの後に#| 指定された場所に#が入る(先頭にコメントいれる) |

#### vimrcに書いたらいい感じになりそうなもの

| .vimrc   | なに？      |
|:-----------|:------------|
|set incsearch   |インクリメンタルサーチを有効に|
|nmap <Esc><Esc> :nohlsearch<CR> | Escの2回押しでハイライト消去|
|set pastetoggle=<C-E> | ctrl + eで`set paste`を有効/無効にする|
|set scrolloff=n| スクロールするときに上下に余白を入れる
|inoremap jj <Esc> | jjって押すとESC押したことにする|
|nnoremap 0 :<C-u>call append(expand('.'), '')<Cr>j | 0を入れると改行する(ノーマルモード時)
|set laststatus=2 <br> hi StatusLine ctermfg=White ctermbg=Blue cterm=none <br>au InsertEnter * hi StatusLine ctermfg=Black ctermbg=yellow cterm=none<br>au InsertLeave * hi StatusLine ctermfg=White ctermbg=Blue cterm=none | ステータスラインの色をinsertモードとかで変える|

## プラグイン

|  プラグイン  | なに？      |
|:-----------|:------------|
|Shougo/neobundle  |プラグインを管理するプラグイン|
|Shougo/neocomplcache.vim | 入力補完機能 |
|unite.vim |ファイル操作がお手軽に|
|NERDTree | IDEみたいなファイラー(Shougo/Vimfilerも同じ感じ？)|
|vim-powerline | 見た目がカッコよくなる|
|rking/ag.vim | vim上からagコマンドを使って高速検索
|kien/ctrlp.vim | 開きたいファイルの絞込に使う
|thinca/vim-quickrun | vim上からスクリプトを実行できる
| vim-rails | [Vim On Rails · Pablo Acuña](http://pacuna.io/2015/02/09/vim-on-rails/) |
|szw/vim-tags | ctag


### unite.vimについて補足

```
" バッファ一覧
nnoremap <silent> ub :<C-u>Unite buffer<CR>
" 今開いてるフォルダの一覧ファイルを表示
nnoremap <silent> uf :<C-u>UniteWithBufferDir -buffer-name=files file<CR>
" 最近使用したファイル一覧
nnoremap <silent> um :<C-u>Unite file_mru<CR>

"バッファ操作
nnoremap <C-m><C-n> :bn<CR>
nnoremap <C-m><C-p> :bp<CR>
nnoremap <C-m><C-b> <C-^>
```

開きたいファイルを探すときにめちゃくちゃ便利。   
バッファ操作で1個前に開いてたファイルに戻りたいとかめちゃくちゃあるので…

### rking/ag.vim

```
" ag
nmap <Space><Space> :Ag <c-r>=expand("<cword>")<cr><cr>
nnoremap <space>/ :Ag 

" quickrun
let g:quickrun_config = {
    \   "_" : {
    \       "outputter/buffer/split" : ":botright 8sp",
    \       "outputter/buffer/close_on_empty" : 1
    \   },
    \}

au FileType qf nnoremap <silent><buffer>q :quit<CR>
```
space + / でagコマンドがvim上で叩ける。grepよりもめちゃくちゃ速い   
quickrunと組み合わせるといい感じに表示される

## ctrlp.vim

```
"let g:ctrlp_clear_cache_on_exit = 0
let g:ctrlp_max_height          = 20
let g:ctrlp_user_command = 'ag %s -l'

let g:ctrlp_use_caching = 0
if executable('ag')
    set grepprg=ag\ --nogroup\ --nocolor

    let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""'
else
  let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f']
  let g:ctrlp_prompt_mappings = {
    \ 'AcceptSelection("e")': ['<space>', '<cr>', '<2-LeftMouse>'],
    \ }
endif
```
ctrl + pでファイルの絞込検索ができるが、毎回キャッシュが消えるので起動の度に時間かかるのが難点だった。   
`ctrlp_clear_cache_on_exit = 0`を設定すると早くなるがキャッシュを再生成しないとダメで、F5で再生成すると何故かオレの環境でバグるという悲しみ…   
調べたら`Ag`コマンドで高速にできた！プロジェクトの規模によるだろうが、体感1秒もかからない。

## szw/vim-tags
ctagをいい感じにしてくれる。   
`:TagsGenerate`で自動生成してくれる。ctrl + ] で飛べる

```
brew install ctags

# .gitignoreに入ってないので追加する or 自分の環境だけであればexcludeに入れる
cat >> .git/info/exclude << "EOF"
Gemfile.lock.tags
tags
EOF
```

```
" ctag
let g:vim_tags_project_tags_command = "ctags -f tags -R . 2>/dev/null"
let g:vim_tags_gems_tags_command = "ctags -R -f Gemfile.lock.tags `bundle show --paths` 2>/dev/null"
set tags+=tags,Gemfile.lock.tags
nnoremap <C-]> g<C-]>
```

## リンク
- [Vimの使い方まとめ | MBA-HACK](http://mba-hack.blogspot.jp/2013/02/vim.html)
- [neovimなるものがあるらしいので、誰か人柱になって](https://github.com/neovim/neovim)
- [Vimの生産性を高める12の方法 | 開発手法・プロジェクト管理 | POSTD](http://postd.cc/how-to-boost-your-vim-productivity/)
    - `Vimコンサルタントとしてご相談に乗ります`
- [A vim Tutorial and Primer](https://danielmiessler.com/study/vim/)
- [A Good Vimrc](http://dougblack.io/words/a-good-vimrc.html?utm_source=hackernewsletter&utm_medium=email&utm_term=fav)