Vim :helpがユニークな3つのポイント、vim :helpを読むための敷居を下げる3つの事柄

これは`Vim Advent Calendar 2018 その2`の１４日目の記事です。

## この記事の概要
まずは一句。

```
ビムヘルプ
使ってみると
あら便利
```

vimの`:help`がよくできていることに最近、今更ながらに気づきました(おそすぎる)。
この記事は私と同じように、まだ`:help`を読んでいなかった方の、その背中を押すような内容となります。

というわけで、まずは`Vim`の`:help`のどこがよくできるかについて三点、簡潔に書いていきます。
(本当はもっとありますが)

## vim :helpがユニークな3つのポイント

### 1. 基本的に両手をキーボードから離さずにドキュメントを読み進められる

両手をキーボードに置いたまま、ドキュメントを自由に読み進めていけるのは本当に素晴らしい体験です。そして、`vim`を使う楽しさも併せて感じさせてくれます。<br>
ドキュメントを読み進めていくうちに、操作にも慣れてきて、さらに素早くドキュメントの中を駆け回れるようになる...するともっと楽しくなって、気づくと、もう`vim`の虜

### 2. ページ間の移動が爆速(ローディング時間なし)で、ストレスフリー
ドキュメント自体がローカルにあるというのが要因なのですが、待ち時間なしでドキュメント内を移動できるというのは本当に素晴らしい体験だということを改めて感じさせてくれるのが、この`vim`の`:help`の素晴らしいところ。
気になる事柄を瞬時に検索できます。

### 3. 読んだ傍から実践できる

ドキュメントを見たそばから学んだことを実践できるなんて、そんな素晴らしいことがあるでしょうか！?`vim`を深く知ろうと思うモチベーションにもなりますし、`vim`のドキュメントはそういう意味からもよく考えられているなと思った次第。



## :helpの歩き方
では早速実践。

`:help`、`:h`でヘルプが起動します。
また、`:h terminal`などで知りたい内容についてのhelpを直接開けます。
`:h | only`と打つことで最初から画面を分割せずにヘルプを開けます。

後述しますが`fzf.vim`のセットアップが完了していれば`:Helptags`と打つと、いい感じに`vim`で`:help`内のコンテンツを検索できます。

`:help`の使い方についてはhelpのトップによく書かれているので、これを読み込んでおけばまず問題ないと思います。
と、これだけだと、流石に味気ないので、よく使うことコマンドと用途を下に書きます。
まずはこれだけ認識して、ひとまずヘルプの中を歩き回ってみると楽しい気分になれます。

### よく使うコマンド

文字通り項目ジャンプ
* `Ctrl+]` -> 項目へジャンプ
* `Ctrl+T`, `Ctrl+O` -> 元の場所へ戻る

ジャンプしたい項目のタグへ移動するために
* `W(Shiftありなし、どちらも)` -> 次の単語の先頭にジャンプ
* `B(Shiftありなし、どちらも)` -> 直前の単語の先頭にジャンプ

サクサクーっと流し読み用途で主に使う
* `Ctrl+D` -> 半画面下へ移動
* `Ctrl+U` -> 半画面上へ移動

気になるワードは検索かけて調べる。検索もキーボードから手を離さなくて良いので便利
* `/{検索ワード}` -> 文字通り検索

以上のようなコマンドを主に使いながら、気になる項目のタグ上で(※)、`Ctrl+]`を押してその項目に飛び、そこから説明を読み進めて、また気になるタグがあればさらに飛んで...という形で際限なく読み進めていくことができます。
(※実際に見てみると分かりますが、タグはそれと分かるように文字の色が変わっています)

先ほども書きましたが。`help`自体の動作も軽く、`Ctrl+]`打つと瞬時に項目へジャンプが完了するので、結構サクサク読み進められて、それがまた快感だったりします。
ある種の読書体験として非常にクオリティの高いものを提供しているのではないでしょうか？

ウィンドウ分割して、複数の内容を一度に参照できるのも便利です。
![vim-help_20181209.gif](https://qiita-image-store.s3.amazonaws.com/0/205976/f0296f5d-45d0-172f-0e89-3a3f76d52549.gif)

## さらなるhelpの歩き方(h_eastさんに感謝!)

[h_east](https://qiita.com/h_east)さんより、さらなる`helpの歩き方`を教えていただきました！
(コメント欄も参照してみてください)

* `<C-D>`をタイプすると入力したキーワードを含む項目を一覧表示します。

例えば下記のように`:h 'wildm`と入力した状態で`Ctrl-D`と入力すると、入力したキーワードを含む項目を一覧で表示してくれます。

```vim
:h 'wildm{ここでCtrl-Dを押す}
'wildmenu'@en  'wildmode'@en  'wildmenu'@ja  'wildmode'@ja
```


* `<Tab>`をタイプするとコマンドライン補完がおこなえます。
コメントにも書いていただいたように`:set wildmenu`と打つか、`.vimrc`に`set wildmenu`を追記しておけば、項目メニューが表示されるようになって便利


```vim
:h 'wildm{ここでTab押す}
```

キーワードの後ろに@jaを付けて<Ctrl-D>をタイプすると、日本語ヘルプの項目のみを一覧表示してくれます。
コメントにも記載していただいた例として、下記のように`:h wildm@ja`と入力すれば、`wildm`に対する日本語項目のみを一覧で表示してくれます。

```vim
:h 'wildm@ja{ここでCtrl-Dを押す}
'wildmenu'@ja  'wildmode'@ja
```

* `:helpgrep`でhelp内を検索できます。結果はquickfixウィンドウに表示されます。

```vim
:helpgrep Terminal↵
:copen↵
```

* キーワードの後ろに`@ja`を付けると日本語ヘルプだけを検索対象にできます。<br>
(8.1.0315 以降でないと正しく動作しません)

```vim
:helpgrep Terminal@ja
```


## さらなるVimの歩き方、その2(rbtnnさんに感謝！)

[rbtnn](https://qiita.com/rbtnn)さんより、さらに`:help`内を効率良く駆け回れる方法を教えていただきました！
(コメント欄も参照してみてください)

`:set keywordprg=:help`とVim上で打つか、`.vimrc`に

```vim
set keywordprg=:help
```
と追記することで、`:help`内のキーワード上で`Shift-K`を押すことで、そのキーワードのヘルプを引くことができるので、これでさらに爆速で`:help`の中を歩き回れますね！

## vim :helpを読むための敷居を下げる3つの事柄

ここまでで、今まで`:help`を読んだことのない方にも、少しは`vim :help`に興味を持っていただけたのではないでしょうか？
ここから、より`:help`を読んでみようと思えるかもしれない事柄を3つ書いていきます。

### 1. Docker上に最新のVimを構築し、:helpを日本語で読んでいく

せっかく`:help`を読んでいくなら、最新の`vim`をビルドしたてで読んでいきたいですよね。
ただこの場合、`:help`は英語となっています。
でも、日本語で読みたい方も多いですよね。

というわけで、最新のVim環境をローカルに構築し、日本語ドキュメントを表示させる方法を下に記載していきます。

手頃に試せる`vim`環境がない方、vimに興味なかったけど...なんか試してみようかなって方は、下記のリポジトリを参照することで、環境を汚さずに気軽にローカルの`docker`上で最新の`vim`環境を試すことが可能です。
(ただし`Docker`環境は必要ですがね。また、dockerのインストールについてはここでは触れません。)

このリポジトリ自体は、元は自身が最新の`vim`環境で色々と気軽に試せるように作ったものです。
最新の`vim`のみをインストールした`docker image`が出来上がります。

https://github.com/shinshin86/vimrc-dev-starter-kit-at-docker

```bash
# セットアップ
git clone https://github.com/shinshin86/vimrc-dev-starter-kit-at-docker.git
cd vimrc-dev-starter-kit-at-docker
docker build -t vimrc-dev .
docker run -it --rm --name vimrc-dev-01 vimrc-dev /bin/bash
```

上記手順を行った後、`vim`と打つと最新のVimが立ち上がるかと思います。
(ちなみに`mac`上でしか動作検証していないので、もし動かないなどあればコメントか`github`に`issue`飛ばしてもらえると幸いです。)

ちなみにこの状態で`vim`から`:help`と打つと英語のhelpが立ち上がるかと思います。
ここから`:help`の日本語化を行っていきます。

日本語で表示するためのプラグインを使います。
プラグイン管理には`vim-plug`を使うことにします。理由は特にありません。
https://github.com/junegunn/vim-plug

```bash
# curlインストール
apt-get install -y curl

# vim-plugインストール
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```

次に`~/.vimrc`に下記の内容をコピペします。

```vim
""""""""""""""""""""""""""""""
" プラグインセットアップ
""""""""""""""""""""""""""""""
call plug#begin('~/.vim/plugged')

" 日本語help
Plug 'vim-jp/vimdoc-ja'

call plug#end()
""""""""""""""""""""""""""""""
set encoding=utf-8
set helplang=ja,en
```

あとは`vim`を起動させてから`:PlugInstall `と打てば、セットアップ完了です。
`:h`と打って日本語の`help`が表示されることを確認してください。



## 2. fxf.vimを使って、より本能的に:helpの中を駆け回る

より高速に:helpを駆け回るために、fzfを使用してみようと思います。


![vim-fzf.gif](https://qiita-image-store.s3.amazonaws.com/0/205976/fd14c81b-424c-df26-81be-ffc5bf6ca034.gif)

`fzf`の説明はたくさん出ているので、検索してみてください。
例えば下記の記事など(実体験談)
https://qiita.com/kamykn/items/aa9920f07487559c0c7e



では、先ほどの`Docker`内で作業していきます。

```bash
# fzfをインストール
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install
source ~/.bashrc
```

`fzf`を`vim`から使うために、`fzf.vim`を`vim-plug`にてインストールします

```vim
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
```

再びvimを起動して、`:PlugInstall`で`fzf.vim`の設定が完了します。
そして`:help`を開き、`:Helptags`と打つことで、より効率的にHelp内のtagsを検索できるようになります。
(別に`:help`を開いていなくとも、`:Helptags`で開けるので困ったときにも便利。)

例えば`channel`の何かしらについて知りたいと思ったら、
`:Helptags`と打ち、`channel`と打ったあたりで候補がずらずらと出てきます。
目的もなく見ているだけでも結構楽しめます。

## 3. vim - help関連の面白そうな記事を読んで、いろんな楽しみ方を知る。
今回アドベントカレンダーで`:help`関連のことを書こうと思ったとき、試しに`vim help`で検索をしてみたら、素晴らしい`help`関連の記事がたくさん見つかりました。
(それはもう、`help`のポストをやめようと思うぐらいに素晴らしい記事が沢山...)

その中でいくつかの興味深い記事をこちらに貼ります。これを見ると、`:help`を読むためのモチベーションがさらにアップするでしょう。

http://haya14busa.com/reading-vim-help/

http://nanasi.jp/articles/howto/help/vim_help.html

http://blog.textfile.org/20140228/vim/

https://qiita.com/from_kyushu/items/b3cb5c721b2ab5e029c4


## 最後に

駆け足ですが、`vim`の`:help`の面白いところ・興味深いところについて好き勝手に書かせてもらいました。

上に載せた`Docker image`ですが、失敗しても気軽に構築できる点を利用して、`vimrc`をいろいろいじりながら`:help`を開いてみるのも面白いかもしれません。

というわけで、皆様、年末も良いVimライフを!