さて、皆さんに問題です。2016 年 9 月 12 日とは何の日ですか?宇宙の日? 違います。もちろん Vim 8.0 のリリース日です。これはテストに出るのできちんと覚えておきましょうね。Vim 使いの「ブイ」(仮名)です。記念すべき 1 回目のテーマは「Vim 8.0 とは?」です。Vim 7.0 から Vim 8.0 の新機能について簡単におさらいし、Vim 8.0 はこれまでとは何が異なるのかについて解説を行います。
1 Vim 7.0 の新機能¶
Vim 7.0 は 2006 年 5 月にリリースされました。今からちょうど 10 年ほど前ですね。具体的な新機能については、:help version-7.0
を参照してほしいのですが代表的なものは以下です。
- Vim script の強化(リスト型、辞書型、関数参照型の追加)
- 組み込みスペルチェック
- MzScheme 外部インタフェース
- タブ
- オムニ補完
- アンドゥブランチ
- vimgrep
- ユーザー定義オペレータ
- ロケーションリスト
- メッセージプロンプトがスクロール可能に
- netrw によるリモートファイル編集
- cursorline, cursorcolumn オプション
これまで「Vim のすゝめ」で紹介したような、現在ではできてあたり前となっている機能のかなりの部分が Vim 7.0 で追加されたことが分かります。メジャーバージョンアップにふさわしい新機能の数々です。Vim 7.0 の新機能がなければ、Vim は現代でもここまで広く使われ続けることはなかったでしょう。
2 Vim 7.1 の新機能¶
Vim 7.1 は 2007 年 3 月にリリースされました。Vim 7.0 からほとんど期間が空いていないからか、新機能はありません。
3 Vim 7.2 の新機能¶
Vim 7.2 は 2008 年 8 月にリリースされました。具体的な新機能については、:help version-7.2
を参照してほしいのですが代表的なものは以下です。
- Vim script に浮動小数点型の追加
- 暗号化サポート
Vim script に浮動小数点型が追加されたことにより、Vim script で学術計算やレポートのためのスクリプトを書くことができます。Vimmer の皆さんは Python, Ruby, Perl よりも Vim script のほうが得意でしょうから、これで課題が多い日も安心ですね。
4 Vim 7.3 の新機能¶
Vim 7.3 は 2010 年 8 月にリリースされました。具体的な新機能については、:help version-7.3
を参照してほしいのですが代表的なものは以下です。
- アンドゥの永続化
- より優れた暗号化アルゴリズムサポート
- conceal
- Lua, Python3 外部インタフェース
- 相対行番号表示機能
- colorcolumn オプション
- getabvar(), settabvar()
- strchars(), strwidth(), strdisplaywidth()
アンドゥが永続化されるようになったことにより、Vim がクラッシュしてもアンドゥができるようになりました。これは Vim 作者の Bram 氏すら vim_dev で日常的な使用を明かすほど便利な機能です。
conceal とは、シンタックスハイライトの新機能の一つで、バッファ内である特定のパターンを非表示にしたり、文字列に置き換えたりする機能です。マーカーを隠すためにプラグインが内部的に利用することもあります。
今では一般的になっていますが、Lua 外部インタフェースや Python3 インタフェースもこの時期に追加されました。
5 Vim 7.4 の新機能¶
Vim 7.4 は 2013 年 8 月にリリースされました。具体的な新機能については、:help version-7.4
を参照してほしいのですが代表的なものは以下です。
Vim 7.3 のリリースからかなり期間が空いたために、数多くの新機能が搭載されています。
- 正規表現エンジンの刷新
- Python 外部インタフェースの強化
- ビット演算関数の追加
- ハッシュ計算関数の追加
- InsertCharPre, CompleteDone, TextChanged, TextChangedI 自動コマンド追加
- Lua 外部インタフェースのバグ修正
正規表現エンジンの刷新は Vim 7.0 以来の大掛りな変更です。この変更により、標準の正規表現エンジンはバックトラックを用いたものから状態機械を用いるものになりました。正規表現パターンによって効果は異なるため、必ずしも高速化するとはいえないのですが、JavaScript や XML のシンタックスハイライトは高速化したようです。
Python 外部インタフェース機能が強化されたことにより、Python 外部インタフェースとVim script のやりとりがより簡便になりました。
ビット演算関数の追加により、バイナリをごにょごにょするような Vim script が書きやすくなりました。
ハッシュ計算関数の追加により、外部コマンドを使わなくてもダウンロードしたファイルのハッシュ値をチェックしたりすることが容易になります。
補完関連のプラグインでよく利用される自動コマンドが多数追加されたのもこの頃でした。
6 Vim 8.0 の新機能¶
Vim 8.0 は 2016 年 9 月にリリースされました。具体的な新機能については、:help version-8.0
を参照してほしいのですが代表的なものは以下です。
- 非同期通信(channel)
- ジョブ制御
- タイマー
- Partial
- ラムダ式
- クロージャ
- パッケージ管理
- テスト関数追加
- ウインドウ ID
- viminfo 強化
- breakindent
- DirectWrite サポート
- GTK+3 サポート
- 端末 24 bit カラー対応
- 大量の細かな新機能
リストを一目見るだけで、Vim 7.0 と同程度かそれ以上の新機能が追加されていることが分かります。メジャーバージョンアップにふさわしいと言えるでしょう。だからこそ Vim 7.5 ではなく、Vim 8.0 なのです。
非同期通信機能とは、処理が終わらなくても Vim の操作をブロックせずに後で処理を行う機能です。時間がかかる処理を実行しても待たされなくなるので、これまでの Vim プラグインの常識を変えます。
ジョブ制御機能とは、Vim から非同期処理を行うために外部プロセスを起動する機能です。非同期処理の大部分は外部プロセスとの通信でしょうから、非同期通信機能とセットで重要な機能と言えます。
タイマー機能とは、一定の時間毎に関数を呼び出す機能のことです。主にポーリング処理を実現することに使いますが、Vim script でゲームを作るにも役立つかもしれません。
Partial とは部分適用のことです。簡単に説明すると、2 引数関数を 1 引数関数に変換したりといったことが行えるようになったのです。ただし、Vim script の部分適用は言語の機能ではなく、function()
が関数の部分適用を行った関数を返すということで実装されています。Python の functools.partial と似たようなものです。
ラムダ式とはちょっとした関数を式の中で簡単に定義する機能です。Vim を日頃からお使いのあなたは日常的に Vim script を書いていると思いますが、「ここでちょっとした関数を書けたらな」と思ったことはありませんか。ラムダ式はこんなときに使えます。
クロージャとは、ラムダ式を生成したときにラムダ式が参照している値をコピーする機能です。クロージャを用いるとラムダ式の中に状態を閉じ込めることができます。
パッケージ管理機能とは、一定のディレクトリにプラグインを配置することで Vim で読み込むプラグインを自由に制御する機能です。ただし、このパッケージ管理機能にはプラグインをインストールしたりアップデートしたりという機能はありません。インストールやアップデートも行いたい場合は、専用のスクリプトを用意する必要があります。
テスト関数とは、Vim script に単体テスト用のアサート関数がいくつも追加されたことを言います。これらは本来 Vim 本体の機能を Vim script でテストするために追加されたのですが、もちろんプラグインでも使うことができます。
ウインドウ ID とは、一つ一つのウインドウにユニークな ID を付加することで「あのウインドウにジャンプ」という処理を簡単に記述することができる機能です。
viminfo 強化とは、複数の Vim を同時に使用していたとき、タイムスタンプを利用して viminfo のマージが行われるようになったということです。
breakindent とは、行が折り返しになったときにインデントが保持されるようになる機能のことです。
DirectWrite サポートとは、Windows 環境下で DirectWrite を用いた描画を行えるようになったということです。これにより、描画の高速化やアンチエイリアスによる美しい描画が期待できます。
GTK+ 3 サポートとは、Linux/BSD 環境の GUI Vim (GVim) が GTK+3 に対応したということです。GTK+2 は既に時代遅れとなりつつあるので、現在広く使われている GTK+3 への移行が行えるようになったのは朗報でしょう。
Vim 7.0 の時代、Vim のライバルというのは IDE でした。Vim 8.0 の時代はテキストエディタの復権が行われ、Atom, SublimeText, VisualStudioCode といった新たなエディタが多数現れました。新しいエディタのほとんどは IDE のような機能を内包しています。さらに方針の違いにより Vim から neovim が fork するなど、テキストエディタの状況は混沌化しつつあります。Vim 8.0 の新機能というのはこのような世相を反映しているのです。
次回からは「Vim 8.0 のすゝめ」実践編となります。Vim 8.0 の具体的な新機能について実際の例を挙げながら紹介していく予定です。この連載を見ている熱心な読者の方々なら、Vim 8.0 がリリースされた瞬間にバージョンアップしているでしょうが、万が一まだ手元に Vim 8.0 を用意していない人は次回までに用意しておきましょう。それでは次回をお楽しみに!
See you the next Vim8.0!
This article is made by Vim.