ニュースレター #5 - Out of the Box

2015年4月

Neovimからの優れたコミュニケーションとバグ対応。これまでの私の経験では、模範的なFOSSプロジェクトです。@telemachus

Vimをすぐに使える状態にすることを目指すプロジェクト、Neovimの5回目のニュースレターへようこそ。

一般ニュース

Neovim用Gitter.im

メーリングリストとIRCチャンネルに加えて、Gitter.imが提供するNeovimチャットルームに参加できます。便利なWebインターフェースがありますが、お気に入りのIRCクライアントを使用して接続することもできます。

Black Duck 2014 オープンソースルーキー

他の企業のオープンソースソフトウェア採用を支援する企業であるBlack Duckは、Neovimを昨年紹介するプロジェクトの1つとして選びました。同社は毎年、その年に開始された優れた新しいオープンソースプロジェクトをいくつか表彰しています。

ICCF Hollandへの寄付

前回のニュースレターで述べたように、UnixstickersNeovimステッカーを在庫に追加しました。購入されるステッカーごとに、Bram Moolenaarの慈善団体であるICCF Hollandへの寄付額が増えます。

追加されて以来、106米ドルが調達され、Unixstickersは3月24日に寄付しました

Neovim Wikiには、「関連プロジェクト」というタイトルのページがあり、現在のGUIプロジェクト、APIクライアント、Neovim機能を利用するプラグイン、Neovimを直接サポートするプロジェクトのリストが含まれています。

プロジェクトの中には実験的なものもあり、バグが含まれていたり、開発中である可能性があります。

他にリストできるプロジェクトをご存知ですか?ご遠慮なくリンクを追加してください!

開発ニュース

ターミナルUI (TUI)

@tarrudaは、libtermkeyunibiliumを使用してターミナルユーザーインターフェースを再実装する彼のプルリクエストをマージしました。

Libtermkeyは@leonerdによるライブラリで、「ターミナルベースのプログラムからのキーボード入力の簡単な処理を可能にします」。特殊キー、UTF-8結合文字などを処理できます。

Unibiliumは@maukeによるライブラリで、terminfoとインターフェースします。Terminfoは、デバイス固有の詳細を気にすることなくディスプレイターミナルとインターフェースすることを容易にするライブラリとデータベースです。詳細は、man 5 terminfoを実行してterminfoのマニュアルページで確認できます。

TUIの実装はNeovimの一部として含まれていますが、エディターコアからアーキテクチャ的に切り離されています。外部クライアントやGUIと同じAPIを使用します。

追加のキーバインディング

libtermkeyを使用することにより、NeovimはメタキーCtrl-Shiftの組み合わせをバインドできるようになりました。これらは以前のターミナルでは不可能でした。詳細はこちらで、追加の例と可能性について読んでください。

ビルトインターミナルエミュレーション

@tarrudaは、フルターミナルエミュレータを起動する新しい:terminalコマンドを追加するプルリクエストを完了しました。ターミナルはNeovimのネイティブバッファとウィンドウを使用しているため、ユーザーは<C-\><C-n>を押してノーマルモードに入力できます。

これは、Neovimから削除された既存のVimコマンドである:shellに取って代わるもので、より多くの機能を提供することを目的としています。この機能の決定に関する詳細な説明は、@tarrudaによって作成されたこのコメントにあります。

この機能の完全なドキュメントは、:help nvim-terminal-emulatorにあります。

この機能は、@leonerdの別のプロジェクトであるlibvtermを使用して実装されています。

トゥルーカラー

上記で説明したTUIへの変更により、@tarrudaは、サポートするターミナルにトゥルーカラーを追加するプルリクエストを作成できました。

トゥルーカラーの意味とそれをサポートするターミナルの詳細については、@XVilkaによって記述されたこのGistを参照してください。

トゥルーカラーサポートを有効にするには、環境変数NVIM_TUI_ENABLE_TRUE_COLORを設定します。

Windowsビルド

WindowsでのNeovimのビルドの進捗状況は、2014年7月のニュースレターで初めて詳しく説明されました。

大きなマイルストーンとして、@equalsrafはWindowsでNeovimをビルドすることができ、Windows専用の継続的デリバリーサービスであるAppVeyorにもビルドがあります。

@equalsrafは、要件、依存関係/Neovimのビルド、既知のエラーに関する詳細なメモを提供しました。

今後、@equalsrafは彼の主要なプルリクエストに取り組んでおり、@justinmkは要件と議論を集めるための新しい問題を開始しました。

特殊インターフェースのクリーンアップ

Vimには、多くのエイリアスを通じて起動する多くの方法があります。完全なリストは、Vimのドキュメントの開始セクションにあります。

@Pyrohhは、そのようなエイリアスの削除について議論するために問題を開きました。すべてのエイリアスには、代わりに使用できる対応するフラグがありました。

いくつかの議論の後、あまり使用されていないものを削除することにしました。@Pyrohhは、次のものを削除するプルリクエストを作成しました。

  • ex:Exモード。
  • exim:「改良された」Exモード。
  • view:読み取り専用モード。
  • gvim:GUIの使用。
  • gex:GUIとExモード。
  • gview:GUIと読み取り専用モード。
  • rvim:制限付きモード。
  • rview:読み取り専用と制限付きモード。
  • rgvim:GUIと制限付きモード。
  • rgview:GUI、読み取り専用、および制限付きモード。

さらに、@Pyrohhvimdiffvim -dをマージするための別のプルリクエストを作成しました。

「イージーモード」の削除

@fmoralescは、evimを削除するためのプルリクエストも作成しました。ドキュメントによると、これは挿入モードで開始し、通常のエディターのように動作することを可能にします。

この機能を削除しても、イージーモードで使用されていた基盤となる'insertmode'オプションを使用することで、エミュレートすることは可能です。

GUIの状態

Neovimのグラフィカルな側面は、上記セクションの1つにあるターミナルインターフェースに加えて、いくつかの変更が行われています。

前回のニュースレター以降、次のプロジェクトが順不同で作成されました。

  • SolidOak by @oakes:テキスト編集機能を提供するためにNeovimを埋め込んだ「Rust用のシンプルなIDE」。詳細とバイナリについては、IDEのウェブサイトをご覧ください。
  • Neovim.app by @rogual:マウスサポート、タブ、クリップボードなどを備えたOS Xフレンドリーなエディター。
  • vim-mode by @carlosdcastillo:バインディングとテキスト操作にNeovimを使用する進行中のAtomパッケージ。それを確認するにはこのビデオをご覧ください。
  • python-client by @tarruda:Neovimとの通信のためのPythonライブラリであることに加えて、GTKを使用したインターフェースも含まれています。
  • neovim.as by @coolwangluAtom Shellを使用するアプリケーション。動作中のビデオはこちらで見ることができます。

新しいタブイベント

@fmoralescによってこのプルリクエストで3つの新しいautocommandイベントが追加されました。autocommandイベントは、特定のイベントに応じて何かを実行する方法です。イベントは、特にプラグインで役立ちます。

新しいイベントは、TabNewTabNewEntered、およびTabClosedです。

Job APIを改善するための主要な変更

@tarrudaは、新しいJob APIの改良を続けています。彼の作業は、最新のプルリクエストで続けられています。これは、既存のJob APIを使用する既存のプラグインに対して破壊的な変更となる可能性があります。

この改善は、イベントへの対応にautocommandを使用する以前の方法ではなく、関数コールバック(入力、出力イベント用)を使用することです。

それに加えて、jobwait()jobclose()を含む、VimLにさらに多くのジョブ制御関数があります。

さようなら long_u

Vim固有の整数型に対する壮大な戦いは、過去2回のニュースレター(6月と11月)にわたって続けられてきましたが、@elmartによって、整数型long_uの削除が完了しました。@elmartによる変更は、最後の3つのプルリクエスト(123)に分割されました。

これは、@tarrudaプロジェクト固有の型をすべて削除するという目標に向けた一歩です。残っているのはchar_uだけで、現在約12,300件使用されています。

EndOfBufferハイライトグループの追加

@mhinzは、ファイルの末尾に続く「~」を削除する方法を必要としていました。彼は、現在のグループ一覧に追加して、:highlightグループ「EndOfBuffer」を提案しました。

彼の提案は、最初にvim-devにパッチとして送信され、Bramによって承認され、将来的にVimに取り込まれる予定です。@mhinz@fmoralescに、Neovimへの変更を取り込むためのプルリクエストの作成を依頼しました。このプルリクエストは、その後masterブランチにマージされました。

ガベージコレクションのパフォーマンス

多数のオブジェクトを割り当てるプラグインと共にVimを使用する場合、ガベージコレクションが起動し、解放するオブジェクトの検索に時間がかかるため、Vimがハングすることがあります。

この問題は、松本康宏氏によってvim_devに投稿されました。水谷有哉氏によって記述され、メーリングリストに提案されたパッチは、オブジェクトの検索アルゴリズムを改善します。松本氏のテストケースでは、パッチ適用前のVimの実行時間は100秒でしたが、パッチ適用後は0.134秒でした。

このパッチをNeovimに適用することについて、@Shougoによってissueが作成されました。@oni-linkはその後、パッチを適用するためのプルリクエストを作成し、すぐにマージされました。

Vimexpectと例として挙げられたGDBプラグイン

@tarrudaは、プルリクエストで、Neovim向けにTclのExpectを模倣した小さなVimscriptライブラリを作成しました。

Expect(Tcl内)の目的は、そのような機能を提供しないテキストベースのアプリケーションを簡単にスクリプト化および自動化できるようにすることです。

@tarrudaは、概念実証としてGDB用のプラグインの例を提供しました。このプラグインは、Neovimの開発を容易にし、vimexpectの可能性を示すために作成されました。

オプションの更新

compatibleの削除

Vimには、compatibleオプションがあり、これによりVimはViとの互換性を高めることができます。vim -Cを実行することでも起動できます。

12月、@klusarkは、Viとの互換性モードをオフにするnocompatibleを常に設定するように変更するプルリクエストを作成しました。

つまり、set nocompatibleとフラグ-Nは無効な操作になります。また、互換性モードが存在しないため、set compatibleを実行するとエラーが発生します。

edcompatibleの削除

edcompatibleオプションの削除について議論するために、issueが作成されました。この機能を有効にすると、:substituteコマンドのgおよびcフラグに対して特別な動作が与えられます。実際、Vimのドキュメントではこのオプションの使用を推奨していません。

@Pyrohhは、この機能を削除するためのプルリクエストを作成し、masterブランチにマージされました。

ttyfastの削除

Vimにはttyfastというオプションがあり、「高速なターミナル接続」が存在する場合に設定されます。設定されると、挿入/削除行コマンドを使用する代わりに、描画する文字をより多く送信します。

議論が始まり、8月にはこのオプションをデフォルトとして設定することに合意しました。その後すぐに、@fornwallは、それをデフォルトにするためのプルリクエストを作成しました。

数か月間デフォルトで問題が発生しなかった後、@Pyrohhは、それを完全に削除するためのプルリクエストを作成しました。

常にオン/常にオフのオプションのよりシンプルな処理

次の3つのオプションが削除され、さらに削除される可能性があるため、@fwalchは、これらの常にオン/常にオフのオプションの処理を簡素化するためのプルリクエストを作成しました。

上流Vimパッチ

Neovimは、Vimメーリングリストに送信された上流Vimパッチをマージし続けています。

前回のニュースレター以降、60件以上のプルリクエスト分のパッチがNeovimに送信されました。すべてのパッチの現在のステータスは、Vimパッチレポートで見つけることができます。

お手伝い

寄付

開発を支援したい場合は、Bitcoinを使用してこちらに寄付できます。1Evu6wPrzjsjrNPdCYbHy3HT6ry2EzXFyQ または Neovim Bountysourceページでチームを支援してください。

貢献

経験豊富な開発者の方、または経験は浅いが学習したいと考えている方は、GitHubリポジトリにアクセスし、READMECONTRIBUTINGガイド、そしてWikiを参照して詳細を学ぶことができます。

お手伝いできる機会ややるべきことがたくさんあります。

まとめ

このニュースレターに関するフィードバックやご提案はありますか?Neovim Twitterからお気軽にお問い合わせください。

このニュースレターでは、コミュニティのすべての貢献とサポートを網羅することはできません。前回のニュースレター以降の月間に、何らかの形で貢献してくれた他のすべての貢献者の方々に感謝申し上げます。

Neovimの世界で何が起こっているか最新情報を入手するには、RSSフィードを購読してください。次のニュースレターは数か月後に公開されます。

次回まで。:wq

ニュース

ニュースアーカイブでさらに多くのアップデートをご覧ください。RSSフィードもあります。

Neovimとは?

Neovimは、拡張性使いやすさのために設計されたVimベースのテキストエディターであり、新しいアプリケーションと貢献を促進します。

議論

チームとチャットするには、#neovim:matrix.orgまたはirc.libera.chatの#neovimにアクセスしてください。