Sierraがほとんどまっさらな状態からVimをインストールする


以前書いた[初心者がVimをインストールするメモ](http://qiita.com/South_STR/items/4bd3fb7acd0d5bdf519a)という記事が今でもたまに見られているようなので、新しいMacのセットアップを機に書き直してみました。以前の記事よりは洗練されているはずです。

## XCodeをインストールする

App Storeにありますので、アプリを起動してインストールします。
インストールが終わったら一度起動して、コマンドラインツールをインストールしておきましょう。

## Homebrewをインストールする

[Homebrew](https://brew.sh/index_ja.html)にアクセスすると、トップにインストールスクリプトが表示されていますので、それをターミナルにコピペして実行します。
実行するとパスワードを聞かれるので、管理者パスワードを入力しましょう。

インストールが完了したら`brew help`を実行してみます。使い方が表示されていたら正常にインストールが完了しています。`man brew`などで詳しい使い方を見てみてもいいでしょう。

## gitをインストールする

Mac標準でgitがインストールされていますが、最新バージョンを使用するためにHomebrewでインストールします。

まずは標準のgitについて確認してみましょう。

```
$ git --version
git version 2.11.0 (Apple Git-81)
$ which git
/usr/bin/git
```

標準のgitを確認したところで、Homebrewでgitをインストールしてみます。

```
$ brew install git
```

インストールが完了したら、先ほどMac標準のgitを確認したときと同じように、今インストールしたgitを確認してみます。

```
$ git --version
git version 2.11.0 (Apple Git-81)
$ which git
/usr/local/bin/git
```

gitは/usr/local/bin/gitを参照しているようですが、バージョン情報が変わっていませんね。一度ターミナルを再起動して再度実行してみましょう。

```
$ git --version
git version 2.12.2
$ which git
/usr/local/bin/git
```

無事バージョンが上がり、Homebrewでインストールしたgitを使える状態になりました。

## Vimをインストールする

では本題のVimをインストールします。

これまたMacには標準のVimがインストールされていますので、バージョンを確認してみます。

```
$ vim --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Feb  4 2017 00:48:24)
Included patches: 1-898, 8056
Compiled by root@apple.com
Normal version without GUI.  Features included (+) or not (-):
+acl             -farsi           -mouse_netterm   +syntax
-arabic          +file_in_path    -mouse_sgr       +tag_binary
+autocmd         +find_in_path    -mouse_sysmouse  +tag_old_static
-balloon_eval    +float           -mouse_urxvt     -tag_any_white
-browse          +folding         +mouse_xterm     -tcl
+builtin_terms   -footer          +multi_byte      +terminfo
+byte_offset     +fork()          +multi_lang      +termresponse
+cindent         -gettext         -mzscheme        +textobjects
-clientserver    -hangul_input    +netbeans_intg   +title
-clipboard       +iconv           +path_extra      -toolbar
+cmdline_compl   +insert_expand   -perl            +user_commands
+cmdline_hist    +jumplist        +persistent_undo +vertsplit
+cmdline_info    -keymap          +postscript      +virtualedit
+comments        -langmap         +printer         +visual
-conceal         +libcall         -profile         +visualextra
+cryptv          +linebreak       +python/dyn      +viminfo
+cscope          +lispindent      -python3         +vreplace
+cursorbind      +listcmds        +quickfix        +wildignore
+cursorshape     +localmap        +reltime         +wildmenu
+dialog_con      -lua             -rightleft       +windows
+diff            +menu            +ruby/dyn        +writebackup
+digraphs        +mksession       +scrollbind      -X11
-dnd             +modify_fname    +signs           -xfontset
-ebcdic          +mouse           +smartindent     -xim
-emacs_tags      -mouseshape      -sniff           -xsmp
+eval            -mouse_dec       +startuptime     -xterm_clipboard
+ex_extra        -mouse_gpm       +statusline      -xterm_save
+extra_search    -mouse_jsbterm   -sun_workshop    -xpm
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H     -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: gcc   -L/usr/local/lib -o vim        -lm -lncurses  -liconv
$ which vim
/usr/bin/vim
```

とても長いですが、重要なことが書かれています。

```
$ vim --version | grep clipboard
-clipboard       +iconv           +path_extra      -toolbar
+eval            -mouse_dec       +startuptime     -xterm_clipboard
```

grepで必要な部分だけ抜き出してみました。Mac標準のVimではclipboardに対応していないため、ブラウザでコピーしたスニペットなどをVimに貼り付ける、といったことができません。

```
$ vim --version | grep lua
+dialog_con      -lua             -rightleft       +windows
```

これは私事なのですが、Luaに対応していないため、普段使っているVimのプラグインも使えません。
そのため、Luaを使えるようにインストールをしなければなりません。
なお、clipboardはHomebrewでインストールするVimだと標準で有効になっています。

では実際にインストールを行ってみましょう。
まずはインストールオプションを確認します。

```
$ brew info vim
vim: stable 8.0.0535 (bottled), HEAD
Vi "workalike" with many additional features
http://www.vim.org/
Conflicts with: ex-vi
Not installed
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/vim.rb
==> Dependencies
Optional: lua ✘, luajit ✘, gettext ✘
==> Requirements
Required: ruby >= 1.8 ✔, perl >= 5.3 ✔
Recommended: python ✔
Optional: python3 ✘
==> Options
--with-client-server
	Enable client/server mode
--with-custom-perl
	Build with a custom Perl instead of the Homebrew version.
--with-custom-python
	Build with a custom Python 2 instead of the Homebrew version.
--with-custom-ruby
	Build with a custom Ruby instead of the Homebrew version.
--with-gettext
	Build vim with National Language Support (translated messages, keymaps)
--with-lua
	Build vim with lua support
--with-luajit
	Build with luajit support
--with-override-system-vi
	Override system vi
--with-python3
	Build vim with python3 instead of python[2] support
--with-tcl
	Build vim with tcl support
--without-perl
	Build vim without perl support
--without-python
	Build vim without python support
--without-ruby
	Build vim without ruby support
--HEAD
	Install HEAD version
```

いっぱい出てきました。例によってgrepでluaの部分だけ抜き出してみましょう。

```
$ brew info vim | grep lua
Optional: lua, luajit, gettext
--with-lua
	Build vim with lua support
--with-luajit
	Build with luajit support
```

実際luaとluajitの何が違うのかわかりませんが、jitは多分JITコンパイラ付きだったりするのかなあと思うものの、実際にLuaを書くことは今のところないので、余計なことはせず`--with-lua`オプションだけつけます。

```
$ brew install vim --with-lua
```

インストールにはしばらく時間がかかるので、ゆっくり待ちましょう。

インストールが終了したら、先ほどのgitのようにバージョンを確認してみます。

```
$ vim --version | grep VIM
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Feb  4 2017 00:48:24)
   system vimrc file: "$VIM/vimrc"
  fall-back for $VIM: "/usr/share/vim"
$ which vim
/usr/local/bin/vim
```

またもやバージョンの情報がおかしいですね。ターミナルを再起動してもう一度確認してみましょう。

```
$ vim --version | grep VIM
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr  3 2017 22:51:38)
   system vimrc file: "$VIM/vimrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
  fall-back for $VIM: "/usr/local/share/vim"
$ which vim
/usr/local/bin/vim
```

バージョンが上がっています。ではclipboardとluaがどうなっているのか見てみましょう。

```
$ vim --version | grep clipboard
+clipboard       +job             +path_extra      +user_commands
+eval            +mouse_dec       +statusline      -xterm_clipboard
$ vim --version | grep lua
+dialog_con      +lua             +rightleft       +writebackup
Linking: clang   -L. -L/usr/local/lib -F/private/tmp/vim-20170403-5105-18lfi48/vim-8.0.0535/Frameworks -L/usr/local/lib -o vim        -lm  -lncurses -liconv -framework Cocoa  -L/usr/local/lib -llua -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby.2.0.0 -lobjc
```

clipboardもluaも有効になっています。
インストール作業は以上になります。今後は.vimrcをセットアップして快適なVimライフを満喫しましょう。

ちなみに、Vimがどの設定ファイルを参照するかは`vim --version`の下の方に書いてあります。Vimに慣れてない人は、どんなファイルを参照しているのか確認しておいたほうがいいでしょう。

## --with-gettext編

ここからは蛇足です。

gettextオプションを有効にすると、Vimが多言語対応して日本語での表示が可能になります。
英語がどうしてもダメならばこちらを使ってみましょう。

### すでにVimをインストールしてしまった場合

アンインストールします。`brew uninstall vim`で綺麗になります。

### --with-gettextをそのままつけてもダメ

そのまま`brew install --with-lua --with-gettext`とやってしまうと、次のようなメッセージが表示されます。

```
This formula is keg-only, which means it was not symlinked into /usr/local.

macOS provides the BSD gettext library and some software gets confused if both are in the library path.

If you need to have this software first in your PATH run:
  echo 'export PATH="/usr/local/opt/gettext/bin:$PATH"' >> ~/.bash_profile

For compilers to find this software you may need to set:
    LDFLAGS:  -L/usr/local/opt/gettext/lib
    CPPFLAGS: -I/usr/local/opt/gettext/include
```

おそらくMacにはBSDのgettextがあるので、Homebrewでインストールしたgettextと同時に存在するとシステムが混乱してしまうということでしょう。
呼び出す優先順位を決めるならパスを設定しろと書いています。
その下ではコンパイラがgettextを見つけるためにはこの値を設定しろと書いてあります。
ということで、.bash_profileに以下の値を設定しましょう。.bash_profileがなければ$HOMEに作りましょう。

```.bash_profile
# Homebrewでインストールしたgettext用にpathを追加する
export PATH="/usr/local/opt/gettext/bin:$PATH"
# Homebrewでコンパイルする際に環境変数を設定する
export LDFLAGS="-L/usr/local/opt/gettext/lib"
export CPPFLAGS="-I/usr/local/opt/gettext/include"
```

`LDFLAGS`と`CPPFLAGS`はVimをインストールした後に削除して、ターミナルを再起動しておいた方が良いと思います。特に他のソフトウェアをインストールしようと思っているのならばなおさらです。

では、 **ターミナルを再起動した後に** `brew install vim --with-lua --with-luajit --with-gettext`を実行してインストールしましょう。オプションが増えているのは気にしないでください。使わない人は--with-luajitを入力する必要はありません。

インストールが終わったら、.bash_profileのLDFLAGSとCPPFLAGSの行をコメントアウト(あるいは削除)して、ターミナルを再起動(正確には再ログイン)します。

インストール前後に再ログインしている理由は、.bash_profileが読み込まれるタイミングにあります。早い話がログインのタイミングで読み込まれるからです。.bashrcに書いてsourceしても問題はありませんし、ファイルに書かなくても直接exportを実行しても大丈夫でしょう。

とりあえずインストールが完了して環境も問題ない状態になったので、バージョンと有効なオプションを確認してみます。

```
$ vim --version
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Apr  6 2017 01:29:19)
MacOS X (unix) 版
適用済パッチ: 1-543
Compiled by Homebrew
Huge 版 without GUI.  機能の一覧 有効(+)/無効(-)
+acl             +file_in_path    +mouse_sgr       +tag_old_static
+arabic          +find_in_path    -mouse_sysmouse  -tag_any_white
+autocmd         +float           +mouse_urxvt     -tcl
-balloon_eval    +folding         +mouse_xterm     +termguicolors
-browse          -footer          +multi_byte      +terminfo
++builtin_terms  +fork()          +multi_lang      +termresponse
+byte_offset     +gettext         -mzscheme        +textobjects
+channel         -hangul_input    +netbeans_intg   +timers
+cindent         +iconv           +num64           +title
-clientserver    +insert_expand   +packages        -toolbar
+clipboard       +job             +path_extra      +user_commands
+cmdline_compl   +jumplist        +perl            +vertsplit
+cmdline_hist    +keymap          +persistent_undo +virtualedit
+cmdline_info    +lambda          +postscript      +visual
+comments        +langmap         +printer         +visualextra
+conceal         +libcall         +profile         +viminfo
+cryptv          +linebreak       +python          +vreplace
+cscope          +lispindent      -python3         +wildignore
+cursorbind      +listcmds        +quickfix        +wildmenu
+cursorshape     +localmap        +reltime         +windows
+dialog_con      +lua             +rightleft       +writebackup
+diff            +menu            +ruby            -X11
+digraphs        +mksession       +scrollbind      -xfontset
-dnd             +modify_fname    +signs           -xim
-ebcdic          +mouse           +smartindent     -xpm
+emacs_tags      -mouseshape      +startuptime     -xsmp
+eval            +mouse_dec       +statusline      -xterm_clipboard
+ex_extra        -mouse_gpm       -sun_workshop    -xterm_save
+extra_search    -mouse_jsbterm   +syntax          
+farsi           +mouse_netterm   +tag_binary      
      システム vimrc: "$VIM/vimrc"
      ユーザー vimrc: "$HOME/.vimrc"
   第2ユーザー vimrc: "~/.vim/vimrc"
       ユーザー exrc: "$HOME/.exrc"
  デフォルトファイル: "$VIMRUNTIME/defaults.vim"
       省略時の $VIM: "/usr/local/share/vim"
コンパイル: clang -c -I. -Iproto -DHAVE_CONFIG_H   -DMACOS_X_UNIX  -g -O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
リンク: clang   -L. -L/usr/local/lib -F/private/tmp/vim-20170406-10867-t6ysr7/vim-8.0.0543/Frameworks -L/usr/local/lib -o vim        -lm  -lncurses -liconv -lintl -framework Cocoa  -pagezero_size 10000 -image_base 100000000 -L/usr/local/lib -lluajit-5.1 -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby.2.0.0 -lobjc
```

日本語で表記されていますね。
ではluaとgettextオプションを見てみましょう。

```
$ vim --version | grep lua
+dialog_con      +lua             +rightleft       +writebackup
リンク: clang   -L. -L/usr/local/lib -F/private/tmp/vim-20170406-10867-t6ysr7/vim-8.0.0543/Frameworks -L/usr/local/lib -o vim        -lm  -lncurses -liconv -lintl -framework Cocoa  -pagezero_size 10000 -image_base 100000000 -L/usr/local/lib -lluajit-5.1 -fstack-protector  -L/System/Library/Perl/5.18/darwin-thread-multi-2level/CORE -lperl -framework Python   -lruby.2.0.0 -lobjc

$ vim --version | grep gettext
+byte_offset     +gettext         -mzscheme        +textobjects
```

いい感じですね。Vimを起動すると日本語で案内してくれます。
ちなみに日本語のヘルプは[vim-jp/vimdoc-ja: A project which translate Vim documents into Japanese.](https://github.com/vim-jp/vimdoc-ja)にあるので、cloneするなりプラグインマネージャなりでインストールしておくといざという時便利です。

日本語でヘルプを読んで、初めてVimのヘルプって凄いんだと認識しました。webで調べなくてもいいんじゃないかなと思います。とても今更な話ですね。
こんなことにならないようにヘルプを活用できるようにしておきましょう。