ニュース

Nvim :help ページは、ソースからtree-sitter-vimdoc パーサーを使用して生成されています。


Nvim 0.10 以降の注目すべき変更点
以前のリリースの変更点については、news-0.10 を参照してください。

HEAD における破壊的変更 news-breaking-dev

====== リリース前にこのセクションを削除してください。 ======
開発サイクル中(Nvim HEAD、「master」ブランチ)に、未リリースの機能に対して以下の変更が行われました。

オプション

'jumpoptions' フラグ "unload" は "clean" に名前変更されました。

破壊的変更 news-breaking

これらの変更により、設定やプラグインの調整が必要になる場合があります。

API

API の "meta" docstring と :help ドキュメントが改善されました。
vim.rpcnotify(0)rpcnotify(0) は、すべてのチャンネルにブロードキャストするようになりました。以前は、nvim_subscribe() によって制御される、サブスクライブされたチャンネルへのみ「マルチキャスト」していました。 「マルチキャスト」動作を必要とするプラグインとクライアントは、独自のチャンネルリストを管理する必要があります。
今後、このユースケースの需要があれば、vim.rpcnotify() はチャンネルのリストを受け入れるようになる可能性があります。
"Dictionary" は、内部および RPC api-metadata で "Dict" に名前変更されました。 return_type フィールドや、--api-info または nvim_get_api_info() によって報告されるパラメータ型名を使用する既知のクライアントが存在しないため、この変更によってクライアントが壊れることは想定されていません。
nvim_open_win() は、focusable フィールドとは別に、ウィンドウとのマウスインタラクションを設定できる mouse フィールドをサポートするようになりました。
nvim__id_dictionary(サポートされていない/実験的な API)を nvim__id_dict に名前変更しました。

デフォルト

]d-default[d-default はカウントを受け入れるようになりました。
[D-default]D-default は、それぞれ現在のバッファの最初と最後の診断にジャンプするようになりました。

診断

vim.diagnostic.config() は、vim.diagnostic.jump() のデフォルトを指定するための "jump" テーブルを受け入れるようになりました。
"underline" 診断ハンドラは、"severity_sort" オプションを使用すると、診断を重大度順にソートするようになりました。

エディタ

記号が配置される順序が変更されました。優先順位の高い記号は、優先順位の低い記号の左側に表示されるようになりました。
hl-CurSearch は Vim と同じ動作になり、カーソルの移動ごとに更新されなくなりました。
:bnext などのコマンドを使用してバッファリスト内を移動すると、ドキュメントどおりに動作し、ヘルプ以外のバッファから実行された場合はヘルプバッファをスキップし、そうでない場合は別のヘルプバッファに移動します。
terminal バッファからのベルは、'belloff' オプションに "term" または "all" が含まれていない限り、デフォルトでは無音になりました。

イベント

TODO

LSP

LSP ホバードキュメントのレンダリングが改善されました。 K-lsp-default
vim.lsp.completion.enable()convert コールバックが追加され、LSP CompletionItem から complete-items への変換をカスタマイズできるようになりました。
vim.lsp.diagnostic.from() を使用して、vim.Diagnostic オブジェクトのリストを LSP 診断表現に変換できるようになりました。
vim.lsp.buf.references()vim.lsp.buf.declaration()vim.lsp.buf.definition()vim.lsp.buf.type_definition()vim.lsp.buf.implementation()、および vim.lsp.buf.hover() は、複数のクライアントの結果をマージできるようになりましたが、vim.lsp.handlers からグローバルハンドラをトリガーしなくなりました。
vim.lsp.buf.typehierarchy() は、各クライアントリクエストに正しいパラメータを渡すようになりました。
vim.lsp.handlers.signature_help() は使用されなくなりました。
vim.lsp.diagnostic.on_publish_diagnostics()vim.lsp.diagnostic.on_diagnostic() は、config パラメータを受け入れなくなり、vim.lsp.with() で設定できなくなりました。代わりに以下を使用してください。
vim.diagnostic.config(config, vim.lsp.diagnostic.get_namespace(client_id))

LUA

API 関数は、vim.empty_dict() として空の辞書を一貫して返すようになりました。以前は、lua-special-tbl が使用されることもありました。
コマンドライン補完が以下に追加されました: vim.gvim.tvim.wvim.bvim.vvim.ovim.wovim.bovim.optvim.opt_localvim.opt_global、および vim.fn

オプション

'statuscolumn'%l 項目は、関連するオプションに従って変化する数値カラムセグメントとして使用できるようになりました。アラインメント、'number''relativenumber'、および "number" に設定された 'signcolumn' を処理します。現在冗長な %r 項目は、'statuscolumn' では特別な扱いを受けなくなりました。
:set {option}< は、文字列の グローバルローカル オプションだけでなく、すべての グローバルローカル オプションのローカル値を削除するようになりました。
:setlocal {option}< は、数値とブール値の グローバルローカル オプションについて、ローカル値を削除する代わりに、グローバル値をローカル値にコピーするようになりました。

プラグイン

TODO

TREESITTER

Query:iter_matches() は、最後のノードだけでなく、一致するすべてのノードを正しく返すようになりました。つまり、返されるテーブルは、キャプチャ ID を、反復処理する必要があるノードのリストにマップします。下位互換性のために、all=false オプション(最後の一致するノードのみを返す)が提供されていますが、将来のリリースで削除される予定です。
vim.treesitter.language.get_filetypes() は、明示的に登録されたファイルタイプの他に、常に {language} 引数を含むようになりました。
vim.treesitter.language.get_lang() は、明示的に登録された言語がない場合、{filetype} 引数にフォールバックするようになりました。
vim.treesitter.language.add() は、パーサーが正常にロードされた場合は true を返し、そうでない場合は nil,errmsg を返すようになりました。以前はエラーをスローしていました。
新しい TSNode:child_with_descendant() が追加されました。これは、子孫自体を返すことができる点を除いて、TSNode:child_containing_descendant() とほぼ同じです。

TUI

TODO

VIMSCRIPT

v:msgpack_types から "binary" タイプが削除されました。 msgpackparse() は、BIN、STR、および FIXSTR を別々のタイプとして扱わなくなりました。これらのいずれかは、可能であれば文字列として返され、値に埋め込み NUL が含まれている場合は blob として返されます。

新機能 news-features

以下の新機能が追加されました。

API

nvim__ns_set() は、名前空間にプロパティを設定できるようになりました。

デフォルト

ハイライト
:checkhealth と :help バッファのスタイルが改善されました。
マッピング
ノーマルモードの grnvim.lsp.buf.rename() にマップされました。
ノーマルモードの grrvim.lsp.buf.references() にマップされました。
ノーマルモードの grivim.lsp.buf.implementation() にマップされました。
ノーマルモードの gOvim.lsp.buf.document_symbol() にマップされました。
ノーマルモードとビジュアルモードの gravim.lsp.buf.code_action() にマップされました。
挿入モードの CTRL-Svim.lsp.buf.signature_help() にマップされました。
URL を右クリックすると、マウスの ポップアップメニュー に「Web ブラウザで開く」項目が表示されるようになりました。
バッファで LSP がアクティブな場合、マウスの ポップアップメニュー に「定義に移動」項目が表示されるようになりました。
Tim Pope の vim-unimpaired に触発されたマッピング
[q]q[Q]Q[CTRL-Q]CTRL-Q は、quickfix リスト内を移動します。
[l]l[L]L[CTRL-L]CTRL-L は、location-list 内を移動します。
[t]t[T]T[CTRL-T]CTRL-T は、tag-matchlist 内を移動します。
[a]a[A]A は、argument-list 内を移動します。
[b]b[B]B は、buffer-list 内を移動します。
スニペット
スニペットがアクティブで前方ジャンプ可能な場合、挿入モードと選択モードの <Tab>vim.snippet.jump({ direction = 1 }) にマップされます。
スニペットがアクティブで後方ジャンプ可能な場合、挿入モードと選択モードの <S-Tab>vim.snippet.jump({ direction = -1 }) にマップされます。

エディタ

やり直し(ドットリピート)とマクロ(recording)の 貼り付け 処理が改善されました。
大量の貼り付けのやり直しが大幅に高速化され、'autoindent' が無視されるようになりました。
@ でマクロを再生すると、貼り付けられたテキストも再生されるようになりました。
Windows では、コマンドラインで "~\" または "~/" で始まるファイル名引数は、リテラル "~" ディレクトリへの相対パスではなく、ユーザーのプロファイルディレクトリに展開されるようになりました。
hl-PmenuMatchhl-PmenuMatchSel は、補完ポップアップで一致したテキストを表示するようになりました。

イベント

CompleteDone は、v:eventreason キーを設定するようになり、補完が完了した理由が指定されるようになりました。
vim.on_key() コールバックは、空の文字列を返すことでキーを消費できるようになりました。

LSP

補完の副作用(スニペットの展開、コマンドの実行、追加のテキスト編集の適用を含む)が組み込みになりました。
vim.lsp.util.locations_to_items() は、end_colend_lnum フィールドを設定するようになりました。
vim.lsp.buf.format() は、range パラメータを介して範囲のリストを渡すことをサポートするようになりました(これには、textDocument/rangesFormatting リクエストのサポートが必要です)。
vim.lsp.buf.code_action() アクションは、複数のクライアントがある場合にクライアント名を表示するようになりました。

LUA

vim.fs.rm() はファイルとディレクトリを削除できます。
vim.validate() は、テーブルの使用を減らし、パフォーマンスを向上させ、読みやすくする新しいシグネチャを持つようになりました。
vim.str_byteindex()vim.str_utfindex() に、encodingstrict_indexing の2つの新しいパラメータをサポートするオーバーロードシグネチャが追加されました。

オプション

'completeopt' フラグ "fuzzy" は、挿入補完 (ins-completion)中に あいまい一致 (fuzzy-matching) を有効にします。
'tabclose' は、タブページを閉じるときにフォーカスするタブページを制御します。

パフォーマンス

TODO

プラグイン

EditorConfig
spelling_language プロパティがサポートされるようになりました。

起動

無効なアドレスをサイレントにスキップする代わりに、--listen または $NVIM_LISTEN_ADDRESS アドレスが無効な場合、Nvim は失敗します。

ターミナル

ターミナル は、システムクリップボードに書き込む(コピーする)ための OSC 52 エスケープシーケンスを理解するようになりました。OSC 52 でのクエリ(貼り付け)はサポートされていません。
hl-StatusLineTermhl-StatusLineTermNC は、ターミナル ウィンドウのステータスラインのハイライトを定義します。
ターミナルバッファは、リフローをサポートするようになりました(バッファのサイズが水平方向に変更されると、折り返された行が適応します)。注:表示されず、'scrollback' に保持されている行はリフローされません。
ターミナル は OSC 8 エスケープシーケンスをサポートするようになり、対応するホストターミナルにハイパーリンクを表示します。

TREESITTER

LanguageTree:node_for_range() は、範囲の匿名ノードと名前付きノードを取得します。
vim.treesitter.get_node() は、デフォルトで false のオプション include_anonymous を取るようになりました。これにより、名前付きノードだけでなく匿名ノードも返すことができます。

TUI

組み込み UI は、そのチャネルで情報 nvim_set_client_info() を宣言します。startup-tui を参照してください。現在の UI 情報を確認するには、次を試してください。
:lua =vim.api.nvim_get_chan_info(vim.api.nvim_list_uis()[1].chan)
組み込み UI クライアント(TUI、--remote-ui)によって書き込まれた ログ メッセージには、"?" の代わりに "ui" というプレフィックスが付くようになりました。

UI

vim.ui.open() (デフォルトでは gx にバインドされています)は、指定されたパスまたは URL を開くために使用されるツールを制御する opt.cmd パラメータを受け入れます。これをグローバルに設定する場合は、vim.paste() で説明されているのと同じアプローチを使用して vim.ui.open をオーバーライドできます。
vim.ui.open() は、URL/ファイルを開くためのオプションとして [lemonade](https://github.com/lemonade-command/lemonade) をサポートするようになりました。これは、SSH 接続で lemonade を使用する場合に便利です。
挿入補完メニュー (ins-completion-menu) は、カスケードハイライトスタイルをサポートするようになりました。hl-PmenuSelhl-PmenuMatch はどちらも hl-Pmenu を継承し、hl-PmenuMatchSelhl-PmenuSelhl-PmenuMatch の両方からハイライトを継承します。

変更された機能 news-changed

これらの既存の機能の動作が変更されました。
'scrollbind' は、仮想行を含むバッファで正しく機能するようになりました。
スクロールバインドは、タブページの各ウィンドウのターゲットとなる最上行に合わせることで機能します。以前は、古い最上行とターゲットの最上行の差を計算し、その量だけスクロールすることで行われていました。現在では、最上行は仮想行を考慮したスクリーン行番号を使用して計算されます。
書記素クラスタ(または結合文字 mbyte-combining)の実装が、Unicode 標準の UAX#29 で定義されている拡張書記素クラスタに厳密に従うようにアップグレードされました。特に、これにより、ZWJ(ゼロ幅ジョイナー)コードポイントと組み合わされた複数の絵文字コードポイントでエンコードされたものを含め、以前よりもはるかに多くの絵文字を正しく表示できるようになります。
'statusline''tabline''winbar' のテキストは、それぞれの hl-StatusLinehl-TabLinehl-WinBar ハイライトグループからハイライトを継承するようになりました。
vim.on_key() コールバックは、コールバック自体が入力を消費する場合、再帰的に呼び出されなくなりました。
man ページの "q" は、現在のウィンドウを閉じるために CTRL-W_c の代わりに CTRL-W_q を使用するようになり、画面上にウィンドウが1つしかない場合に E444 をスローしなくなりました。グローバル変数 vim.g.pager は削除されました。

削除された機能 news-removed

これらの非推奨の機能は削除されました。
該当なし

非推奨 news-deprecations

deprecated-0.11 を参照してください。
メイン
コマンドインデックス
クイックリファレンス