ニュースレター #8 - Windows を開く

2017年12月

Neovim とは?

Neovim は、拡張性と使いやすさに焦点を当てた、由緒あるテキストエディタ vim のフォークです。書き直しではなく、Vim の継続と拡張です。多くのクローンや派生版が存在し、非常に巧妙なものもありますが、どれも Vim ではありません。Neovim は、Vim の良い部分と、さらに多くのものを求めるユーザーのために構築されています。:help vim-differences に違いのリストがあります。

参加

Neovim への貢献に関心のある方は、CONTRIBUTING.md を読んで開始してください。優れたテストスイートと自動化された CI を備えているため、すぐに参加して試すことができます。コメントを得るために PR を開いたり、インフラストラクチャを利用したりすることを恐れないでください!

チームと連絡を取り合うには、gitter チャネルIRC からもアクセス可能)に参加するか、多くの開発者が閲覧しているNeovim サブレディット を訪れてください。会話に参加することも、貢献です!

新規貢献者紹介: 多くのvim パッチ の移植を担当してくれた@ckelselさん、そして@loneroverさん、ありがとうございます!

以前からの貢献者紹介: コミットログにはあまり名前が出てきませんが、長期間にわたって変更のレビューと複雑な PR の改善に大きく貢献してくれた@oni-linkさん、ありがとうございます!

新機能

前回のニュースレターは少し古くなってしまったので、Neovim の世界における最新情報をお届けします。

それ以来、Neovim は3つものリリースがありました。まずそれらを簡単に振り返ってみましょう。

リリース 0.2

このリリースでは、多くの修正と改善が加えられています。以下でいくつか詳しく見ていきますが、詳細についてはリリースページも確認してください。

ユーザー向け 0.2

  • Microsoft Windows が完全にサポートされるようになりました。
    • :terminal モードは 0.2.1 で利用可能になりました(下記参照)。
  • このリリースから、Neovim は macOS と Windows(32 ビットと 64 ビット)のプリビルドパッケージを提供しています。Windows パッケージには GUI と、curl.exe などの追加ツールが含まれています。
  • :terminal に様々な改善が加えられました (@justinmk, #6185)
    • findfile():findgf:terminal バッファで動作するようになりました (@tweekmonster, #6009)
    • ターミナルの応答性を維持するために、シェル出力のスロットリングが行われるようになりました (@justinmk, #5396)
    • シェルコマンドの引数が :term で正しく動作するようになりました (@friedsock, #4504)
  • man.vim に多数の改善が加えられました (@m-wynn, @raichoo, @renstrom, @justinmk, #6693, #6766, #6815, #3104, #7405)
  • man ページとヘルプページに目次 (TOC) が追加されました (@tweekmonster, #5169)
  • メッセージ Reading from stdin が削除されました (@msva, #6298)
  • guicursor が TUI で動作するようになりました (@teto, #6423)
  • 空白文字関連の listchars 用に新しいハイライトグループ Whitespace が追加されました (@zhou13, #6367)
  • コマンドライン補完が実装されました (@justinmk, #6376)
  • autocommand 用のイベント DirChanged が利用可能になりました (@mhinz, #5928)
  • cpoptions: _ フラグを使用して cw の動作を切り替えることができます (@raichoo, @chrisbra, #6235)
  • CTRL-R でコマンドラインに貼り付けるときに、末尾の ^M が省略されるようになりました (@justinmk, #6137)
  • 空白文字をエスケープせずにファイル名を :edit できるようになりました (@Kurt-Bonatz, #6119)
  • デフォルト値の変更
    • mouse=a がデフォルトではなくなりました (@justinmk, #6022)
    • NVIM_TUI_ENABLE_CURSOR_SHAPE が削除されました。guicursor を代わりに使用できます (https://github.com/neovim/neovim/releases/tag/v0.2.0 を参照)
    • showcmdbelloff=allruler がデフォルトになりました (@justinmk, #6087)

開発者向け 0.2

  • :help api で完全な API ドキュメントを参照できます。
  • API の変更
    • {get,set}_option が適切なローカルオプションを更新するようになりました (@yagebu, #6405)
    • nvim_get_mode が利用可能になりました (@justinmk, #6247)
    • 外部 UI がタブラインを描画できるようになりました (@dzhou121, #6583)
  • writefilefsync オプションに従うようになりました (@ZyX-I, #6427)
  • vim チームからの貢献(7.4.{2055,2057,2058})に加えて、eval.c がリファクタリングされ、エラーメッセージが改善されました (@ZyX-I, #5119)
  • id 関数が利用可能になり、printf(%p) がついに役立つようになりました (@ZyX-I, #6095)
  • g:loaded_* が存在する場合は、すべてのプロバイダーが無効になります (@justinmk, commit)
  • setpos で他のバッファの小文字のマークを設定できるようになりました (@hardenedapple, #5753)
  • Neovim が終了しているかどうかを確認するために v:exiting を確認できます (@mhinz, #5651)

リリース 0.2.1

次に、0.2.1 で何が起こったかを見てみましょう。前と同様に、詳細についてはリリースノートを確認してください。

ユーザー向け 0.2.1

  • Nvim がウィンドウローカルのハイライトをサポートするようになりました (@bfredl, #6700)
  • さらなるターミナルの改善
    • TUI カーソルの移動、SGR、スクロールの最適化、カーソル形状とターミナルタイプの認識の改善がマージされました (@jdebp, #6816)
    • 行番号列を使用する場合、ターミナルバッファが調整されます (@tecywiz121, #7440)
    • 新しく作成された :terminal は、ノーマルモードのままになります (@nelstrom, #6808)
  • コマンドラインに色を付けることができるようになりました (@ZyX-l, #6364)
  • カスタムクリップボードプロバイダーを構成できるようになりました (@nhooyr, #6030)
  • クリップボードプロバイダーが tmux サポートにフォールバックできるようになりました (@xu-cheng, #6894)
  • :Tutor のさらなる改善が行われました (@fmoralesc, #7028)
  • inccommandkeeppattern のような先行修飾子で動作するようになりました (@jamessan, #6967)
  • Ruby ホストを構成できるようになりました (@alexgenco, #6841)
  • 名前のないレジスタが再起動時に保持されるようになりました (@AdnoC, #4700)
  • Windows ユーザー向け
    • Neovim をコンソールで使用できるようになりました (@equalsraf, #6315)
    • :terminal が実装されました (@erw7, #7007)
    • Windows でのパス処理が改善されました (@aignas, #7349)
  • Linux ユーザー向け
    • AppImage パッケージをダウンロードできるようになりました (@AdnoC, #6638)
    • ファンクションキーがターミナル UI で動作するようになりました (@rjmill, #5014)
    • 非常に長い行(1億を超える仮想列)でのクラッシュが修正されました (@Grimy, #3527)
    • :cquit がオプションのエラーコードを引数として受け取るようになりました (@joshleeb, #7336)
    • tmux でのトゥルーカラーが修正されました (@DarkDefender, #7100)
    • :checkhealth がビルトインになり、$VIMRUNTIME を検証するようになりました (@justinmk, #7399)
    • cursorcolumncolorcolumn がシンタックスハイライトを尊重するようになりました (@zhou13, @justinmk, #7364)

開発者向け 0.2.1

  • 変更点
    • 外部 UI は、<FocusGained> 仮想キーを送信する代わりに、FocusGained イベントを使用する必要があります (@justinmk, #7221)
  • NeovimのソースコードがPVSで解析されるようになりました (**@ZyX-l**、#6493)
  • 外部UIが描画できるようになりました
  • Luaの利用が拡大しています
    • インターフェースが実装されました (**@ZyX-I**、#4411)
    • Luaファイルはlua/から読み込めるようになりました (**@ZyX-l**、#6789)
    • APIから直接Luaを呼び出せるようになりました (**@bfredl**、#6704)
  • get_keymap を使用して、マッピングに関する情報をプログラムで取得できるようになりました (**@tjdevries**、#6236)
  • nvim_get_hl_by_name/by_id を使用して、ハイライトを取得できるようになりました (**@teto**、#7082)
  • bufhlを使用して新しいハイライトグループを作成できるようになりました (**@bfredl**、#7414)
  • 外部UIがmenu_getからメニューを取得できるようになりました (**@teto**、#6322)
    • menu_getは特殊文字を整形して出力するため、その結果をnvim_inputなどにフィードバックできるようになりました (**@teto**、**@KillTheMule**、#7340)
  • RPCクライアントがsockconnectを使用してソケットに接続できるようになりました (**@bfredl**、#6594)
  • serverstartuv_getaddrinfo()を使用するようになり、IPv6に対応しました (**@mhinz**、#6680)
  • 1つの:execute呼び出しで複数の関数を定義できるようになりました (**@ZyX-I**、#6914)
  • ログ出力がデフォルトで有効化されました (**@justinmk**、#6827)

バージョン0.2.2リリース

主にバグ修正を含む迅速なリリースです。リリースノートで詳細を確認してください。いくつかの新機能も含まれています。

  • curdirがviewoptionとして追加されました (**@EricR86**、#7447)
  • ノードホストが利用可能になりました (**@billyvg**、#7458)
  • :checkhealthがruntimepathも検証するようになりました (**@justinmk**、#7526)
  • scrollbackのデフォルト値が10000になりました (**@justinmk**、#7556)
  • 注目すべきバグ修正として、netrwアップデートの取り消しがあります。これに関する報告が多数寄せられていました!(**@justinmk**、#7557)

0.2.3-dev

次回リリースで何が期待できるか知りたいですか?食欲をそそるリストをご紹介します。

  • CmdlineEnterおよびCmdlineLeaveautocommand (**@bfredl**、#7422)
  • チャネル:バッファ出力とバイトソケット/stdioのサポート (**@bfredl**、#6844)
  • 本格的なviml式パーサー (**@ZyX-l**、#7234)
  • 様々なターミナルエミュレータでのNeovimの動作改善に多くの作業が費やされ、現在も進行中です (**@justinmk**、#7664#7653#7720#7640#7624および **@florolf**、#7676)

近い将来:今後の予定

Neovimの計画されている機能、目標、アイデアの概要については、ロードマップをご覧ください。注目すべき今後のPRをご紹介します。

  • 外部UIのためのフローティングウィンドウ (**@bfredl**、#6619)
  • 拡張マーク (**@timeyyy**、#5031)
  • バッファ変更通知 (**@phodge**、#5269)
  • 組み込みLSPサポート (**@tjdevries**、#6856) (http://langserver.org/ を参照して、それがなぜ興味深いのかを確認してください)

お知らせ:最新のmasterブランチからNeovimをビルドする場合は、必ずFollowing HEADを確認して変更を確認してください。

Neovim周辺

関連プロジェクトのwikiページに多くの追加がありました。こちらで完全な変更点を確認してください。

APIクライアント

APIクライアントはNeovimアーキテクチャの中核であり、開発者エクスペリエンスを大幅に改善します。好きな言語でプラグインを作成できます!前回のニュースレター以降、C++クライアント、Elixirクライアント、Racketクライアントが追加されました。ノードクライアントは全面的に見直し、新しいメンテナーが担当しています。引き受けてくれた**@billyvg**に感謝します!完全に新しいものではありませんが、非常に良好に維持されているrubyクライアントに特別な感謝を述べます。**@alexgenco**ありがとうございます!

まだリストにない言語を好む場合は、ドキュメントが開始点となり、gitterチャンネルでぜひ話し合ってください。

GUI

GUI関連では多くの活動があったため、すべての新しいクライアントをリストすることはできません。そのため、特に注目すべきものをいくつかご紹介します。VSCodeはNeovimを使用してexモードコマンドを適切に統合しており、Sublime Text 3は完全なNeovim統合を実現しました。後者は、Neovim固有のもう1つの優れた機能である外部化されたポップアップメニューも使用しており、わずか50 LOCで実現しました。最後に、eovimはNeovim向けのEnlightenmentクライアントです。

Neovimのアーキテクチャ。

いくつかの学生がNeovimのアーキテクチャを研究し、その調査結果に関する「分析論文」を発表しました。全体像に興味がある場合は、ぜひご覧ください

VimcastsとModern Vim

vimcastsで有名なDrew Neilは、Neovimに関するキャストの収録を開始し、彼の好評な書籍Practical Vimの後継となるModern Vimの制作を開始しました。書籍の大部分はVim 8とNeovimのユーザーに適していますが、約1/3はNeovim固有の機能について説明します。

Libuv

Neovimの基礎の1つに、I/Oをlibuvに移植することがありました。そのため、libuvがより多くのプラットフォームをサポートすることを目指していることを聞いて喜ばしいでしょう。Neovimが、まもなくお近くのプラットフォームに登場します!

テストスイート

Neovimは、驚くほどシンプルなLua言語を介して簡単なテストを提供します。なぜ他の人がそうしないのかと尋ねるかもしれませんか?それは、そうしている、あるいは少なくともneomuttプロジェクトが準備していることがわかりました。Neovimから取り入れられたアイデアを見るのは素晴らしいことです。

統計

前回のニュースレター以降の変更行数

git log  --since="2016-11-01" --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: 255393 removed lines: 221106 total lines: 34287

マージされたコミット数

git log  --since="2016-11-01"|wc -l
3110

異なるコミット作者数

git shortlog -e -s -n --since="2016-11-01"|wc -l
146

ドキュメントの変更数

git log  --since="2016-11-01" --numstat --pretty=tformat: --numstat runtime/doc|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: 8579 removed lines: 6577 total lines: 2002

感謝

貢献者、スポンサー、バグ報告者、サポーターの皆様に感謝します。素晴らしいプロジェクトを作ってくれた**@justinmk**、そして基礎的な作業をしてくれた**@brammoolに感謝します。

vimチームの**@brammool**と**@chrisbra**から、私たちのイシュートラッカーにいくつかのコメントがありました。一緒に作業できて嬉しいです!

ニュース

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

Neovim とは?

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

議論

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