News-0.10
Nvim の:help
ページ。 生成されたもので、ソースと tree-sitter-vimdoc パーサーを使用しています。
Nvim 0.9 以降の重要な変更点
破壊的変更
これらの変更により、設定やプラグインの修正が必要になる場合があります。
API
nvim_open_win() は、
noautocmd
が設定されている場合、バッファの設定によるものだけでなく、すべての autocommand をブロックするようになりました。
デフォルト
デフォルトのカラースキーマが「Nvim ブランド」でアクセシビリティを向上したものに更新されました。以前のレガシーカラースキーマに戻すには、:colorscheme vim
を使用してください。
これらの Nvim 特有のハイライトグループは、意味のある異なる方法で定義されるようになったため、更新が必要になる場合があります。
これにより、ハイライトグループがデフォルトでどのように定義されているかについての暗黙の前提に依存しているカラースキーマの一部が、異なる表示になる可能性があります。これを解決するには、ハイライトグループのすべての属性を明示的に定義してください。または、:colorscheme vim
または :source $VIMRUNTIME/colors/vim.lua
を使用して、以前の定義を復元してください。
'termguicolors' は、ホストターミナルエミュレータが 24 ビットカラーをサポートしていると Nvim が判断できる場合、デフォルトで有効になります。
エディタ
ウィンドウを切り替える際、
CursorMoved autocommand は、すぐにではなく、Nvim がメインループに戻ったときにトリガーされるようになりました。これは Vim との互換性を高めます。
数字に続く「#」は、マッピングの左辺の先頭では、ファンクションキーを表さなくなりました。
shm-q は、マクロ記録メッセージを短縮するだけでなく、完全に非表示にするようになりました。
同じグループに同じ識別子で 2 回サインを配置すると、サインが移動されます。
レガシーサインは、配置されている行と一緒に常に削除されます。
レガシーサインと extmark サインは、同じ優先順位で表示および一覧表示されます:行番号 -> 優先順位 -> サイン ID -> 最近配置された順
:behave
が削除されました。
:behave xterm
を使用していた場合は、以下のコマンドが同等です。
set mousemodel=extend
:behave mswin
を使用していた場合は、以下のコマンドが同等です。
set selection=exclusive
set selectmode=mouse,key
set mousemodel=popup
set keymodel=startsel,stopsel
LSP
LanguageTree:parse() は、デフォルトでインジェクションを解析しなくなり、明示的な範囲引数を渡す必要があります。インジェクションが必要な場合は、
parser:parse({ start_row, end_row })
を使用して明示的な範囲を指定してください。
Lua
-l は、スクリプトがメッセージを出力し、Nvim を終了させない場合、出力の最後に改行を追加するようになりました。
不要な、ドキュメント化されていない関数で、グローバルな副作用を引き起こしていました。
vim.json.null
は vim.NIL
と重複しています。
vim.json.array_mt
(および関連する関数)は vim.empty_dict()
と重複しています。
vim.islist() は、テーブルが実際にリストのようなものかどうか(つまり、1 から始まるギャップのない整数キーを持っているかどうか)を確認するようになりました。以前の動作(整数キーのみをチェックし、ギャップまたは1から始まらないことを許可)については、
vim.isarray() を使用してください。
vim.treesitter.playground
が vim.treesitter.dev
に名前変更されました。
オプション
Vim 5.0 以下のオプション互換性がいくつか削除されました。
backspace=0
の場合は backspace=
(空)を設定します。
backspace=1
の場合は backspace=indent,eol
を設定します。
backspace=2
の場合は backspace=indent,eol,start
を設定します(Nvim のデフォルト動作)。
backspace=3
の場合は backspace=indent,eol,nostop
を設定します。
グローバルローカルの数字/ブール型のオプションのローカル値は、スコープなしでオプションが設定された場合(例:
:set または
nvim_set_option_value() を使用)、設定されなくなりました。つまり、文字列型のオプションと同じように動作するようになりました。
プラグイン
:TOhtml は Lua で書き直され、Nvim 特有の装飾をサポートするようになりました。多くのオプションが削除されました。
TUI
場合によっては、
cursor-blinking に記載されているように、
'guicursor' を設定しなくても、Nvim
TUI のカーソルが点滅することがありました。これはバグであり、修正されました。カーソルの点滅が停止した場合は、以下の設定(またはユーザーの好みに合わせて変更したもの)を
config ファイルに追加してください。
set guicursor+=n-v-c:blinkon500-blinkoff500
新機能
以下の新機能が追加されました。
API
マッピングAPIは、モードの省略名に「a」が付いている場合、略語をサポートするようになりました。
フローティングウィンドウは、新しい
footer
と
footer_pos
設定フィールドを使用してフッターを表示できるようになりました。デフォルトでは
hl-FloatFooter を使用します。
extmarks は「url」ハイライト属性を設定できるため、テキスト領域をクリック可能なハイパーリンクにすることができます(UI のサポートを前提としています)。TUI は OSC 8 制御シーケンスを使用して URL をレンダリングし、対応するターミナルでクリック可能なテキストを有効にします。
「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 を使用してください)。
'grepprg' は、デフォルトで grep に -H と -I フラグを使用し、利用可能な場合は ripgrep を使用します。
treesitter クエリファイルの自動リンティング(
ft-query-plugin を参照)。以下の方法で無効化できます。
vim.g.query_lint_on = {}
以下のファイルタイプに対する treesitter ハイライトを有効化しました。
Treesitter クエリファイル
Vim ヘルプファイル
Lua ファイル
エディタ
:set listchars=<Tab>
で試してみてください。
デフォルトでは、スワップファイルが実行中の Nvim プロセスによって所有されている場合、「ATTENTION」
E325 ダイアログはスキップされ、プロンプトが表示されません。常にスワップファイルダイアログを表示する場合は、デフォルトの SwapExists ハンドラーを削除します:
autocmd! nvim_swapfile
。
default-autocmdsCTRL+O、CTRL+I を使用した
ジャンプリストのナビゲーションは、バッファの削除時により直感的になり、「invalid buffer」エラーを回避します。#25461
タブラインのタブページを中マウスボタンでクリックすると、タブページが閉じます。
LSP
LSP クライアントは、テキスト編集を適用する際に、名前付きバッファマークを常に保存および復元するようになりました。
LSP クライアントは、positionEncoding
サーバー機能をサポートするようになりました。サーバーが初期化応答でpositionEncoding
機能を応答した場合、Nvimは自動的にクライアントのoffset_encoding
フィールドを設定します。
LSP機能の動的登録。この変更による影響として、クライアントのserver_capabilities
をチェックするだけでは、サーバーが機能をサポートしているかどうかを確認するのに十分な指標ではなくなりました。代わりにclient.supports_method(<method>)
を使用してください。動的機能と静的server_capabilities
の両方を考慮します。
lsp-handlers のanchor_bias
オプションは、フローティングウィンドウの位置決めを支援します。
completionList.itemDefaults
のサポートを追加しました。プロパティが多くの場合同じ値を共有する(例:commitCharacters
)場合に、補完アイテムを計算する際のオーバーヘッドを削減します。ただし、この機能をサポートしていないプラグインや言語サーバーに影響を与える可能性があり、そのような場合は、対応する機能を無効にすることができます。
Lua
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.region() は、
getpos() で受け入れられる文字列を位置として使用できます。
オプション
'foldtext' を空文字列に設定して無効にし、行を通常のハイライトと行折り返しなしでレンダリングできます。
'completeopt' オプションは、フローティングウィンドウに追加情報を表示するための "popup" フラグをサポートします。
パフォーマンス
Treesitter ハイライトは、レンダリングされている行範囲に対してのみ、画面の再描画中にインジェクションを段階的に解析するようになりました。これにより、多くのインジェクションを持つ大規模ファイルのパフォーマンスが大幅に向上します。
プラグイン
Nvim に
コメント サポートが含まれるようになりました。
:Man は、現在のウィンドウにページを開くための
:hide
修飾子をサポートします。
ターミナル
ターミナルバッファは、子プロセスがOSCまたはDCS制御シーケンスを出力するときに、
TermRequest autocommand イベントを出力します。
Treesitter
Markdown 用のバンドルされたパーサーとクエリ(ハイライト、折りたたみ)(LSP ホバーに使用)。
@injection.filename
は
vim.filetype.match() を使用してノードテキストとのマッチングを試み、その結果を
@injection.language
と同様に言語名として扱います。
#set!
ディレクティブは、それぞれ現在のノードの言語または親
LanguageTreeの言語を挿入するために、
injection.self
と
injection.parent
をサポートします。
#set!
ディレクティブは、ノードの "url" プロパティを設定して、ノードからハイパーリンクを出力させることができます。ハイパーリンクはUI固有です。TUIでは、OSC 8制御シーケンスが使用されます。
クエリパースに関するエラーメッセージが改善されました。
TUI
組み込みTUIは、
tui-csiuをサポートするターミナルエミュレータで "super" (
<D-) と "meta" (
<T-) 修飾子を認識できるようになりました。
選択範囲をシステムクリップボードにコピーするためにOSC 52を使用するクリップボードプロバイダがデフォルトでバンドルされるようになり、特定の条件下で自動的に有効になります。
clipboard-osc52 'termsync' オプションは、再描画サイクルが完了するまでホストターミナルに画面更新のバッファリングを要求します。ホストターミナルのサポートが必要です。
UI
合成文字を使用したマルチバイト文字のレンダリングのサポートが強化されました。最大限度が1+6コードポイントから31バイトに増加しました。これにより、以前のすべての文字を確実に収容できるだけでなく、多くの場合、さらに多くの文字を収容できます。
注意: 正規表現エンジンは、依然として最大6つの合成文字のみを考慮するというハードコードされた制限があります。
変更された機能
これらの既存機能の動作が変更されました。
エディタ
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リクエストステータス更新に関するより多くの情報が含まれるようになりました。
オプション
無効なキーコードオプションを設定しようとすると(例:set t_foo=123
)、エラーは表示されなくなりました。
ターミナル
引数なしで開始され(
'shell' を使用する)、ジョブがエラーなしで終了した場合、ターミナルバッファは自動的に閉じられ、(多くの場合不要な)"[Process exited 0]" メッセージが表示されなくなります。
default-autocmds
削除された機能
これらの非推奨機能は削除されました。
Vimballサポート(:Vimuntar
コマンドを含む)
レガシーTreesitterインジェクションクエリのサポート
shm-f。常に "(3 of 5)" を使用し、"(file 3 of 5)" は使用しません。
shm-i。常に "[noeol]" を使用します。
shm-x。常に "[dos]"、"[unix]"、および "[mac]" を使用します。
非推奨事項