diff --git a/_posts/blog/2016-09-13-vim8-release.md b/_posts/blog/2016-09-13-vim8-release.md new file mode 100644 index 00000000..f3369b78 --- /dev/null +++ b/_posts/blog/2016-09-13-vim8-release.md @@ -0,0 +1,134 @@ +--- +layout: blog +category: blog +title: Vim 8.0 released + +--- +2016-09-13、前メジャーバージョンから10年、Vim 7.4 からは3年の歳月を経て Vim の最新版である Vim 8.0 がリリースされました。 + +Vim 8.0 の大きな変更点としては、まず多くのバグ修正が上げられます。7.4 に存在した数多くの問題が修正されています。 + +また以下の素晴らしい機能拡張も行われました。 + +## チャネルによる非同期 I/O のサポート (Channel) + +バックグラウンドプロセスと非同期にメッセージを交換できる仕組みが実装されました。JSON で通信するサーバと対話する事も出来ます。 + +詳しくは `:help channel` を参照して下さい。 + +## ジョブ (Job) + +これまで外部コマンドを実行する際にブロックしていましたが、ジョブ機能の追加により非同期にコマンドを実行する事ができる様になりました。また channel 機能を使って標準入出力を経由し、非同期にメッセージを交換できます。 + +詳しくは `:help job` を参照して下さい。 + +## タイマー (Timer) + +非同期にタイマーを実行できます。 + +```vim +let tempTimer = timer_start(4000, 'CheckTemp') +``` + +この例では 4000 ミリ秒後に CheckTemp 関数が実行されます。繰り返し実行する場合には、第3引数に repeat オプションを付与します。 + +```vim +let tempTimer = timer_start(4000, 'CheckTemp', {'repeat': -1}) +``` + +repeat に3を指定すると3回実行され、-1 を指定すると永遠に実行されます。 + +詳しくは `:help timer` を参照して下さい。 + +## パーシャル (Partial) + +Vim には元々、関数リファレンスが実装されていますが、引数の一部またはself辞書を保持した状態で関数を参照できます。 + +上記のタイマーの例を使う場合、下記のコードでは CheckTemp 関数の第一引数に任意の引数を割り当てられます。 + +```vim +let tempTimer = timer_start(4000, function('CheckTemp', ['out'])) +``` + +詳しくは `:help Partial` を参照して下さい。 + +## ラムダ (Lambda)、クロージャ (Closure) + +これまで sort に比較関数を指定したり filter に適用関数に指定する場合は、別途名前付きの関数を用意しなければなりませんでしたが、Lambda を指定できる様になりました。 + +```vim +call filter(mylist, {idx, val -> val > 20}) +``` + +また Lambda ではスコープ内変数が参照できるので Closure として振る舞えます。 + +```vim +function Foo(arg) + let i = 3 + return {x -> x + i - a:arg} +endfunction +let Bar = Foo(4) +echo Bar(6) +``` + +詳しくは `:help lambda` および `:help closure` を参照して下さい。 + +## パッケージ (Packages) + +近年では多くの Vim プラグインがディレクトリ単位で配布されているため、簡単に追加と削除が行える仕組みが追加されました。 + +詳しくは `:help packages` を参照して下さい。 + +## 新しいスタイルのテスト (New Style Tests) + +これは Vim 開発者の為の機能ですが、これまでは体系だったテストフレームワークが提供されてこなかった為に可読性の低いテストが行われてきました。Vim 8.0 では テスト専用の API が用意され、より可読性の高いテストが実施されます。 + +詳しくは `:help test-functions` を参照して下さい。 + +## ウィンドウID (Window IDs) + +これまでのウィンドウ管理は、オープンしたりクローズしたり、移動を行うと番号が変更される数値の体系で管理されてきました。新しい API によりユニークなIDが付与される様になります。 + +詳しくは `:help win_getid()` および `:help win_id2win()` を参照して下さい。 + +## タイムスタンプを使用した Viminfo (Viminfo uses timestamp) + +これまでの viminfo は最終の変更のみが書き込まれていましたが、タイムスタンプを用いて直近の幾らかのアイテムが保存される様になりました。 + +詳しくは `:help viminfo-timestamp` を参照して下さい。 + +## インデントを付けて折り返し (Wrapping lines with indent) + +`breakindent` オプションにより折り返された行にインデントが付けられる様になりました。 + +詳しくは `:help breakindent` を参照して下さい。 + +## Windows での DirectX サポート (Windows: DirectX support) + +`renderoptions` オプションが追加され、DirectX (DirectWrite) により文字が描画できる様になりました。 + +詳しくは `:help renderoptions` を参照して下さい。 + +## GTK+ 3 サポート (GTK+ 3 support) + +挙動の異なりにより多くの技術的な障壁がありましたが、GTK+ 3 での動作が GTK+ 2 同等となりました。configure を実行時に GTK+ 2 と GTK+ 3 が両方入っている場合には未だ GTK+ 2 が選択されます。詳しくは src/Makefile を参照して下さい。 + +その他の詳細は `:help gui-x11-compiling` を参照して下さい。 + +## ビジュアル選択時の CTRL-A/CTRL-X + +こちらは vim-jp の記事を参照して下さい。 + +[Visual モード時の CTRL-A/CTRL-X について](http://vim-jp.org/blog/2015/06/30/visual-ctrl-a-ctrl-x.html) + +## defaults.vim + +Vim のオプションの幾らかには多くのユーザが期待しない規定値が使われてきました。`nocompatible` オプションを含む新しいユーザにとって親切な規定値が defaults.vim としてロードされます。 + +どのオプションの規定値が変更されたかについては patch 7.4.2111 の内容を参照するか、defaults.vim のスクリプトの中身を参照して下さい。 + +その他、数えきれないほどのバグが修正されています。vim-jp からも多くのコントリビュータが誕生しました。vim-dev で活躍する開発者の方々に感謝します。 + +ぜひ新しくなった Vim を試してみて下さい。そして何か問題を見つけたらぜひ vim-jp に[報告](https://github.com/vim-jp/issues)頂き、一緒に Vim を良くして行きましょう。 + +Happy Vim Life!