Vimのヘルプ機能を活用して快適Vim生活を送ろう


## はじめに

時々QiitaでもVimのチートシートを見かけることがある。
それを見るたびに、Vimのヘルプ機能さえ押えておけばいいんじゃないかと思っていたのだが、よくよく考えてみればそもそもヘルプ機能の存在を知らない方もいるのでは、と思いヘルプ機能の紹介を書くことにした。

この記事はVimのヘルプを見ながら読んでいただくことを想定しているため、説明の多くを該当ヘルプの引き方を添えて「ヘルプを読んで欲しい」で終わらせている。
手抜きのように思われるかもしれないが、ヘルプを引く練習の一環だと思ってお付き合いいただきたい。

## 0: 日本語ヘルプをインストールする

Vimのヘルプは有志によって日本語に翻訳されている([vimdoc-ja](https://github.com/vim-jp/vimdoc-ja))。
[vim-jp](http://vim-jp.org/)からダウンロードできる香り屋版を利用されている方は最初から日本語版のヘルプがインストールされているが、そうでなければ基本的には自前でインストールする必要がある。
[vimdoc-jaのwiki](https://github.com/vim-jp/vimdoc-ja/wiki)にも説明があるが、こちらでも改めて説明したい。

インストール方法は下記3方法がある。

- zipをダウンロードして展開
- GitHubからclone
- プラグイン管理用のプラグインでインストール

zipをダウンロードしたりGitHubからcloneする場合、`$HOME/.vim`等の`runtimepath`に適時配置するだけでよい。

```shell-session:zipをダウンロードする場合
$ wget https://github.com/vim-jp/vimdoc-ja/archive/master.zip -O vimdoc-ja-master.zip
$ unzip vimdoc-ja-master.zip
$ mkdir ~/.vim/doc # すでにあるなら不要
$ mkdir ~/.vim/syntax # すでにあるなら不要
$ cp vimdoc-ja-master/doc/* ~/.vim/doc
$ cp vimdoc-ja-master/syntax/help_ja.vim ~/.vim/syntax/help_ja.vim
```

この状態ではヘルプタグ情報が作られていないため、Vim起動後に`:helptags ~/.vim/doc`を実行してヘルプタグファイルの更新を行ったほうがよいだろう。

NeoBundleやdein.vim、vim-plug等を利用されている方は他のプラグイン同様にインストールが可能だ。

```vim
call dein#add('vim-jp/vimdoc-ja') " dein.vimの場合
NeoBundle 'vim-jp/vimdoc-ja'      " NeoBundleの場合
Plug 'vim-jp/vimdoc-ja'           " vim-plugの場合
```

上記のように利用しているプラグインに合わせて`.vimrc`等に記述し、インストール用のコマンドを実行すればよい。

### ヘルプのデフォルト言語設定

インストールしただけでは英語版等他言語のヘルプが参照される場合がある。

- `helplang`に日本語が含まれていない場合
- ロケール環境変数(恐らくLC_MESSAGES)が日本語以外になっている場合

このような場合は`.vimrc`等に`set helplang=ja,en`と書くと日本語版のヘルプが優先されるようになる。

## 1: メインヘルプファイルを参照する

`:h`とだけ入力するとメインヘルプファイルが表示される。
`:h`は`:help`コマンドの短縮形だが、よく使うコマンドなので短い`:h`を覚えておくとよいだろう。
メインヘルプファイルを読むだけでも最低限のVimの使い方(カーソル移動と終了コマンド)と、ヘルプの読み方(項目移動や項目指定)が分かる。

メインヘルプファイルの下部には各ヘルプへの目次が並んでいる。
ヘルプは大きく分けて2種類ある。

- ユーザーマニュアル: Vimの操作方法の説明を行う項
- リファレンスマニュアル: Vimの各機能詳細の説明を行う項

ユーザーマニュアルは本のように読み進めるものなので、暇があれば読み進めてほしい。

## 2: 項目を指定してヘルプを参照する

メインヘルプファイルの目次から目的の項目を探すのも良いが、探したい項目がすでに分かっているのであれば項目指定でヘルプを参照する方が早い。
例えばヘルプを開く`:help`コマンドについて知りたければ`:h :h`と入力する。
（ここで`:h h`としてしまうとカーソル移動の`h`についてのページが表示されるので注意すること）

この操作についてのヘルプを表示するには`:h {subject}`と入力する。
私が説明するよりも的確にこの機能について説明されているので、その項を読んで欲しい。

### タグのルール

項目を指定してヘルプを引く方法のコツとして、ヘルプに記載されるタグの命名規則を押さえておくと良い。
メインヘルプファイルに書いてある内容を引用する。

| 種類                     | 修飾子   | 例                  |
|--------------------------|----------|---------------------|
| ノーマルモードコマンド   | `(無し)` | `:help x`           |
| ビジュアルモードコマンド | `v_`     | `:help v_u`         |
| 挿入モードコマンド       | `i_`     | `:help i_<Esc>`     |
| コマンドラインコマンド   | `:`      | `:help :quit`       |
| コマンドライン編集       | `c_`     | `:help c_<Del>`     |
| Vim の起動引数           | `-`      | `:help -r`          |
| オプション               | `'`      | `:help 'textwidth'` |
| 正規表現                 | `/`      | `:help /[`          |


また`Shift`や`Ctrl`キーのような修飾キーについては下記のようなルールとなっている。

| キー種別       | ルール            | 例               |
|----------------|-------------------|------------------|
| Shiftキー      | 大文字を使用する  | `:help G`        |
| Ctrlキー       | 頭に`CTRL-`を付与 | `:help CTRL-]`   |
| その他特殊キー | <キー名>          | `:help <Leader>` |

これらの項目さえ覚えておけば、書籍やWeb上のエントリ、他人の`.vimrc`で知らないオプション等が出てきたときにすぐにヘルプを参照することが出来る。

### ヘルプの言語を指定する

ヘルプのデフォルト言語を日本語にしているがあえて英語版を参照したい場合や、他言語のヘルプを参照したい場合は末尾に`@言語コード`を入力する。

- 例: `:h :help@en`

言語コードについては`:h help-translated`の項にて説明されているので、そちらを参照してほしい。

## 3: ヘルプを検索する

ヘルプファイルを検索する場合には`:helpgrep`コマンドを利用する。
このコマンドについてもヘルプに詳しく書かれているため、`:h helpgrep`と入力して`:helpgrep`のヘルプを参照していただきたい。

この`:helpgrep`だが、日本語を検索語句としても指定できるため、日本語版ヘルプをインストールしている方はぜひ利用してみてほしい。
ただし、7.3.397よりも前のバージョンを利用している場合は日本語では検索できない場合もあるため注意（[参考: windowsでhelpgrepが日本語マッチしない #95 ](https://github.com/vim-jp/issues/issues/95))。

注意事項として、`:helpgrep`は行単位で検索をかけるため、複数行に跨る単語にはマッチしない。
恐らく端末の横幅80カラム(set columns=80)に最適化させるためなのか、日本語版では翻訳ルールとして「1行78カラム以内」としているため、時々単語の途中で改行されているものが存在する。
英語版は軽く眺めた限りでは単語の途中で改行されているものは見つからなかったが、ないとは言い切れない。

## おわりに

普段はヘルプを使わずにサーチエンジン等で検索してWeb上のリソースを参考にする方も多くいらっしゃると思う。
しかし、Vimには良質なヘルプ資源があるため、ぜひ活用してほしい。
Vimのヘルプ機能は日々の操作の手助けになるだけではなく、優れたVimの教科書でもある。
ヘルプを未読の方はGW期間中に読んでみてはいかがだろうか。

なお、Vimのヘルプは有志の方の尽力により更新されているが、古い記述のままだったり、説明が誤っているものがあるかもしれない。
そのような場合は[翻訳作業用リポジトリ](https://github.com/vim-jp/vimdoc-ja-working)にIssueを立てたり、原本から誤っている場合は[vim-jpのIssues](https://github.com/vim-jp/issues)で相談してみるとよいだろう。

## 追記: コマンド一覧が掲載されているヘルプページ

Twitterにて「`:help index`について触れられているともっと良かった」というコメントがあったので追記する。

VimのヘルプにはVimの各機能を列挙した項目が存在する。

| ヘルプページ          | 説明                                                                |
|-----------------------|---------------------------------------------------------------------|
| `:help index`         | Vimのコマンド、ヘルプ内のタグ、短い説明を列挙した項目               |
| `:help option-list`   | Vimのオプションと短い説明を列挙した項目                             |
| `:help functions`     | Vimの関数名、引数、返り値、短い説明をアルファベット順に列挙した項目 |
| `:help function-list` | Vimの関数名と短い説明を機能別に列挙した項目                         |
| `:help vim-variable`  | Vimの定義済み変数の名称と説明を列挙した項目                         |
| `:help help-tags`     | Vimの全ヘルプ項目                                                   |


それぞれ書籍で言えば巻末にある索引のように利用することが出来る。
例えば`:help option-list`を表示し、`/`で求めるオプションがないかを探し、`CTRL-]`で該当のヘルプページを開いて詳細を確認するという使い方が考えられる。