ニュースレター #10 - Neovim v0.4.4

2020 年 10 月

Neovim とは?

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

参加

Neovim への貢献に興味がある場合は、詳細については github ページ をご覧ください。優れたテストスイートと自動 CI を用意していますので、飛び込んで気軽に使用していただけます。コメントを得るために PR をオープンしたり、インフラストラクチャを活用したりするのを恐れないでください!

チームと連絡を取りたい場合は、gitter チャンネルIRC からもアクセス可能)に参加するか、多くの開発者が読んでいる Neovim subreddit を訪れてください。会話に参加することも貢献です!

新機能

前回のニュースレター では、Neovim v0.3.0 のリリースを取り上げましたが、今回はそれ以降にリリースされた最もエキサイティングな Neovim リリース、v0.4.4 と同じように取り上げます。

ユーザー向けの 0.4.4

  • Neovim は、xterm 互換端末の背景色を検出するようになりました(@joshtriplett#9509)。

  • 'maxcombine' オプションは削除され、常に 6 に既定されます(@bfredl#7992)。

  • 'fillchars' 設定に eob オプションが追加され、ユーザーはバッファの末尾以降の行を表す文字を構成できるようになりました(以前は ~ にハードコーディングされていました)(@FriedSock#8546)。

  • 既定の 'shortmess' オプションに F が追加され、S が削除されました(@justinmk#8619#10136)。

  • CursorLine タイプはよりスマートになります。フォアグラウンドカラーが設定されていない場合、CursorLine のテキストは CursorLine の背景色と既定の構文強調表示色をフォアグラウンドとして使用します(@zhou13#8578)。

  • ターミナル UI は、ターミナルがそのサポートを提供している場合、下線とカラー下線をサポートできるようになりました(@blueyed#9052)。

  • Neovim の 'background' 設定は、プラットフォーム全体で一貫した設定を取得するために、既定で dark に設定されます(@justinmk#9205)。

  • 'fillchars''listchars' は、ウィンドウローカルオプションになりました(@mhinz#9539)。

  • ポップアップメニューは、(疑似的に)透過にすることができます(@bfredl#9571)。

  • フローティングウィンドウ! これにより、大きなクロック@bfredl@dzhou121#6619)など、あらゆる種類の便利な機能が有効になります。

  • 自動コマンドに ++once 修飾子が追加され、1回のみ実行されるようになりました(@justinmk#9706)。

  • CompleteChangedという名前の新しい自動コマンドイベントが実装されました(@chemzqm#9616)。

  • VimのTermDebugプラグインがneovimに移植されました(@kwon-young#8364)。

  • Wildmenuは現在、wildoptions=pumを使ってポップアップメニューにすることができます(@bfredl#9607)。実際、これがデフォルトです。

  • UIがNeovimに接続および切断するときにトリガーされるイベントが、2つ追加されました。UIEnterとUILeaveです(@equalsraf#6917)。

  • TermEnterおよびTermLeaveの自動コマンドも追加され、ターミナルの出入り時にトリガーされます(usama54321#8550)。

開発者向け0.4.4

  • 新しいUI拡張機能
    • ext_hlstate拡張機能は、ビルトインおよび構文ハイライトのセマンティック識別を可能にします(@bfredl#8221)。
    • ext_linegrid拡張機能は、パフォーマンスの向上のため、より段階的な画面更新を送信します(@bfredl#9064)。
    • ext_multigrid拡張機能は、単なるレンダリングサーフェスである「グリッド」の概念を導入します(@bfredl@UtkarshMe #8455)。
    • ext_messages拡張機能は、UIが外部コマンドラインを提供できるようにします(@bfredl@dzhou121 #7466)。
    • ext_popupmenuにより、neovimはポップアップメニューに関する情報を送信します(@bfredl #9607)。
  • 新しいAPI関数
    • nvim_buf_get_offset: 行のバイトオフセットを返します(@bfredl#9180)。
    • nvim_buf_is_loaded: バッファーがロードされているかどうかを確認します(@phodge#7688)。
    • nvim_create_buf: 新しいバッファーを作成します(@bredl#9272)。
    • nvim_get_context/nvim_load_context: エディターの状態を調査して復元します(@justinmk#10619)。
    • nvim_input_mouse: マウス操作を実行します(@bfredl#9429)。
    • nvim_open_win: フローティング外部ウィンドウを作成します。
    • nvim_set_keymap: モードのグローバルマッピングを設定します(@yilin-yang#9224)。
    • nvim_win_close: ウィンドウ
    • nvim_win_set_buf: ウィンドウの現在のバッファを設定します(@justinmk#9100)。
    • nvim_win_set_config: ウィンドウのレイアウトを設定します(@mhinz#9626)。
  • 変更されたAPI関数
    • nvim_buf_lines_eventは、ターミナルバッファに対してイベントを送信するようになりました(@justinmk#8616)。
  • Neovimは、--headlessも提供されない限り、--embedで起動時は、常にUIを待つようになりました(@bfredl#9024)。

  • Neovimのlibuvループは、vim.loopとしてluaに公開されました(@zhaozg@andreypopp#10123)。

これから

Neovimのコントリビューターは熱心に取り組み、LSPクライアントや、TreeSitterの統合など、v0.5.0に多くの新機能を追加しました。次のNeovimリリースは、さらに魅力的になるでしょう!

Neovim周辺

Neovimの拡張機能を何らかの形で利用するプロジェクトのリストは、関連プロジェクトのwikiページで常に更新されています。前回のニュースレター以降に追加された内容の一部をご紹介します

プラグイン

以下のプラグインが、wikiに追加されました

  • coc.nvim: VSCodeの機能を再現することを目的とした言語サーバープロトコルクライアント
  • markdown-preview.nvim: Markdownファイルをブラウザで同期スクロール付きでプレビューします。
  • nvim-gdb: GDB、LLDB、PDB用の薄いラッパー
  • nero.nvim: Neovim用のREPL
  • neogdb.vim: neovim用のVim GDBフロントエンド
  • nvim-luadev: luaプラグインを開発するためのREPL
  • Conjure: Neovim用のClojureおよびClojureScriptツール(ソケット経由)
  • Aniseed: Fennel(LuaにコンパイルされるLisp)でNeovim用のプラグインを作成します。
  • nvim-luapad: 埋め込みluaエンジン用のNeovimのインタラクティブリアルタイムスクラッチパッド。

APIクライアント

多数の新しいAPIクライアント

Pythonクライアントも「pynvim」に名前が変更されました。

GUI

2018/2019年はLinuxデスクトップの年ではなかったかもしれませんが、間違いなくNeovim GUIの年でした

  • veonim: VSCodeのエクスペリエンスを再現することを目的とした、本当にクールなelectronベースのGUI。
  • DinVim Vim for Mac: 「安全でセキュアな」Neovim GUI - OSXアプリストアで入手可能。
  • akiyosi/gonvim: gonvimのメンテナンスされたフォーク。
  • etorth/libnvc: SDLに基づく、簡単に埋め込み可能なGUI。
  • mvilim/neovim-pytc-example: 標準のターミナル UI ではない、Neovim の最初のターミナル UI です!
  • GNvim: Rust で記述された「ウェブの肥大化のない Neovim の GUI」。
  • Firenvim: Neovim を Chrome、Firefox、その他のブラウザに埋め込む、大量のウェブ肥大化。
  • glrnvim: alacritty 内で Neovim を起動するターミナルラッパー。
  • yatli/fvim: F# で記述された美しい UI - 関数型言語が実際にソフトウェアの記述に使用できることを誰が知っていたでしょうか?
  • Neo Vim: Neovim を VSCode に統合するための新たな試み。
  • kethku/neovide: 「カーソルの狂気」を少し加えた「飾らない Neovim クライアント」Rust で記述。
  • dontpanic92/dotnvim: 透明な背景を使用した C# Neovim クライアント!

ブログ記事

Neovim の事柄について具体的に解説した記事。

  • Lua で Neovim プラグインを書く: https://www.2n.pl/blog/how-to-write-neovim-plugins-in-lua
  • Lua で init.vim を書く: https://teukka.tech/luanvim.html
  • Lua から Neovim のイベントループを使用する: https://teukka.tech/vimloop.html

統計

前回のニュースレター以降の変更された行

git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 168844 removed lines: 75466 total lines: 93378

マージされたコミット

git log v0.3.0..v0.4.4 --pretty=oneline | wc -l
3477

異なるコミットの作成者

git shortlog -e -s -n v0.3.0..v0.4.4 | wc -l
164

ドキュメントの変更

git log v0.3.0..v0.4.4 --numstat --pretty=tformat: --numstat runtime/doc | nawk '{ add += $1; subs += $2; loc += $1 - $2 } END { printf "added lines: %s removed lines: %s total lines: %s\n", add, subs, loc }'
added lines: 9226 removed lines: 7002 total lines: 2224

謝辞

貢献者、スポンサー、バグ報告者、サポーターに感謝します。Neovim を GitHub Sponsors または OpenCollective からスポンサーできるようになりました。この素晴らしいプロジェクトのために@justinmk に、基盤の作業のために@brammool に感謝します。

ニュース

その他の最新情報は ニュースアーカイブ でご覧ください。RSS フィード もございます。

Neovim とは?

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

議論

#neovim:matrix.org または irc.libera.chat 上の #neovim にアクセスして、チームとチャットしましょう。