Neovim ニュースレターの配信です! 新機能のみに関心のある方は、楽しい部分と新機能のセクションにスキップしてください。また、プロジェクト管理にも変更点がありますのでご確認ください。
毎分、新しいテキストエディタが誕生しています(出典:Hacker News)。「一般的なケース」に対応する無数のテキストエディタが存在します。
Neovim ユーザーは、別のVimライクなテキストエディタではなく、より良いVimを求めています。Vimのコアには、数十年にわたって蓄積された何千もの小さな決定が組み込まれており、それらの決定のほとんどは依然として関連性があり、新しいプロジェクトではまだ遭遇しておらず、消化して決定する微妙な問題を解決しています。
Neovimは、Vimをリファクタリングして、今後30年間のハッキングにも対応できるようにすることを目的としています。変更点と改善点については、:help vim-differences
を参照してください。
Neovimは、Vimコミュニティの長い歴史とユーザー習慣を非常に意図的に構築しています。つまり、VimからNeovimへの「切り替え」は単なる「アップグレード」です。Vimの新しいバージョンをインストールするようなものです。Vimしかないサーバーやワークステーションにログインしても、困ることはありません。Vimに関する記事を見つけた場合、:smile
に関するものでない限り、Neovimにも適用される可能性が高いです。
そのため、Vimが好きならNeovimを試してみてください。Vimが大好きなら、こちらを試してみてください;)
Neovimの明確な目標の1つは、最初から
メンテナンスの簡素化と貢献の促進
私たちはハック可能なVimを求めています。つまり、実験と新機能の低コストな試行を可能にするコードベースとコミュニティです。
そして、その野望に向けた真の進歩の証拠があります。私たちは、非自明な「ロードマップ外」のパッチを成功裏に実行しました。これらの機能は、作成者にとって重要ですが、プロジェクトの最優先事項ではありません。
:tchdir
はタブローカルの「作業ディレクトリ」を有効にします。'statusline'
は無制限の整列セクションをサポートします(PR #4489)man.vim
は、補完、ハイライトの改善などを提供します。これらのパッチは、
:help nvim-features
で簡単に触れられています :)
:smile
なしの楽しい部分?新しいクライアントと革新的なアプリケーションがかつてないほど頻繁に登場しています。
<neovim-editor>
Webコンポーネントは、VS Code、Atom、その他のElectronまたはnw.jsプロジェクトを含む独自のプロジェクトで使用できます!nvim
に目を向け、彼の有名なVimRプロジェクト(洗練されたmacOS用GUI)の新しいnvim
ベースのバックエンドを急速に進めています。macOS 10.11用のプリビルド.app
バンドルは、リリースページにあります。:Lispdo
が含まれています!--servername
、--remote
などをサポートするようになりました。nvr
は、:terminal
バッファから親nvim
インスタンスと通信するのに最適です。Go、Julia、Perl、Java、R、Elixir、Clojureなどに対応したクライアントがあります。新しいプロジェクトが登場したら、関連プロジェクトのWikiページをご覧ください!
明確さと一貫性によって貢献が生まれる。— @robertmeta
7月、Thiago (@tarruda)は、個人的な理由でプロジェクトへの関与を減らしました。彼は将来、積極的に貢献を再開することを望んでいます。
一部の人々は、「BDFL」を指名することを求めています。@justinmkがその役割を担っていますが、あなたが望むのであれば:私たちは管理者の役割を文書化する手順を踏みました。そのため、将来はほとんどの貢献者から信頼されている人が引き継ぐことができます。
究極の目標は、タスクを可能な限り水平に分散し、「コミット権」を私たちが信頼するようになった人に与え続けることです。現在、14人のコア貢献者がいます。それを50人に拡大したいと考えています。プロジェクトを英雄的な努力に依存させるのではなく、Vimコミュニティの規約と礼儀作法の中で働く関心のある人々の流れを望んでいます。
(進行中の)成功した資金調達キャンペーンにより、libmpack、:terminal
、主要なリファクタリングと改善(例:UIロジックのTUIからの分離)が実現しました。Thiagoがプロジェクトへの関与を減らしたため、資金は他の開発者にも利用可能になりました。
@ZyX-Iは、Neovimへの多作なコミッター(21 kLOC貢献)であり、Vim(13 kLOC、if_python
を含む)にも貢献しており、「リード開発者」、つまり資金を受け取る開発者の役割を引き受けることに同意しました。彼のNeovimでの作業には以下が含まれます。
msgpackparse()
とos/fileio.c
(バッファ付きI/O)などの重要な内部構造資金は常に1人に送られるわけではありません。Neovimに集中するために1か月以上を費やしたいコア貢献者であれば誰でも利用できます。
資金調達は毎月行われるため、(うまくいけば)摩擦の少ない決定になります。
:smile
がないにもかかわらず)プロジェクトに満足したら、誓約を継続してください!Neovim APIは、プロジェクトを定義する技術的および「ソフト」な機能の1つです。PR #5535で、クライアントを壊すことなくAPIを成長させるための戦略を策定しました。
2.0
(もしあれば)まで、非推奨のAPI関数を削除することはありません。APIは成長するだけで、壊れることはありません。各API関数は、最初に利用可能になったAPIレベルでマークされています。これにより、多数のNeovim APIクライアントが任意のリリースされたバージョンのNeovimをサポートすることが容易になります。
PR #4934以降、現在のnvim
プロセスのAPIをVimLから直接呼び出すことができます。
:echo nvim_buf_get_lines(42, 1, 3, v:false)
コマンドラインで:call nvim_<Tab>
を試して利用可能なAPI関数を確認するか、nvim-api-viewerプラグインをインストールして、利用可能なAPI関数の概要を確認してください。
私たちはAPIの信頼性を真剣に受け止めており、設計について慎重に検討してきました。プラグインとクライアントの作成者からのフィードバックを歓迎します!
1年前、最初のリリース0.1
を発表しました。リリースプロセス(バージョン管理、タグ付け、変更ログ、発表)を合理化しました。
一部のユーザーは、0.1
はNeovimが不安定であることを意味するのではないかと疑問に思っています。
0.1
以降の各リリースは、Windowsを除くすべてのシステムで使用できる安定版と見なされています。0.2
からファーストクラスのターゲットになります。1.0
までは、API以外の機能で下位互換性がなくなる可能性があります。これはまれであり、これらのケースは常に文書化されています。0.1.6
でAPIのバージョン管理を導入しました。クライアントは、使用する関数を動的に決定できます。semverに従っています。そこでの推奨事項は、0.x
シリーズの意図を説明しています。
OSパッケージが増えています。NeovimはDebianの次のリリースに含まれています! DebianのメンテナーでありNeovimの貢献者でもある@jamessan、@fwalch、その他お気に入りのシステムのパッケージを作成し、避けられないコンパイラ/プラットフォーム特有の問題に対処するために協力してくれた皆さんに感謝します。
2014年以降、Neovimの貢献者は何を達成しましたか?
控えめに見積もっても、少なくとも2万行の新しいCコードが記述されました。Vim独自のテストスイートに合格することに加えて、2200個の新しいテストを作成しました。273人の異なる人がコアプロジェクトに貢献しました。コアプロジェクトは、3年間にVimが12年間に書いたよりも多くのコミットがあります。
主要なリファクタリングと機能の作業に加えて、Neovimの継続的インテグレーション(CI)システムに多くの時間が費やされました。安定しているが壊れやすいCコードベースでは、メンテナーは「小さな」機能を無視する傾向があります。なぜなら、リスクが高すぎる可能性があるからです。CIは脆弱性を軽減するため、変更を恐れるのではなく、歓迎することができます。
新しい機能は、スクリーンテストを使用して厳密にテストできます。たとえば、'wildmode'
UIの動作をテストするテストを次に示します。
describe("'wildmenu'", function()
it(':sign <tab> shows wildmenu completions', function()
execute('set wildmode=full')
execute('set wildmenu')
feed(':sign <tab>')
screen:expect([[
|
~ |
~ |
define jump list > |
:sign define^ |
]])
end)
end)
2014年にVimをフォークして以来、不安定な時期もありましたが、その差はますます小さくなり、2017年には解消される見込みです。回帰修正はすべて統合テストでカバーされています。各プルリクエストは12種類の異なる環境でビルドされます。ビルドシステムへの貢献に対して、@jszakmeisterさん、@fwalchさん、@ZyX-Iさんに、また非常に困難なバグの修正に対して@oni-linkさんに、深く感謝いたします。
ソーシャルメディアからの最も強い印象の一つは、人々がNeovimを試す際に「摩擦の少なさ」を本当に高く評価していることです。**デフォルト設定が重要です。** 私たちが選択した多くのデフォルト設定のキュレーションにおいて、Tim Pope氏の功績は称賛に値します。キュレーション
@fmoralesc氏をはじめとする多くの人々が、回帰を引き起こすことなくこれらのデフォルト設定を実装する方法について慎重に検討しました(encoding=utf8
と構文/ファイルタイプは困難でした)。この作業は大変でしたが、その価値はありました。これは、新規ユーザー、新しいシステムを使用する旧来のユーザー(今日のいたるところにあります:VM、コンテナ、サーバー…)、そしてVimの「ベストプラクティス」を広めることですべてのユーザーを支援する**一度限りの**コストです。
前回のニュースレター以降の新たな展開をご紹介します。
:ruby*
コマンドもサポートされていることを意味します(Command-tやvim-github-dashboardなど、既存のVim+RubyプラグインがNeovimで動作します)。gem install neovim
を実行するだけです。特定のバージョンにコンパイルする必要はありません。:CheckHealth
は、一般的な問題(Homebrewのdoctor
など)を検出します。Neovimのインストールまたはアップグレードのたびに実行してください。:help api-highlights
)はmatchaddpos()
に似ていますが、いくつかの重要な違いがあります。バッファに関連付けられており、**行の挿入と削除に適応します**。バッファの変更を監視し、バックグラウンドでハイライトを計算するリンターやセマンティックハイライタープラグインに役立ちます。PR #4432で@bfredl氏が、「ウィジェット」の表示に対するUIの制御を強化するための第一歩を踏み出しました。UIへの制御の強化 @romgrk氏はすぐに概念実証を作成しました。
すぐに、**コマンドライン、タブ、wildmenu、プレビューウィンドウウィジェットを外部化する野心的なパッチ**ambitious patchが登場しました。デモは素晴らしい可能性を示しています。
この作業は、@tarruda氏が端末UI(TUI)と内部画面を明確に分離したため可能になりました。そのため、**組み込みのTUIでさえ、他の外部UIと同様にUIイベントによって制御されます**。
:substitute
2016年5月、Eric Burel氏に指導された学生グループがNeovimへの貢献について連絡してきました。私たちが提示したアイデアのリストから、彼らは:substitute
の「ライブプレビュー」を実装することにしました。PR #5561でマージされ、0.1.7
でリリースされました。inccommand
オプションを設定して試してみてください。
:set inccommand=split
この機能は、私たちの開発モデルによって実現しました。「時間がない」サイドプロジェクトにも関わらず、基本的なアイデアを概説し、学生が自主的に決定し、必要に応じて説明を提供しました。
Eric氏はその経験について書いています。Eric氏、ENSIMAGの学生、@KillTheMuleさん、@bfredlさん、この機能を私たちが誇りに思える結論に導いていただき、ありがとうございました。
Neovim 0.3
では、2017年に以下の展開を予定しています。
eval.c
がモジュールに分割され、NeovimのVimL実装がVimのものから分岐する時点となります。これは、世界で2番目の**代替VimL実装**となります(ZyX氏のVimLからLuaへのPRが最初でした)。これがNeovimの2016年でした。2017年はNeovimデスクトップの年になるでしょうか?
Neovimのアイデアは、XiエディタやVim自体など、他のプロジェクトにも取り入れられています。Vimは今年、過去最高の活況を呈しています。今年、過去最高の活況
GitterとIRCチャンネル(matrixによってブリッジされています。 @leonerdさんありがとうございます!)には活気があります。ぜひご参加ください。
また、プロジェクトの今後の進捗状況については、neovim.ioのロードマップをご覧ください。
お読みいただきありがとうございました。
—Justin M. Keyes (@justinmk)
$ git log --grep='\([zZ]y[xX]\)\|\([nN]ikolai [pP]av\)\|\([nN]ikolay [pP]av\)' --numstat --pretty=tformat: --numstat|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 22590 removed lines: 8620 total lines: 13970
$ git log --grep='[cC]hristian [bB]rab' --numstat --pretty=tformat: --numstat|gawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 10000 removed lines: 3033 total lines: 6967
$ ohcount msgpack_rpc/ api/ os/ event/ tui/ shada.c rbuffer.c terminal.c memory.c
c 79 14576 2863 16.4% 2154 19593