はじめてvim改造 patheogenの導入とnerdTreeの導入と, 時々autocmdの使い方

プログラミング歴1年ちょっと.

ずっと裸のvimでやってきました.

補完も`ctrl+p`, 

毎回,`ctrl+z`で, shellに戻って, コンパイラして, エラーチェックする.

化石のようなプログラマでした.

vimの能力を全然使いこなせていない感が強かったので, ちょっと重い腰をあげて, pluginを入れようと思い立ちました.

まずはファイラーからだなと思い, ぐぐったら`nerdTree`がいいらしいということを聞いたので,

早速入れていこうと思います.

pluginを導入する前に, pluginを管理するツールを入れるのが先だと思い, それも調べると, patheogenがいいと聞いたので, まずそれを入れたいと思います.

その中で, 設定するためのvimコマンドも紹介しようと思います.

毎回[git hub](https://github.com/)や公式サイトがあれば, 公式サイトの情報を見て, インストールしようとしています.

今回も, [nerdTreeのgitHub](https://github.com/scrooloose/nerdtree)から, セットアップします.

想定読者は, 超初心者だけど, かっこいいからLinux使ってるとか, bash使ってるとかそういう人向けです(つまり, 自分です).


# 概要

- pathogenの導入
- nerdTreeの導入
- nerdTreeを使いやすくするvimの設定のコマンドの説明(次の記事で)

# 環境
Windows Subsystem for Linuxで,

OS: `VERSION="18.04 LTS (Bionic Beaver)"`

VIM: `Vi IMproved 8.0 (2016 Sep 12, compiled Apr 10 2018 21:31:58)`

WSLのせいで, 共有のvim設定ファイルを読んでいる気がしていろいろはまりそう.

# pathogenの導入

pathogenは, pluginの管理ツールです.

今までは, すべてのpluginを同じディレクトリに管理しなければいけなくてぐちゃぐたになってたらしいです(初めてpluginを導入するから, 知らないけど).

pathogenは, pluginごとに, ディレクトリを分けて管理できるので, 使いやすいらしいです.

ということで, pathogenを使っていきましょう.

## Install

gitHubの[vim-pathogen](https://github.com/tpope/vim-pathogen)に, アクセスして, READMEを読んで導入していきましょう.

>Install to ~/.vim/autoload/pathogen.vim. Or copy and paste the following into your terminal/shell:

と書いてあります.

これをするには, 以下のコマンドをたたきましょう.

`~/`で指定しているので, カレントディレクトリはどこでも大丈夫です.

```
mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```

コピペ病にかからないように, 一応コマンドの意味も読んでおきましょう.

`mkdir`コマンドで, ディレクトリを作ります. 

`-p`オプションを使うことで, ディレクトリを階層ごとに作ることができます.

`.vim`ディレクトリを作って, さらにその子ディレクトリとして, `autoload`を作ります.

`bundle`も同じです.

`&&`は, `&&`の前のコマンドが正しく実行された場合, そのあとのコマンドを実行します.

もし前のコマンドで実行が失敗した場合, 次のコマンドが実行されないので, 前のコマンドに依存するような場合に有効です.

今回は, `curl`コマンドで, 作ったディレクトリの中に出力した情報を保存しようとしているので, ディレクトリができていないとエラーが起きます.

なので, `&&`でつないでいます.

`\`は, 改行して次の行に書かれたコマンドも一行として認識されます.

```
mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
```

と同じ意味になります.

次に`curl`です.

これだけで一つの記事が書けそうなくらい深いコマンドですが, 今回は, `http`で, URLから, 情報をとってきているくらいの認識で大丈夫です.

- `-s`オプションは, 表示を抑える.
- `-S`オプションは, エラーだけ出力する
- `-o`オプションは, とってきた情報を指定したファイル名で保存する
- `-L`オプションは, 指定したURLのリソースが違う場所に移動したときに, 別のところにも取りに行ってくれます.

ということで, https://tpo.pe/pathogen.vim を見に行けばわかると思いますが, vim scriptが表示されます.

これをコピペして, `~/.vim/autoload/pathogen.vim`に保存しても同じことになります.

これでインストールは終わりです.

次に, Runtime Path Manipulationについて.

## Runtime Path Manipulation

runtime pathとは, vimがどのパスから, 設定ファイルやプラグインファイルを読み込んでいるかを設定しているオプションです.

`:set runtimepath`を, 叩くと, パスがずらっと表示されます.

自分の環境の場合は,

```
runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim80,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after
```

となっています.

pathogen.vimは, pluginを入れたときに, `~/.vim/bundle`配下においておけば, vimが読み込んでくれます.

直接, runtimepathオプションを操作しなくても, pathogen.vimがいい感じに, パスを通して, pluginを入れてくれるということです.

pathogen.vimを実際に機能させるには, `~/.vimrc`に以下の一文を入れましょう.

```
execute pathogen#infect()
```

また, `.vimrc`が存在しないときには, 新しく`.vimrc`を作って,

```
execute pathogen#infect()
syntax on
filetype plugin indent on
```

の３文を加えましょう.

下の二つは何を意味するかというと,

```
syntax on
```

これは, 構文でいい感じに色づけしてくれます.

```
filetype plugin indent on
```

これは,

```
filetype on
filetype indent
filetype plugin
```

をまとめたもので, 

ファイルを読んだときに, filetypeを識別してくれます.

[What is the difference between `filetype plugin indent on` and `filetype indent on`?](https://vi.stackexchange.com/questions/10124/what-is-the-difference-between-filetype-plugin-indent-on-and-filetype-indent)

この２行は`.vimrc`も使ったことない初学者に対する優しさだと思います.

なくても動きます.

とりあえず, `execute pathogen#infect()`を書いておけば大丈夫です.

## Plugin sensible.vim

試しに, `sensible.vim`を入れてみましょう.

まず, `~/.vim/bundle`配下に移動しましょう.

そして, sensible.vimのgit repositoryをcloneしましょう.

```
$ cd ~/.vim/bundle && \
git clone https://github.com/tpope/vim-sensible.git
```

lsで確認すると, 確かに, 入っています.

```
$ ls
drwxrwxrwx 0 morishita-g morishita-g 4096 Jul  6 18:52 vim-sensible
```

実際に, sensible.vimが読み込まれているか, 確認するには, `vim`を開いて,

NORMAL MODEになって, `:scriptnames`をたたくと, 読み込まれたshell scriptが一覧で表示されます.

```
 10: ~/.vim/bundle/vim-sensible/plugin/sensible.vim
```

実際に, 自分の環境では10番目に読み込まれていました(順番は関係ないですが).

また, 管理するディレクトリを, `~/.vim/bundle`から変えたい場合は, 

`execute pathogen#infect()`の引数を変えることで対応できます.

### 相対パスで指定する場合

```
execute pathogen#infect('stuff/{}')
```

`{}`は, ワイルドカードとして働きます.

なので, `~/.vim/stuff/`配下にすべてを読みに行きます.

実験してみましょう.

まず, `~/.vimrc`を編集して, さきほど`execute pathogen#infect()`と書いた部分を編集して,`execute pathogen#infect('stuff/{}')`にしましょう.

そして, `vim`を再起動してみると,,,

`~/.vim/bundle`配下にあった, `sensible.vim`が読み込まれなくなっていると思います.

`~/.vim/bundle`をrenameして, `stuff`にしてから, vimを再起動してみましょう.

```
$ pwd
~/.vim
$ mv bundle stuff
$ vim
```

vimのNORMAL MODEで, `:scriptnames`をたたくと,,,

```
 10: ~/.vim/stuff/vim-sensible/plugin/sensible.vim
```

と, stuff配下で読み込まれていることがわかります.

### 絶対パスで指定する場合

```
execute pathogen#infect('bundle/{}', '~/src/vim/bundle/{}')
```

第２引数に, 絶対パスを入れれば, そこを読みに行きます.

実際に自分で読み込んでくれるか試してみるといいでしょう.

## helptags

pluginのdocumentationを作成するのに, `helptags`で作れます.

インストールしたpluginのディレクトリに, `doc`ができると思います.

```
:helptags [docまでのパス]
```

をたたくと, ヘルプが作成されて,

```
:help [plugin名]
```

とすると, ヘルプが見えるようになります.

実際は, pluginのgithubのページにhelpの作り方は書いてあるのでそれに従うといいと思います.

それでは, pathogenのこともある程度わかったところで, nerdTreeを導入しましょう.

# nerdTreeの導入

[nerdTreeのgitHub](https://github.com/scrooloose/nerdtree)から, セットアップします.

pathogenを入れているので,

```
git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree
```

をたたきます(さっきのstuffから名前を元に戻しておいてください).

これだけで終わりです.

あとは, githubにいろいろ設定の仕方が書いてあるので, それに従って自分のやりたいようにカスタマイズできます.

次回は, nerdTreeのカスタマイズを開設しようと思います.