deinに乗り換えよう（第四段階）

# 前提条件

- MacOS ElCapitan 10.11.6
- vim8.0
- homebrew
- ctags
- iTerm2

# 今回の作業
ここまでで入れたプラグインの設定

# 手順

## ctagsを設定

deinじゃないけどw
設定しておかないと、vimrcに設定したものが正しいか判断できないので
ctagsはhomebrewでいれておく

### 設定ファイルを作成

```
$ vi .ctags
--append=yes
--recurse=yes
--html-kinds=af
--php-kinds=cfd
--sh-kinds=f
```

appendsはファイルが存在するとき追加するか？recurseはctags -Rと同じ効果。
設定できる言語はctagsのマニュアルに書いてある


### tag作成
タグファイルのディレクトリをまとめたいので、ディレクトリを作っておく
今回はPHPファイルが入ってるディレクトリを対象に作ります

```
$ mkdir .tags
$ cd (タグを作りたいプロジェクトのディレクトリ。)
$ ctags -f ~/.tags/php.tags `pwd`
```

またはファイルをvimで開いたままでtagを追加(vim-tagsがここで役に立つ)

```
:TagsGenerate
```

したら、.tags/php.tagsに書き出される。
いたってシンプル。

## vimrcの設定
インストール済みのプラグイン関連の設定 + プラグイン関係なく必要な設定を。

- neosnippet
- neocomplete
- NERDTree
- syntastic
- tagbar
- vim-tags



```

" *******************************************************
" neosnippet
" *******************************************************
" Plugin key-mappings.
imap <C-k>     <Plug>(neosnippet_expand_or_jump)
smap <C-k>     <Plug>(neosnippet_expand_or_jump)
xmap <C-k>     <Plug>(neosnippet_expand_target)

" SuperTab like snippets behavior.
"imap <expr><TAB>
" \ pumvisible() ? "\<C-n>" :
" \ neosnippet#expandable_or_jumpable() ?
" \    "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"
smap <expr><TAB> neosnippet#expandable_or_jumpable() ?
\ "\<Plug>(neosnippet_expand_or_jump)" : "\<TAB>"

" For conceal markers.
if has('conceal')
    set conceallevel=2 concealcursor=niv
endif

" *******************************************************
" neocomplete
" *******************************************************
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplete.
let g:neocomplete#enable_at_startup = 1
" Use smartcase.
let g:neocomplete#enable_smart_case = 1
" Set minimum syntax keyword length.
let g:neocomplete#sources#syntax#min_keyword_length = 3

" Define dictionary.
let g:neocomplete#sources#dictionary#dictionaries = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
        \ }

" Define keyword.
if !exists('g:neocomplete#keyword_patterns')
    let g:neocomplete#keyword_patterns = {}
endif
let g:neocomplete#keyword_patterns['default'] = '\h\w*'

" Plugin key-mappings.
inoremap <expr><C-g>     neocomplete#undo_completion()
inoremap <expr><C-l>     neocomplete#complete_common_string()

" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <silent> <CR> <C-r>=<SID>my_cr_function()<CR>
function! s:my_cr_function()
    return (pumvisible() ? "\<C-y>" : "" ) . "\<CR>"
endfunction
" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplete#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplete#smart_close_popup()."\<C-h>"

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags


" *******************************************************
" NERDTree
" *******************************************************
" ブックマーク初期表示
let g:NERDTreeShowBookmarks=1
"
let g:NERDTreeChDirMode=2
" windowサイズ設定
let g:NERDTreeWinSize=20
" 表示したくないファイル、ディレクトリ
let g:NERDTreeIgnore=['\.DS_Store$', '\.swp$', '\~$', '\.so']
" vim起動時に常に表示
autocmd vimenter * NERDTree
" NERDTreeだけが残る場合はvim終了
autocmd bufenter * if (winnr("$") == 1 && exists("b:NERDTree") && b:NERDTree.isTabTree()) | q | endif

" *******************************************************
" syntastic
" *******************************************************
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

let g:syntastic_javascript_checkers=['eslint']
let g:syntastic_scss_checkers = ['scss_lint']
let g:syntastic_php_checkers = ['php', 'phpcs', 'phpmd']

" *******************************************************
" tagbar
" *******************************************************
" windowサイズ
let g:tagbar_width=20
" 起動時に常に表示
autocmd vimenter *.php TagbarOpen

" *******************************************************
" vim-tags
" *******************************************************
let g:vim_tags_project_tags_command = "/usr/local/Cellar/ctags/5.8_1/bin/ctags -f .tags -R . 2>/dev/null"
let g:vim_tags_auto_generate = 1

" *******************************************************
" ctags
" *******************************************************
" phpファイル用tags
au BufNewFile,BufRead *.php set tags+=$HOME/.tags/php.tag
```

コメント入れてないところは、ほぼ本家のコピペ

NERDTreeを入れて

```
set mouse=a
```

の設定をしていると、iTerm2でこれまでcommand+Cでコピーできていたはずができない・・・
iTermの「Applications in terminal may access clipboard」をオフにするとNERDTreeのウィンドウまでコピーするw

```
set clipboard=unnamed,autoselect
```

の設定でvimmerお馴染みのヤンクしたテキストがクリップボードにコピー
autoselectがビジュアルモードで選択したテキストがクリップボードにコピーされる

ちょっと長くなってきたので、次へ続く