Macの初期セットアップメモ(3) - vim周り

[前回の記事](https://qiita.com/cielo1985/items/a39114b2cee42d08defe)ですっかりvimの設定を完全に忘れてました。なので、いけてる.vimrcを入れて、colorschemeにターミナルに引き続きIcebergを適用します。１０年前からvimユーザですがパッケージ管理とかやったことがなかったので、今回初めて勉強してdeinを入れて見ました。

# 環境情報
MacBook Air (13-inch, Mid 2011)
macOS High Sierra (v10.13.6)

# vimの設定
## dein.vimインストール
[ここ](https://github.com/Shougo/dein.vim)にある通りの手順でインストールしました。インストールディレクトリは`~/.cache/dein`にしました。上記のgithubの手順だとハマるポイントがあるので、その辺りも書いておきます。

1. 以下のコマンドでinstall.shをダウンロードしてきて実行
    
    ```zsh
curl https://raw.githubusercontent.com/Shougo/dein.vim/master/bin/installer.sh > installer.sh
# For example, we just use `~/.cache/dein` as installation directory
sh ./installer.sh ~/.cache/dein
```

2. 1.の実行結果の最後に.vimrcに記述すべき内容が出てくるので、それを.vimrcにコピペ。最後の「If you want to install ...」のコメントアウトを外しておくとvim起動時にインストールされていないプラグインがあれば自動でインストールしてくれる。便利そうなのでコメントアウトしておいた。(*ここでGithubの手順に書いてある.vimrcをコピペしてきてもうまくいかない模様。readme.mdのupdateがされてないんですかね。)

    ```vim:~/.vimrc
    "dein Scripts-----------------------------
if &compatible
      set nocompatible               " Be iMproved
    endif
    
    〜中略〜
    
    " If you want to install not installed plugins on startup.
    if dein#check_install()
      call dein#install()
    endif
    
    "End dein Scripts-------------------------
    ```

3. ~~vimを起動するとdeinがインストールされる（はず[^1]）。~~
    [追記 2018.8.15] vimを起動して以下のコマンドを実行するとdeinがインストールされる。
    [追記 2018.8.16] インストールされました。2.の手順で「If you want to install ...」をコメントアウトしていればインストールされました。
    
    ```
    :call dein#install()
    ```

[^1]: 最初はgithubに書いてある手順でインストールをしていたので、2.でコメントアウトしたインストールされていないプラグインのインストールの部分が書いてなかたった。なのでvim起動後`:call dein#install()`でインストールしました。なので起動するだけで本当にインストールされるかは未確認です。

### 何故かvim起動するたびにメッセージが出てくる
起動するたびに以下のメッセージが出てきた。毎回出てきてかなり鬱陶しい。

```
deol.nvim requires Neovim or terminal feature enabled Vim.
Press ENTER or type command to continue
```

.vimrcを見ると`call dein#add`でdeol.nvimを使おうとしている。deol.nvimはneovimかterminal featureの有効化されたvimじゃないと動かないよ忠告してくれてる模様。
この部分、よく読むとdein.vimの動作に必要な行ではなさそうで、githubのrevision/branch/tagを指定できるよ、というただの例であることが分かる。なので.vimrcにある以下の行をコメントアウトして解決した。

```vim:~/.vimrc
  " You can specify revision/branch/tag.
  " call dein#add('Shougo/deol.nvim', { 'rev': '01203d4c9' })
```

同じ課題にぶつかってる人は結構いるみたいで、例えば[ここ](http://imtnd.hatenablog.com/entry/2018/02/25/023644)はvimのバージョンを上げることで解決してる。おそらくこのタイミングでvimのterminal featureが入ったからエラーが出なくなったんじゃないだろうか。

ちなみにdeol.nvimは[Git](https://github.com/Shougo/deol.nvim)によれば「Deol.nvim is a dark powered shell for Neovim. It is based on neovim or Vim terminal feature.」とのこと。neovimで誕生したterminal機能の改良版って感じでしょうか。terminalは多分[この辺](https://qiita.com/mattn/items/ee438479b09055a2f305)の話。

## Icebergのインストール
1. .vimrcにicebergを追記。colorschemeも設定。

    ```vim:~/.vimrc
    "dein Scripts-----------------------------
    if &compatible
      set nocompatible               " Be iMproved
    endif
    
    〜中略〜
    
      " Add or remove your plugins here:
      call dein#add('Shougo/neosnippet.vim')
      call dein#add('Shougo/neosnippet-snippets')
      call dein#add('cocopon/iceberg.vim')
    
    〜中略〜
    
    "Personal Settings------------------------
    colorscheme iceberg
    "End Personal Settings--------------------                                              
    ```

2. vimを起動すると自動的にインストールされて、colorschemeもicebergになる。

## .vimrcの設定
[これ](https://qiita.com/morikooooo/items/9fd41bcd8d1ce9170301)を使わせていただきました。

```vim:~/.vimrc
" setting
"文字コードをUFT-8に設定
set fenc=utf-8
" バックアップファイルを作らない
set nobackup
" スワップファイルを作らない
set noswapfile
" 編集中のファイルが変更されたら自動で読み直す
set autoread
" バッファが編集中でもその他のファイルを開けるように
set hidden
" 入力中のコマンドをステータスに表示する
set showcmd


" 見た目系
" 行番号を表示
set number
" 現在の行を強調表示
set cursorline
" 現在の行を強調表示（縦）
set cursorcolumn
" 行末の1文字先までカーソルを移動できるように
set virtualedit=onemore
" インデントはスマートインデント
set smartindent
" ビープ音を可視化
set visualbell
" 括弧入力時の対応する括弧を表示
set showmatch
" ステータスラインを常に表示
set laststatus=2
" コマンドラインの補完
set wildmode=list:longest
" 折り返し時に表示行単位での移動できるようにする
nnoremap j gj
nnoremap k gk


" Tab系
" 不可視文字を可視化(タブが「▸-」と表示される)
set list listchars=tab:\▸\-
" Tab文字を半角スペースにする
set expandtab
" 行頭以外のTab文字の表示幅（スペースいくつ分）
set tabstop=2
" 行頭でのTab文字の表示幅
set shiftwidth=2


" 検索系
" 検索文字列が小文字の場合は大文字小文字を区別なく検索する
set ignorecase
" 検索文字列に大文字が含まれている場合は区別して検索する
set smartcase
" 検索文字列入力時に順次対象文字列にヒットさせる
set incsearch
" 検索時に最後まで行ったら最初に戻る
set wrapscan
" 検索語をハイライト表示
set hlsearch
" ESC連打でハイライト解除
nmap <Esc><Esc> :nohlsearch<CR><Esc>
```
加えて以下を追加しています。文字コードをutf-8とし、自動判定もするようにしています。よくwindowsで作ったコードを持ってくることもあるので日本語コメントが化けるのを防止するためです。「Emacs風...」はエディットモードでemacsライクなショートカットを使えるようにするためです。

```vim:~/.vimrc
" 文字コードの自動判定
:set encoding=utf-8
:set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8,shift_jis,cp932,ucs-bom
 
" Emacs風カーソル移動キーバインド
noremap! <C-b> <Left>
noremap! <C-f> <Right>
noremap! <C-n> <Down>
noremap! <C-p> <Up>
noremap! <C-a> <Home>
noremap! <C-e> <End>
noremap! <C-h> <Backspace>
noremap! <C-d> <Delete>
```
## クリップボードを使えるようにする
[この記事](https://qiita.com/shoma2da/items/92ea8badcd4655b6106c)を参考にさせていただきました。

>Mavericksで標準インストールされているVimではクリップボード連携ができません。

ということなのでclipboardを有効化していきます。まずはclipboardの状況を確認。

```zsh
% vim --version | grep "clipboard"
-clipboard       +job             +path_extra      -toolbar
+ex_extra        -mouse_gpm       -sun_workshop    -xterm_clipboard
```

`-clipboard`という感じで`-`にっているので有効ではありません。brewでインストールしたvimは`+`になってるそうなのでインストールしてみます。

```zsh
brew install vim
```

インストールしたvimでclipboardが`+`になっていることを確認します。

```zsh
% /usr/local/Cellar/vim/8.1.0202/bin/vim --version | grep "clipboard"
+clipboard         +jumplist          +persistent_undo   +vertsplit
+emacs_tags        +mouse_dec         -sun_workshop      -xterm_clipboard
```

`usr/local/bin/vim`を確認すると上記のbrewで入れたvimに紐づいているようで、`+`になっていました。

```zsh
% /usr/local/bin/vim --version | grep "clipboard"
+clipboard         +jumplist          +persistent_undo   +vertsplit
+emacs_tags        +mouse_dec         -sun_workshop      -xterm_clipboard
```

PATHを確認すると`/usr/lobal/bin`が優先されており、vimと打てばclipboardが有効なvimが動いてくれました。

```zsh
% echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

% which vim
/usr/local/bin/vim

% vim --version | grep "clipboard"
+clipboard         +jumplist          +persistent_undo   +vertsplit
+emacs_tags        +mouse_dec         -sun_workshop      -xterm_clipboard
```
`.vimrc`でヤンクをclipboardに入れるように設定します。

```vim:~/.vimrc
set clipboard+=unnamed
```

これで`y`でヤンクした文字列を`command+v`で他のアプリにも貼り付けられるようになりました。

しかし、ここで変なことが起きます。vimの中でbackspaceが効かないのです。beepが出ます。原因はわかっていないですが、[この記事](https://qiita.com/omega999/items/23aec6a7f6d6735d033f)を参考に以下を追加したら治りました。最初から入っていたvimでは起きていません。謎です。

```vim:~/.vimrc
set backspace=indent,eol,start
```

ちなみに`vi`はもともと入っていた標準のvimに紐づいているようで`-clipboard`でした。`vi`だけで`vim`開きたいので`.zshrc`でaliasを追加しておきます。

```zsh
% vi --version | grep "clipboard"
-clipboard       +job             +path_extra      -toolbar
+ex_extra        -mouse_gpm       -sun_workshop    -xterm_clipboard

% vi .zshrc #ここで「alias vi=vim」を追加

% source .zshrc

% vi --version | grep "clipboard"
+clipboard         +jumplist          +persistent_undo   +vertsplit
+emacs_tags        +mouse_dec         -sun_workshop      -xterm_clipboard
```


# treeインストール
全然話は変わりますがtreeコマンドは要るよなと思い立ってインストールしました。

```zsh
% brew install tree
```

こんな風にディレクトリ構造を可視化してくれるので何かと便利です。

```zsh
% tree -L 2 /users
/users
├── Guest
│   ├── Desktop
│   ├── Documents
│   ├── Downloads
│   ├── Library
│   ├── Movies
│   ├── Music
│   ├── Pictures
│   └── Public
├── Shared
│   └── adi
└── hoge
    ├── Applications
    ├── Desktop
    ├── Documents
    ├── Downloads
    ├── Library
    ├── Movies
    ├── Music
    ├── Pictures
    └── Public
```

# 今後について
今度こそ基本的な設定は完了です。これから勉強用に色々入れていきます。vimが一番時間かかりました。今まで何度かMacの初期セットアップしてきましたが、メモしながらインストールすると、色々ハマってトラシューしてる間に「あれ今何やってたんだっけ？」て迷子になることを防げるので良い方法だなと思いました。