News-0.10

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


Nvim 0.9 以降の重要な変更点
以前のリリースでの変更点については、news-0.9 を参照してください。

破壊的変更

これらの変更により、設定やプラグインの修正が必要になる場合があります。
API
nvim_open_win() は、noautocmd が設定されている場合、バッファの設定によるものだけでなく、すべての autocommand をブロックするようになりました。
デフォルト
デフォルトのカラースキーマが「Nvim ブランド」でアクセシビリティを向上したものに更新されました。以前のレガシーカラースキーマに戻すには、:colorscheme vim を使用してください。
これらの Nvim 特有のハイライトグループは、意味のある異なる方法で定義されるようになったため、更新が必要になる場合があります。
hl-FloatBorder は、hl-WinSeparator ではなく hl-NormalFloat にリンクされるようになりました。
hl-NormalFloathl-Pmenu にリンクされなくなりました。
hl-WinBar の背景色が変更されました。
hl-WinBarNChl-WinBar と似ていますが、太字ではありません。
hl-WinSeparatorhl-VertSplit ではなく hl-Normal にリンクされるようになりました。
これにより、ハイライトグループがデフォルトでどのように定義されているかについての暗黙の前提に依存しているカラースキーマの一部が、異なる表示になる可能性があります。これを解決するには、ハイライトグループのすべての属性を明示的に定義してください。または、:colorscheme vim または :source $VIMRUNTIME/colors/vim.lua を使用して、以前の定義を復元してください。
'termguicolors' は、ホストターミナルエミュレータが 24 ビットカラーをサポートしていると Nvim が判断できる場合、デフォルトで有効になります。
エディタ
ウィンドウを切り替える際、CursorMoved autocommand は、すぐにではなく、Nvim がメインループに戻ったときにトリガーされるようになりました。これは Vim との互換性を高めます。
数字に続く「#」は、マッピングの左辺の先頭では、ファンクションキーを表さなくなりました。
shm-q は、マクロ記録メッセージを短縮するだけでなく、完全に非表示にするようになりました。
レガシー sign-commands を通じて配置されたサインは、内部的に extmarks として格納および表示されるようになりました。以下の変更点も含まれます。
同じグループに同じ識別子で 2 回サインを配置すると、サインが移動されます。
レガシーサインは、配置されている行と一緒に常に削除されます。
レガシーサインと extmark サインは、両方とも :sign-place-listnvim_buf_get_extmarks() に表示されます。
レガシーサインと extmark サインは、同じ優先順位で表示および一覧表示されます:行番号 -> 優先順位 -> サイン ID -> 最近配置された順
:behave が削除されました。
:behave xterm を使用していた場合は、以下のコマンドが同等です。
set mousemodel=extend
:behave mswin を使用していた場合は、以下のコマンドが同等です。
set selection=exclusive
set selectmode=mouse,key
set mousemodel=popup
set keymodel=startsel,stopsel
イベント
nvim_create_autocmd() に渡されるコールバックから真偽値を返す(true だけではなく)と、autocommand が削除されます。
LSP
LanguageTree:parse() は、デフォルトでインジェクションを解析しなくなり、明示的な範囲引数を渡す必要があります。インジェクションが必要な場合は、parser:parse({ start_row, end_row }) を使用して明示的な範囲を指定してください。
vim.lsp.util.parse_snippet() は、LSP によって定義されたスニペット文法を厳密に遵守するようになりました。そのため、以前は解析されていたスニペットが、無効な入力と見なされる可能性があります。
vim.lsp.codelens.refresh() は、opts 引数を取るようになりました。この変更により、現在のバッファだけを更新するというデフォルトの動作は、すべてバッファを更新する動作に置き換えられました。
vim.lsp.util.extract_completion_items() は、入力がCompletionList の場合、itemDefaults を適用しないため、信頼できる結果を返さなくなりました。さらに、LSP の completionList.itemDefaults のサポートが追加されたため、言語サーバーがこの機能をサポートしているのにプラグインがサポートしていない場合、一部のサードパーティプラグインに悪影響が及ぶ可能性があります。必要に応じて、vim.lsp.protocol.make_client_capabilities() を呼び出す際に、それぞれの機能を削除できます。
LspRequest と LspProgressUpdate(LspProgress に名前変更)autocommand は、User autocommand からファーストクラスシチズンに昇格しました。
Lua
-l は、スクリプトがメッセージを出力し、Nvim を終了させない場合、出力の最後に改行を追加するようになりました。
vim.json モジュールから関数が削除されました。
不要な、ドキュメント化されていない関数で、グローバルな副作用を引き起こしていました。
vim.json.nullvim.NIL と重複しています。
vim.json.array_mt(および関連する関数)は vim.empty_dict() と重複しています。
vim.islist() は、テーブルが実際にリストのようなものかどうか(つまり、1 から始まるギャップのない整数キーを持っているかどうか)を確認するようになりました。以前の動作(整数キーのみをチェックし、ギャップまたは1から始まらないことを許可)については、vim.isarray() を使用してください。
vim.treesitter.playgroundvim.treesitter.dev に名前変更されました。
オプション
Vim 5.0 以下のオプション互換性がいくつか削除されました。
'backspace' は、数値をサポートしなくなりました。代わりに
backspace=0 の場合は backspace=(空)を設定します。
backspace=1 の場合は backspace=indent,eol を設定します。
backspace=2 の場合は backspace=indent,eol,start を設定します(Nvim のデフォルト動作)。
backspace=3 の場合は backspace=indent,eol,nostop を設定します。
'backupdir''directory' は、オプションの先頭の「>」を削除しなくなりました。
OptionSet autocommand の引数 v:option_newv:option_oldv:option_oldlocalv:option_oldglobal は、常に文字列型であるのではなく、オプションの型を持つようになりました。v:option_old は、文字列型のグローバルローカルオプションだけでなく、すべてのグローバルローカルオプションの古いグローバル値になりました。
グローバルローカルの数字/ブール型のオプションのローカル値は、スコープなしでオプションが設定された場合(例::set または nvim_set_option_value() を使用)、設定されなくなりました。つまり、文字列型のオプションと同じように動作するようになりました。
プラグイン
:TOhtml は Lua で書き直され、Nvim 特有の装飾をサポートするようになりました。多くのオプションが削除されました。
Treesitter
Treesitter のハイライトグループの名前が、アップストリームの tree-sitter と Helix とより一致するように変更され、クエリを共有しやすくなりました。完全なリストは treesitter-highlight-groups に記載されています。
TUI
場合によっては、cursor-blinking に記載されているように、'guicursor' を設定しなくても、Nvim TUI のカーソルが点滅することがありました。これはバグであり、修正されました。カーソルの点滅が停止した場合は、以下の設定(またはユーザーの好みに合わせて変更したもの)を config ファイルに追加してください。
set guicursor+=n-v-c:blinkon500-blinkoff500

新機能

以下の新機能が追加されました。
API
nvim_get_chan_info() に 0 を渡すと、現在のチャネルに関する情報が取得されます。
nvim_buf_set_extmark() は、インライン仮想テキストをサポートするようになりました。
nvim_win_text_height() は、特定のウィンドウ内のテキストの範囲が占める画面行数を計算します。
nvim_set_client_info() に、MessagePack-RPC に完全に準拠したクライアントをサポートするための新しい RPC クライアントタイプ msgpack-rpc が追加されました。
nvim_open_win() または nvim_win_set_config()hide を設定することにより、フローティングウィンドウを非表示にすることができるようになりました。
nvim_input_mouse() は、マウスボタン「x1」と「x2」をサポートするようになりました。
nvim_open_term() に「force_crlf」オプションフィールドが追加されました。
タブページの現在のウィンドウを設定するための nvim_tabpage_set_win() が追加されました。
マッピングAPIは、モードの省略名に「a」が付いている場合、略語をサポートするようになりました。
フローティングウィンドウは、新しい footerfooter_pos 設定フィールドを使用してフッターを表示できるようになりました。デフォルトでは hl-FloatFooter を使用します。
extmarks は「url」ハイライト属性を設定できるため、テキスト領域をクリック可能なハイパーリンクにすることができます(UI のサポートを前提としています)。TUI は OSC 8 制御シーケンスを使用して URL をレンダリングし、対応するターミナルでクリック可能なテキストを有効にします。
nvim_open_win()nvim_win_set_config() は、通常の(分割された)ウィンドウを開いたり、フローティングウィンドウを分割ウィンドウに移動したり、現在のタブページ以外のタブページにウィンドウを開いたりできるようになりました。
nvim_buf_set_extmark() にフラグが追加されました。
「undo_restore」:正確な undo 追跡の extmarks をオプトアウトします。
「invalidate」:extmarks を自動的に非表示または削除します。
「virt_text_repeat_linebreak」:折り返された行で仮想テキストを繰り返します。
Extmarks は、複数行の範囲を完全にサポートするようになりました。1 つの extmark を使用して、任意の長さの範囲を強調表示できます。nvim_buf_set_extmark() API 関数では既にそのような範囲を定義できましたが、複数行の改行をカバーする範囲では、ハイライト領域が一貫してレンダリングされませんでした。これが修正されました。複数行の extmark の一部として定義されたサインも、最初の行だけでなく、範囲内のすべての行に適用されます。さらに、nvim_buf_get_extmarks() に「overlap」オプションが追加され、指定された位置の前に開始された範囲でも、そのような範囲を返すことができるようになりました。
デフォルト
workspace/didChangeWatchedFiles LSP クライアント機能は、Mac と Windows でデフォルトで有効になりました。Linux では、現在、大規模なディレクトリに対して適切にスケーリングするファイル監視のバックエンドがないため、無効になっています。
Windows では、'isfname' に「:」が含まれなくなりました。ドライブ文字は、それなしで正しく処理されます。(ファイルパスに「:line:col」が付いている場合は、gF を使用してください)。
'comments' に「fb:•」が含まれるようになりました。
'shortmess' に「C」フラグが含まれるようになりました。
'grepprg' は、デフォルトで grep に -H と -I フラグを使用し、利用可能な場合は ripgrep を使用します。
ノーマルモードの「]d」と「[d」は、それぞれ vim.diagnostic.goto_next()vim.diagnostic.goto_prev() にマップされるようになりました。]d-default [d-default
<C-W>d(および<C-W><C-D>)は vim.diagnostic.open_float() にマップされるようになりました。CTRL-W_d-default
vim.lsp.start() は、以下のデフォルトキーマッピングを設定します(サーバーがサポートしている場合)。
ノーマルモードでの K は、vim.lsp.start() を呼び出す前に 'keywordprg' がカスタマイズされていない限り、vim.lsp.buf.hover() にマップされます。
treesitter クエリファイルの自動リンティング(ft-query-plugin を参照)。以下の方法で無効化できます。
vim.g.query_lint_on = {}
以下のファイルタイプに対する treesitter ハイライトを有効化しました。
Treesitter クエリファイル
Vim ヘルプファイル
Lua ファイル
エディタ
文字列オプション値に対するコマンドライン補完の改善。 complete-set-option
:set listchars=<Tab> で試してみてください。
デフォルトでは、スワップファイルが実行中の Nvim プロセスによって所有されている場合、「ATTENTION」E325 ダイアログはスキップされ、プロンプトが表示されません。常にスワップファイルダイアログを表示する場合は、デフォルトの SwapExists ハンドラーを削除します:autocmd! nvim_swapfiledefault-autocmds
CTRL+O、CTRL+I を使用したジャンプリストのナビゲーションは、バッファの削除時により直感的になり、「invalid buffer」エラーを回避します。#25461
:fclose コマンド。
v_Q-defaultv_@-default は、行単位のビジュアル選択の各行に対してレジスタを繰り返します。
タブラインのタブページを中マウスボタンでクリックすると、タブページが閉じます。
:checkhealth バッファは、:vertical:horizontal:botright などの修飾子を使用して分割ウィンドウで開くことができます。
イベント
vim.on_key() コールバックは、マッピングが適用される前にタイプされたキーの第2引数を受け取ります。
LSP
LSP メソッド名は、vim.lsp.protocol.Methods で利用できます。
vim.lsp.status() は、最後の進捗メッセージを文字列として消費します。
LSP クライアントは、テキスト編集を適用する際に、名前付きバッファマークを常に保存および復元するようになりました。
LSP クライアントは、positionEncoding サーバー機能をサポートするようになりました。サーバーが初期化応答でpositionEncoding機能を応答した場合、Nvimは自動的にクライアントのoffset_encodingフィールドを設定します。
LSP機能の動的登録。この変更による影響として、クライアントのserver_capabilitiesをチェックするだけでは、サーバーが機能をサポートしているかどうかを確認するのに十分な指標ではなくなりました。代わりにclient.supports_method(<method>)を使用してください。動的機能と静的server_capabilitiesの両方を考慮します。
lsp-handlers のanchor_biasオプションは、フローティングウィンドウの位置決めを支援します。
vim.lsp.util.locations_to_items() は、各アイテムのuser_dataを元のLSP LocationまたはLocationLinkに設定します。
vim.lsp.rpc.connect() を介して、名前付きパイプ(Windows)またはUnixドメインソケット(Unix)を使用してサーバーに接続するためのサポートを追加しました。
completionList.itemDefaultsのサポートを追加しました。プロパティが多くの場合同じ値を共有する(例:commitCharacters)場合に、補完アイテムを計算する際のオーバーヘッドを削減します。ただし、この機能をサポートしていないプラグインや言語サーバーに影響を与える可能性があり、そのような場合は、対応する機能を無効にすることができます。
vim.lsp.start() は、LSPサーバーの起動に失敗した場合にメッセージを抑止するための「silent」オプションを受け入れます。
vim.lsp.buf.definition()vim.lsp.buf.declaration()vim.lsp.buf.type_definition()、およびvim.lsp.buf.implementation() は、vim.lsp.ListOptsloclistフィールドをサポートするようになりました。
Lua
:lua[range] を指定すると、任意のバッファ内のその範囲がLuaコードとして実行されます。
:source に引数を指定せずに、'filetype' が "lua" のバッファは、拡張子に関係なくLuaコードとして扱われます。
Vimscript 関数 exists() は、v:lua 関数のチェックをサポートします。
vim.iter() は、すべてのiterable オブジェクト(テーブル、iterator)に対する汎用インターフェースです。
vim.snippet は、スニペットの展開とナビゲーションのためのモードを提供します。
vim.ringbuf() は、汎用リングバッファ(データ構造)です。
vim.deepcopy() には、テーブル値のハッシュを回避するためのnoref引数が追加されました。
vim.keycode() は、文字列内のキーコードを変換します。
vim.system() は、コマンドを実行/プロセスを開始します。
vim.lpegvim.re は、バンドルされている Lpeg 式文法パーサーとその正規表現インターフェースを公開します。
vim.base64.encode()vim.base64.decode() は、Base64 エンコードを使用して文字列をエンコードおよびデコードします。
vim.text.hexencode()vim.text.hexdecode() は、文字列をバイト表現との間で変換します。
vim.ui.open() は、システムのデフォルトハンドラー(macOS open、Windows explorer、Linux xdg-openなど)を使用してURIを開きます。
vim.wo は、:setlocal の動作のために、二重インデックス化できるようになりました。現在、バッファインデックスの0のみがサポートされています。
vim.api.*呼び出し(optsパラメータを含む)の型エラーに関するメッセージが改善されました。
以下のLua型アノテーションを追加しました。
vim.*
vim.fn.*
vim.api.*
vim.v.*
オプションのパラメータとして重大度を受け取る関数(例:vim.diagnostic.get())は、vim.diagnostic.severity の重大度のリストも受け入れるようになりました。
vim.diagnostic.count() は、重大度別に、指定されたバッファおよび/または名前空間の診断数を返します。これは、診断数のみが必要で、診断自体が必要ない場合、vim.diagnostic.get() よりも高速な代替手段です。
vim.fs.root() は、「ルートマーカー」のリストからプロジェクトルートディレクトリを見つけます。
vim.tbl_contains() は、一般的なテーブルで動作するようになり、各値に対してチェックされる述語関数の指定が可能になりました。(リストのようなテーブル(ギャップのない整数キー)のリテラル値をチェックするには、vim.list_contains() を使用してください)。
vim.region() は、getpos() で受け入れられる文字列を位置として使用できます。
オプション
'winfixbuf' は、特定のバッファにウィンドウのフォーカスを維持します。
'smoothscroll' オプションは、'wrap' が設定されている場合、テキスト行ではなく画面行単位でスクロールします。
'foldtext' は、仮想テキスト形式をサポートするようになりました。fold-foldtext
'foldtext' を空文字列に設定して無効にし、行を通常のハイライトと行折り返しなしでレンダリングできます。
'complete' オプションは、バッファ名の補完のための "f" フラグをサポートします。
'completeopt' オプションは、フローティングウィンドウに追加情報を表示するための "popup" フラグをサポートします。
'errorfile' (-q) は、stdin のエイリアスとして-を受け入れます。
パフォーマンス
'diffopt' の "linematch" スコアリングアルゴリズムは、より大きく、より少ないグループを優先するようになりました。https://github.com/neovim/neovim/pull/23611
Treesitter ハイライトは、レンダリングされている行範囲に対してのみ、画面の再描画中にインジェクションを段階的に解析するようになりました。これにより、多くのインジェクションを持つ大規模ファイルのパフォーマンスが大幅に向上します。
'breakindent' のパフォーマンスは、折り返された行で大幅に向上しました。
[count] と screenpos() を使用したカーソルの移動と挿入が高速化されました。
プラグイン
Nvim に コメント サポートが含まれるようになりました。
:Man は、現在のウィンドウにページを開くための:hide修飾子をサポートします。
:Man'wrapmargin' を尊重します。
起動
$NVIM_APPNAME は、名前だけでなく相対パスにも設定できます。
--startuptime は、両方のプロセス(TUI + サーバー)の起動時間を個別のセクションとして報告します。
ターミナル
:terminal は、いくつかの:command-modifiers(特に:horizontal とウィンドウの分割に影響を与えるもの)を受け入れます。
ターミナルバッファは、子プロセスがOSCまたはDCS制御シーケンスを出力するときに、TermRequest autocommand イベントを出力します。
ターミナルバッファは、OSCの背景と前景のリクエストに応答します。default-autocmds
Treesitter
Markdown 用のバンドルされたパーサーとクエリ(ハイライト、折りたたみ)(LSP ホバーに使用)。
:InspectTree はルートノードを表示します。
:InspectTree は、折りたたみ をサポートするようになりました。
:InspectTree は、ノード範囲を1ベースインデックスではなく0ベースインデックスで表示します。
vim.treesitter.foldexpr() は、定量化されたクエリパターンを使用してキャプチャされた折りたたみも認識するようになりました。
vim.treesitter.query.omnifunc() は、treesitter クエリファイルで補完を提供します(デフォルトで設定)。
vim.treesitter.query.edit() は、treesitterクエリのライブ編集を提供します。
Query:iter_matches() は、一致の最大開始深さを設定できるようになりました。
@injection.language はより高度な解決策を採用し、vim.treesitter.language.register() で登録された言語エイリアス(例:ファイルタイプまたはカスタム省略形)にフォールバックするか、テキストの小文字バリアントを試行するようになりました。
@injection.filenamevim.filetype.match() を使用してノードテキストとのマッチングを試み、その結果を@injection.language と同様に言語名として扱います。
#set! ディレクティブは、それぞれ現在のノードの言語または親LanguageTreeの言語を挿入するために、injection.selfinjection.parent をサポートします。
#set! ディレクティブは、ノードの "url" プロパティを設定して、ノードからハイパーリンクを出力させることができます。ハイパーリンクはUI固有です。TUIでは、OSC 8制御シーケンスが使用されます。
クエリパースに関するエラーメッセージが改善されました。
TUI
組み込みTUIは、tui-csiuをサポートするターミナルエミュレータで "super" (<D-) と "meta" (<T-) 修飾子を認識できるようになりました。
TermResponse イベントは、v:termresponse と共に使用して、ホストターミナルからのエスケープシーケンス応答を読み取ることができます。
選択範囲をシステムクリップボードにコピーするためにOSC 52を使用するクリップボードプロバイダがデフォルトでバンドルされるようになり、特定の条件下で自動的に有効になります。clipboard-osc52
'termsync' オプションは、再描画サイクルが完了するまでホストターミナルに画面更新のバッファリングを要求します。ホストターミナルのサポートが必要です。
UI
合成文字を使用したマルチバイト文字のレンダリングのサポートが強化されました。最大限度が1+6コードポイントから31バイトに増加しました。これにより、以前のすべての文字を確実に収容できるだけでなく、多くの場合、さらに多くの文字を収容できます。
注意: 正規表現エンジンは、依然として最大6つの合成文字のみを考慮するというハードコードされた制限があります。

変更された機能

これらの既存機能の動作が変更されました。
API
nvim_buf_call()nvim_win_call() は、任意の戻り値を保持するようになりました(注:複数の戻り値は保持されません)。
エディタ
gx は、netrwではなくvim.ui.open() を使用するようになりました。カスタマイズするには、vim.ui.open を再定義するか、gx を再マップします。netrw(非推奨)を引き続き使用するには
:call netrw#BrowseX(expand(exists("g:netrw_gx") ? g:netrw_gx : '<cfile>'), netrw#CheckIfRemote())<CR>
LSP
LSPホバーとシグネチャヘルプは、MarkdownコンテンツのハイライトにTreesitterを使用するようになりました。コード例をハイライトするには、対応するパーサーが必要であり、カスタムクエリの影響を受ける可能性があることに注意してください。
LspRequest autocmdコールバックには、発生したLSPリクエストステータス更新に関するより多くの情報が含まれるようになりました。
Lua
vim.wait()api-fast 内では呼び出すことができません。
vim.diagnostic.config() は、nvim_buf_set_extmark() に関連する仮想テキストオプション(例:"virt_text_pos" と "hl_mode")を "virtual_text" テーブルで受け入れるようになり、ユーザーは診断仮想テキストの表示方法をより細かく制御できるようになりました。
vim.diagnostic.get()vim.diagnostic.count() は、単一のネームスペースではなく、複数のネームスペースを受け入れるようになりました。
vim.diagnostic.enable() に新しいパラメータが追加され、古いシグネチャは非推奨になりました。
vim.diagnostic.config() は、virtual_text.prefix オプションに関数を指定できるようになり、例えば診断の重大度を異なる方法でレンダリングできるようになりました。
オプション
無効なキーコードオプションを設定しようとすると(例:set t_foo=123)、エラーは表示されなくなりました。
ターミナル
引数なしで開始され('shell' を使用する)、ジョブがエラーなしで終了した場合、ターミナルバッファは自動的に閉じられ、(多くの場合不要な)"[Process exited 0]" メッセージが表示されなくなります。default-autocmds
Treesitter
Query:iter_matches()vim.treesitter.query.add_predicate()、およびvim.treesitter.query.add_directive() は、すべてのマッチングノードをテーブルとして返すallオプションを受け入れるようになりました。デフォルトオプションall=falseは単一のノードのみを返し、(comment)+ @commentのような量子化子を持つキャプチャを壊します。これは後方互換性のためにのみ提供され、Nvim 0.10 以降は削除されます。
vim.treesitter.query.add_predicate()vim.treesitter.query.add_directive() は、ブール値の "force" 引数ではなく、オプションテーブルを受け入れるようになりました。述語またはディレクティブを既存の述語またはディレクティブよりも優先させるには、{ force = true } を使用します。

削除された機能

これらの非推奨機能は削除されました。
Vimballサポート(:Vimuntar コマンドを含む)
レガシーTreesitterインジェクションクエリのサポート
'shortmess' フラグ
shm-f。常に "(3 of 5)" を使用し、"(file 3 of 5)" は使用しません。
shm-i。常に "[noeol]" を使用します。
shm-x。常に "[dos]"、"[unix]"、および "[mac]" を使用します。
shm-n。常に "[New]" を使用します。

非推奨事項

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