Vim_diff

Nvim の :help ページは、生成されており、ソースtree-sitter-vimdoc パーサーを使って解析しています。


Nvim と Vim の差異
Nvim は、エディターと Vimscript (Vim9script ではない) の機能はほとんど同じですが、多くの点で Vim と異なります。このドキュメントは、それらの違いを網羅的に集めたリファレンスです。

設定 nvim-config

ユーザー設定とデータファイルは、標準の ベースディレクトリ にあります ($NVIM_APPNAME も参照)。特に以下に注意してください。
設定 には、.vimrc の代わりに $XDG_CONFIG_HOME/nvim/init.vim を使用します。
設定ファイルの保存には、.vim の代わりに $XDG_CONFIG_HOME/nvim を使用します。
永続的なセッション情報には、.viminfo の代わりに $XDG_STATE_HOME/nvim/shada/main.shada を使用します。shada

デフォルト nvim-defaults

ファイルタイプ検出はデフォルトで有効になっています。これは、init.vim に ":filetype off" を追加することで無効にできます。
構文強調表示はデフォルトで有効になっています。これは、init.vim に ":syntax off" を追加することで無効にできます。
デフォルトのカラースキームが更新されました。これにより、ハイライトグループのデフォルトの定義方法に依存しているため、カラースキームの見え方が異なる場合があります。古いデフォルトのリンクと色を復元するには、init.vim に ":colorscheme vim" を追加するか、カラースキームファイルに ":source $VIMRUNTIME/colors/vim.lua" を追加します。
'autoindent' が有効になっています
'autoread' が有効になっています (ターミナルを含むすべての UI で動作します)
'background' は (ターミナル/UI によって自動的に設定されない限り) デフォルトで "dark" に設定されています
'backspace' はデフォルトで "indent,eol,start" に設定されています
'backupdir' はデフォルトで .,~/.local/state/nvim/backup// (xdg) に設定され、自動的に作成されます
'belloff' はデフォルトで "all" に設定されています
'comments' には "fb:•" が含まれます
'commentstring' はデフォルトで "" に設定されています
'compatible' は常に無効になっています
'complete' は "i" を除外します
'define' はデフォルトで "" に設定されています。C ftplugin はそれを "^\\s*#\\s*define" に設定します
'directory' はデフォルトで ~/.local/state/nvim/swap// (xdg) に設定され、自動的に作成されます
'display' はデフォルトで "lastline" に設定されています
'encoding' は UTF-8 です ('fileencoding' はファイル内容のエンコーディングを参照してください)
'fillchars' は (実質的に) デフォルトで "vert:│,fold:·,foldsep:│" に設定されています
'formatoptions' はデフォルトで "tcqj" に設定されています
'grepprg' は通常の grep に -H および -I フラグを使用し、利用可能な場合は ripgrep をデフォルトで使用します
'hidden' が有効になっています
'history' はデフォルトで 10000 (最大値) に設定されています
'hlsearch' が有効になっています
'include' はデフォルトで "" に設定されています。C ftplugin はそれを "^\\s*#\\s*include" に設定します
'incsearch' が有効になっています
'isfname' には (Windows では) ":" が含まれません。ドライブレターはそれなしで正しく処理されます。(":line:col" で終わるファイルパスには gF を使用してください)。
'joinspaces' が無効になっています
'jumpoptions' はデフォルトで "clean" に設定されています
'langnoremap' が有効になっています
'langremap' が無効になっています
'laststatus' はデフォルトで 2 (ステータスラインは常に表示されます) に設定されています
'listchars' はデフォルトで "tab:> ,trail:-,nbsp:+" に設定されています
'mouse' はデフォルトで "nvi" に設定されています。default-mouse の詳細を参照してください
'mousemodel' はデフォルトで "popup_setpos" に設定されています
'nrformats' はデフォルトで "bin,hex" に設定されています
'path' はデフォルトで ".,," に設定されています。C ftplugin は、存在する場合は "/usr/include" を追加します。
'ruler' が有効になっています
'sessionoptions' には "unix,slash" が含まれ、"options" は除外されます
'shortmess' には "CF" が含まれ、"S" は除外されます
'showcmd' が有効になっています
'sidescroll' はデフォルトで 1 に設定されています
'smarttab' が有効になっています
'startofline' が無効になっています
'switchbuf' はデフォルトで "uselast" に設定されています
'tabpagemax' はデフォルトで 50 に設定されています
'tags' はデフォルトで "./tags;,tags" に設定されています
'termguicolors' は、Nvim がホストターミナルからのサポートを検出できる場合、デフォルトで有効になっています
'ttimeout' が有効になっています
'ttimeoutlen' はデフォルトで 50 に設定されています
'ttyfast' は常に設定されています
'undodir' はデフォルトで ~/.local/state/nvim/undo// (xdg) に設定され、自動的に作成されます
'viewoptions' には "unix,slash" が含まれ、"options" は除外されます
'viminfo' には "!" が含まれます
'wildmenu' が有効になっています
'wildoptions' はデフォルトで "pum,tagfile" に設定されています
editorconfig プラグインが有効になり、.editorconfig 設定が適用されます。
man.lua プラグインが有効になっているため、:Man がデフォルトで使用できます。
matchit プラグインが有効になっています。設定で無効にするには
:let loaded_matchit = 1
g:vimsyn_embed は、Lua の強調表示を有効にするためにデフォルトで "l" に設定されています

デフォルトのマウス

default-mouse disable-mouse デフォルトでは、マウスは有効になっています。これは、scroll-mouse-wheel がカーソルを移動する代わりにウィンドウをスクロールすることを意味します。<LeftMouse> クリックはカーソルを配置し、<RightMouse> クリックは標準アクションでデフォルトの ポップアップメニュー を開きます。
マウスは コマンドラインモード または more-prompt では有効になっていないため、":" を入力するだけで一時的に無効にできます。または、マウスまたはポップアップメニューを部分的または完全に無効にする場合は、次のいずれかを実行します
'mouse' オプションを解除して、マウスを完全に無効にします
set mouse=
'mousemodel' を変更すると、<RightMouse> はポップアップメニューを表示する代わりに選択を拡張します
set mousemodel=extend
カーソルが移動するまでマウスを一時的に無効にするように <A-LeftMouse> をマッピングします
nnoremap <A-LeftMouse> <Cmd>
  \ set mouse=<Bar>
  \ echo 'mouse OFF until next cursor-move'<Bar>
  \ autocmd CursorMoved * ++once set mouse&<Bar>
  \ echo 'mouse ON'<CR>
マウスを無効にせずにデフォルトのポップアップメニューを削除するには
aunmenu PopUp
autocmd! nvim_popupmenu
"マウスを無効にする方法" メニュー項目 (とその区切り線) のみを削除するには
aunmenu PopUp.How-to\ disable\ mouse
aunmenu PopUp.-2-

デフォルトのマッピング

default-mappings
Nvim は 起動 時に次のデフォルトマッピングを作成します。設定でこれらのいずれかを無効にするには、単にマッピングを削除します。例えば、":unmap Y"。

デフォルトの自動コマンド

default-autocmds
デフォルトの自動コマンドは、次のグループに存在します。それらを削除するには ":autocmd! {group}" を使用し、どのように定義されているかを確認するには ":autocmd {group}" を使用してください。
nvim_terminal
BufReadCmd: "term://" バッファを ターミナル バッファとして扱います。terminal-start
TermClose: 引数なしで開始された (したがって 'shell' を使用する) ターミナル バッファがエラーなしで終了すると、自動的に閉じられます。
TermRequest: ターミナルエミュレーターは、OSC の背景と前景の要求に応答し、(1) Nvim オプション 'background' が "dark" の場合は黒い背景と白い前景を、(2) 'background' が "light" の場合は白い背景と黒い前景を示すことで対応します。これは、実際のフォアグラウンド/バックグラウンドの色を反映しない場合もありますが、ターミナルエミュレーターで実行されているネストされた Nvim インスタンスで 'background' を保持できます。
TermOpen: ターミナル バッファのデフォルトオプションを設定します
'undolevels' を -1 に設定
'textwidth' を 0 に設定
'winhighlight'hl-StatusLine および hl-StatusLineNC の代わりに hl-StatusLineTerm および hl-StatusLineTermNC を使用します
nvim_cmdwin
CmdwinEnter: cmdwin での構文同期を maxlines=1 に制限します。
nvim_swapfile
SwapExists: スワップファイルが実行中の Nvim プロセスによって所有されている場合、スワップファイルのプロンプトをスキップします (v:swapchoice を "e" に設定)。W325 "スワップファイルを無視…" メッセージを表示します。

新機能 nvim-features

主要なコンポーネント

API API
ジョブコントロール job-control
LSP フレームワーク lsp
Lua スクリプト lua
解析エンジン treesitter
プロバイダー
クリップボード provider-clipboard
Node.js プラグイン provider-nodejs
Python プラグイン provider-python
Ruby プラグイン provider-ruby
リモートプラグイン remote-plugin
共有データ shada
ターミナルエミュレーター terminal
Vimscript パーサー nvim_parse_expression()
XDG ベースディレクトリ xdg

ユーザーエクスペリエンス

直感的かつ一貫して動作することは、Nvim の主要な目標です。
feature-compile
Nvim は常にすべての機能を含んでいます。これは、100 以上のオプション機能のさまざまな組み合わせを出荷する Vim とは対照的です。feature-compile これは、Vim の "HUGE" ビルドのよりスリムなバージョンと考えてください。これにより、バグの表面領域が減少し、ユーザーにとって混乱や摩擦の一般的な原因が解消されます。
Nvim はすべてのプラットフォームで提供できない機能を避けます。代わりに、それは外部プラグイン/拡張機能に委ねられます。例えば、-X プラットフォーム固有のオプションは、Vim で「時々」利用可能です(潜在的な驚きがあります:https://stackoverflow.com/q/14635295)。
Vim の内部テスト機能 (test_autochdir(), test_settime() など) は公開されていません(実装もされていません)。代わりに Nvim には堅牢な API があります。
ユーザーが節約する時間よりも多くの時間を費やすことになる動作、オプション、ドキュメントは削除されます。
ユーザビリティの詳細は、後方互換性のコストよりもメリットが大きい場合に改善されました。いくつかの例を挙げます。
'directory' および 'undodir' のディレクトリは自動的に作成されます。
'guicursor' などのターミナル機能は、可能な場合に有効になります。
さまざまな "nvim" cli-arguments は再設計されました。
一部の機能は、外部プラグインを必要としていたものが組み込まれています。
ヤンクされた領域のハイライト表示については、vim.hl を参照してください。

アーキテクチャ

Nvim UI はコアエディターから「分離」されています。組み込みの TUI を含むすべての UI は、Nvim サーバーに接続する ( --server または --embed 経由) プラグインに過ぎません。複数の Nvim UI クライアントが同じ Nvim エディターサーバーに接続できます。
外部プラグインは別のプロセスで実行されます。remote-plugin これにより安定性が向上し、それらのプラグインがエディターをブロックすることなく動作できるようになります。古い Vim インターフェイス ( if_pyth, if_ruby) を使用する「レガシー」Python および Ruby プラグインでさえ、プロセス外で実行されるため、Nvim をクラッシュさせることはできません。
プラットフォームおよび I/O 機能は libuv を基盤として構築されています。Nvim は libuv の機能とバグ修正の恩恵を受けており、他のプロジェクトは Nvim 開発者による libuv の改善の恩恵を受けています。

機能

コマンドライン
式プロンプト (@=, c_CTRL-R_=, i_CTRL-R_=) は、組み込みの Vimscript 式パーサーを使用してハイライトされます。expr-highlight
E5408 E5409 input(), inputdialog() はカスタムハイライトをサポートします。input()-highlight
(実験的) g:Nvim_color_cmdline コマンドライン ( : ) は、g:Nvim_color_cmdline で定義されたコールバックによって色分けされます (このコールバックはテスト専用であり、将来削除される予定です)。
コマンド
:drop は常に利用可能です
:Man はデフォルトで利用可能で、補完などの多くの改善が加えられています。
:match は、ハイライトグループが定義される前に呼び出すことができます
:source は Lua で動作します。ユーザーコマンドは、入力時に結果を表示するために :command-preview をサポートできます
:write に "++p" フラグを指定すると、親ディレクトリが作成されます。
関数
dictwatcheradd() は、Dict が変更されるたびにコールバックを通知します
msgpackdump(), msgpackparse() は msgpack のシリアル化/デシリアライズを提供します
system(), systemlist(){cmd} を直接実行できます ( 'shell' なしで)
matchadd() は、ハイライトグループが定義される前に呼び出すことができます
tempname() は、Nvim の tempdir が消えた場合に回復を試みます。
writefile() に "p" フラグを指定すると、親ディレクトリが作成されます。
ハイライトグループ
highlight-blend は、ハイライトグループのブレンドレベルを制御します
expr-highlight ハイライトグループ ("Nvim" で始まる)
hl-NormalFloat は、フローティングウィンドウをハイライトします
hl-FloatBorder は、フローティングウィンドウの境界線をハイライトします
hl-FloatTitle は、フローティングウィンドウのタイトルをハイライトします
hl-FloatFooter は、フローティングウィンドウのフッターをハイライトします
hl-NormalNC は、現在のウィンドウではないウィンドウをハイライトします
hl-MsgArea は、メッセージ/コマンドライン領域をハイライトします
hl-MsgSeparator は、スクロールされたメッセージの区切りをハイライトします
hl-WinSeparator は、ウィンドウの区切りをハイライトします
hl-Whitespace は、'listchars' の空白をハイライトします
hl-WinBar は、'winbar' をハイライトします
hl-WinBarNC は、現在のウィンドウではないウィンドウの 'winbar' をハイライトします
入力/マッピング
ALT (META) コードは常に機能します ( TUI でも)。任意のキーで <M- をマップします: <M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter> など。
大文字と小文字を区別します: <M-a><M-A> は 2 つの異なるキーコードです。
ALT はマップされていない場合、<Esc> のように動作する場合があります。i_ALT v_ALT c_ALT
ノーマルコマンド
gO は、現在のバッファのファイルタイプ定義された「アウトライン」を表示します。
Q は、Ex モードに切り替える代わりに、最後に記録されたマクロを再生します ( gQ )。
オプション
:set {option}< は、すべての グローバルローカル オプションのローカル値を削除します。
:setlocal {option}< は、すべてのオプションのグローバル値をローカル値にコピーします。
'autoread' は、ターミナルで動作します (「フォーカス」イベントをサポートしている場合)
'cpoptions' フラグ: cpo-_
'diffopt' "linematch" 機能
'exrc' は、".nvim.lua", ".nvimrc", または ".exrc" ファイルを検索します。ユーザーは、ファイルを信頼するかどうかを尋ねられます。
'fillchars' フラグ: "msgsep", "horiz", "horizup", "horizdown", "vertleft", "vertright", "verthoriz"
'foldcolumn' は、最大 9 つの動的/固定列をサポートします
'guicursor' は、ターミナル (TUI) で動作します
'inccommand' は、:substitute のようなコマンドと :command-preview コマンドのインタラクティブな結果を表示します
"view" は、ジャンプリストを移動するときに mark-view を復元しようとします。
"clean" は、アンロードされたバッファーをジャンプリストから削除します。
'laststatus' グローバルステータスラインのサポート
'mousescroll' マウスでスクロールするときのスクロール量
'pumblend' 疑似透過ポップアップメニュー
"F" フラグは、自動コマンドからの出力に影響を与えません。
"q" フラグは、マクロ記録メッセージを完全に非表示にします。
'signcolumn' は、最大 9 つの動的/固定列をサポートします
'statuscolumn' は、'statusline' 形式を使用した列のフルコントロール
'tabline' タブページラベルの中央クリックでタブページを閉じ、%@Func@foo%X はマウスクリック時に任意の関数を呼び出すことができます
'ttimeout', 'ttimeoutlen' の動作が簡略化されました
'winblend' フローティングウィンドウでの疑似透過性 api-floatwin
'winhighlight' ウィンドウローカルのハイライト
プロバイダー
$PATH に Python インタープリターがある場合、:python:python3 は常に利用可能です。provider-python を参照してください。
シェル
シェルの出力 (:!, :make, …) は常に UI を介してルーティングされるため、画面を「めちゃくちゃ」にすることはありません。(画面をめちゃくちゃにしたい場合は、"chansend(v:stderr,…)" を使用できます :)
Nvim は、出力が多すぎる場合に、シェルコマンド (:!, :grep, :make) からのメッセージを調整 (スキップ) します。データが失われることはありません。これは表示にのみ影響し、パフォーマンスが向上します。:terminal 出力は調整されることはありません。
:! は「インタラクティブ」コマンドをサポートしていません。代わりに :terminal を使用してください。(GUI Vim にも同様の制限があります。Vim の ":help gui-pty" を参照してください。)
:!start は Windows で特殊ケースとして扱われません。
system() は、「バックグラウンド化された」コマンドの書き込み/読み込みをサポートしていません。E5677
サイン
関連付けられた行が削除されると、サインが削除されます。
同じグループ内で同じ識別子で 2 回配置されたサインは移動されます。
起動
-e-es は、-E と -Es と同じ「改善された Ex モード」を呼び出します。
-E-Es は、stdin をテキストとして読み取ります (バッファ 1 へ)。
-es-Es の動作が改善されました
自動的に終了し、"-c qa!" は不要です。
スワップファイルダイアログをスキップします。
-s は、スクリプト名が "-" の場合、stdin からノーマルコマンドを読み取ります。
stdin から (コマンドではなく) テキストを読み取る --
デフォルトで動作します: "-" ファイルはオプションです
より多くのケースで動作します: -Es, ファイル引数
TUI: :set-termcap
ターミナル機能をデバッグするには、'verbose' レベル 3 で Nvim を起動します
nvim -V3
'term' E529 E530 E531
'term' は、$TERM およびその他の環境チェックから派生したターミナルタイプを反映します。デバッグ専用です。起動中は信頼できません。
:echo &term
"builtin_x" は、システムで予期される terminfo ファイルが見つからなかったため、builtin-terms のいずれかが選択されたことを意味します。
Nvim は、Linux 仮想ターミナルで 256 色の機能を使用します。Vim は、Linux VT で 8 色に加えて明るい前景のみを使用します。
Vim は、その builtin-terms にあるものと、terminfo から読み取ったものを組み合わせ、その組み合わせがどのように機能するかを制御する 'ttybuiltin' 設定を持っています。Nvim はどちらか一方を使用し、両方をマージしようとはしません。
UI/表示
Visual選択はカーソル位置の文字をハイライトします。visual-use
メッセージ: 'cmdheight' より長いメッセージを表示する場合、画面全体ではなくメッセージ行のみをスクロールします。区切り線は hl-MsgSeparator および 'fillchars' の "msgsep" フラグで装飾されます。msgsep
変数
v:progpath は常に絶対パス("フル")です。
v:windowid は常に利用可能です(外部UIでの使用のため)。
OptionSet 自動コマンドの引数 v:option_newv:option_old
v:option_oldlocalv:option_oldglobal は常に文字列ではなく、オプションの型を持ちます。v:option_old は、文字列のグローバル-ローカルオプションだけでなく、すべてのグローバル-ローカルオプションの古いグローバル値になりました。
Vimscript
:redirexecute() 内でネストして動作します。

アップストリームされた機能 nvim-upstreamed

これらのNvimの機能は、後にVimに統合されました。
'fillchars' フラグ: "eob"
'jumpoptions' "stack" の挙動
'wildoptions' フラグ: "pum" は wildmode 補完でポップアップメニューを有効にします。
:sign-define "numhl" 引数
:source は匿名(ファイルなし)のスクリプトで動作します。
'statusline' は無制限のアラインメントセクションをサポートします。

その他の変更点 nvim-changed

このセクションでは、さまざまな低レベルの動作変更について説明します。
mkdir() の挙動が変更されました
1. /tmp/foo が存在せず、/tmp に書き込み可能であると仮定すると、mkdir('/tmp/foo/bar', 'p', 0700) は /tmp/foo と /tmp/foo/bar の両方を 0700 パーミッションで作成します。Vim の mkdir は /tmp/foo を 0755 で作成します。
2. 既存のディレクトリを 'p' で作成しようとすると(例:mkdir('/', 'p'))、mkdir() は黙って終了します。Vim ではこれはエラーでした。
3. mkdir() のエラーメッセージに、mkdir が失敗した場合の strerror() テキストが含まれるようになりました。
string():echo の挙動が変更されました
1. ネストされたコンテナ構造には、最大再帰深度制限が適用されません。
2. string() は、再帰制限を超えたときではなく、ネストされたコンテナで即座に失敗します。
3. :echo が以下のような重複したコンテナに遭遇した場合、
let l = []
echo [l, l]
"[...]" は使用しません(以前は "[[], [...]]"、現在は "[[], []]")。"..." は再帰的なコンテナにのみ使用されます。
4. :echo がネストされたコンテナを出力する場合、再帰的なコンテナが出力されたレベルを示す "@level" を "..." の後に追加します::echo-self-refer。同様のことが string() にも適用されます("{E724@level}" のような構造を使用しますが)、string() はエラーを返し続けるため、これは信頼できません。
5. 文字列化された無限大および NaN 値は str2float() を使用するようになり、評価して戻すことができます。
6. (内部)Vim で VAR_UNKNOWN を出力または文字列化しようとすると何も出力されず E908 になりますが、Nvim では内部エラーとなります。
json_decode() の挙動が変更されました
1. msgpack-special-dict を出力することがあります。
2. msgpack-special-dict はキーが重複する場合にも出力されますが、Vim ではエラーになります。
3. 有効な JSON のみを受け入れます。末尾のカンマは許可されません。
json_encode() の挙動がわずかに変更されました。現在、msgpack-special-dict の値は受け入れられますが、v:none は受け入れられません。
Viminfo テキストファイルはバイナリ(messagepack)の shada ファイルに置き換えられました。その他の違い
shada-c は効果がありません。
shada-s は、レジスタだけでなく、すべての項目のサイズを制限するようになりました。
'viminfo' オプションの名前が 'shada' に変更されました。互換性のため、古いオプションはエイリアスとして保持されています。
:wviminfo:wshada に、:rviminfo:rshada に名前が変更されました。古いコマンドは引き続き保持されています。
ShaDa ファイル形式は、前方および後方互換性を考慮して設計されました。shada-compatibility
一部のエラーが発生した場合、ShaDa コードはユーザーが対応を決定できるように一時ファイルをそのまま保持します。Vim はこのような場合、一時ファイルを削除します。shada-error-handling
ShaDa ファイルは検索方向(v:searchforward)を保持しますが、viminfo は保持しません。
printf()%p 引数で使用すると意味のある値を返します。Vim では文字列の役に立たないアドレス(文字列は新たに割り当てられたメモリにコピーされます)を返し、文字列に変換できない型では失敗していました。詳細については id() を参照してください。現在、内部的に printf("%p", {expr}) を使用しています。
c_CTRL-R で、コマンドラインに特殊でないレジスタをペーストすると、最後の <CR> が省略されます。
ウィンドウ間を移動すると CursorMoved がトリガーされます。
Lua インターフェース (lua.txt)
:lua print("a\0b") は、:echomsg "a\nb" と同様に、a^@b を出力します。Vim では、:lua print("a\nb") とまったく同様に、ab を別々の行に出力します。
:lua error('TEST') はエラーを出力します
E5108: Error executing lua: [string "<Vimscript compiled string>"]:1: TEST
一方、Vim は "TEST" のみを出力します。
Lua は vim.api を介して Nvim API に直接アクセスできます。
Lua の package.path および package.cpath は、'runtimepath' に従って自動的に更新されます。lua-module-load
コマンド
:doautocmd は「一致する自動コマンドがありません」という警告を表示しません。
:wincmd はカウントを受け入れます。
ファイルが外部で更新された場合、:write! はプロンプトを表示しません。
:=ex-フラグ を受け入れません。引数を指定すると、:lua= と同等になります。
コマンドライン
矢印キーの意味は 'wildoptions' によって変化しません。
関数
input() および inputdialog() は、辞書引数(使用する場合は他のすべての引数を置き換えます)を介して、それぞれの機能(キャンセル時の戻り値と補完)をサポートし、「cancelreturn」は辞書で渡された場合、任意の型を持つことができます。
input() および inputdialog() は、ユーザー定義のコマンドラインハイライトをサポートします。
ハイライトグループ
hl-ColorColumnhl-CursorColumn は、他のほとんどのグループよりも優先度が低いです。
hl-CursorLine は、前景色が設定されていない限り、優先度が低いです。
hl-VertSplithl-WinSeparator に置き換えられました。
ハイライトグループ名には @ 文字を含めることができます。
正規表現 [a-zA-Z0-9_.@-]* に一致しない名前でハイライトグループを定義するとエラーになります(group-name 参照)。
hl-StatusLineTerm hl-StatusLineTermNC は、デフォルトの TermOpen ハンドラーによって設定される 'winhighlight' ウィンドウローカルハイライトとして実装されています。
ins-completion-menu にはカスケードハイライトスタイルがあります。hl-PmenuSelhl-PmenuMatch は両方とも hl-Pmenu から継承し、hl-PmenuMatchSelhl-PmenuSelhl-PmenuMatch の両方からハイライトを継承します。
マクロ(録画)の挙動
:lmap 中に録画されたマクロの再生は、録画時と同じアクションを生成します。Vim では、:lmap'ped キーを使用中にマクロを録画すると、録画時と再生時の挙動が異なります。
'keymap' は :lnoremap の代わりに :lmap を介して実装されているため、マクロと 'keymap' を同時に使用できます。これはまた、'keymap' からのキーの結果に :imap を使用できることも意味します。
マッピング
簡略化可能なキー(例:<C-I>)のマッピングを作成しても、簡略化された形式(例:<Tab>)の既存のマッピングは置き換えられません。
マッピングの lhs の先頭にある数字の後に続く "#" は、ファンクションキーを表しません。
モーション
jumplist は、無駄な/ファントムジャンプを回避します。
パフォーマンス
フォールドは挿入モード中に更新されません。
構文ハイライト
syncolor.vim が削除されました。Nvim は、構文ハイライトが有効かどうかにかかわらず、ライトおよびダーク背景の両方に対して、デフォルトのハイライトグループを自動的に設定するようになりました。これは、:syntax-on:syntax-enable が同一になったことを意味します。以前に after/syntax/syncolor.vim ファイルを使用していたユーザーは、そのファイルをカラースキームに移行する必要があります。:colorscheme
Vimscript の互換性
countv:count のエイリアスではありません。
errmsgv:errmsg のエイリアスではありません。
shell_errorv:shell_error のエイリアスではありません。
this_sessionv:this_session のエイリアスではありません。
ワーキングディレクトリ(Vim はこれらのいくつかを Nvim の後に実装しました)
別のウィンドウまたはタブに切り替えるときに、DirChanged および DirChangedPre をトリガーできます。
getcwd() および haslocaldir() は、タブページまたはウィンドウが見つからない場合にエラーをスローする可能性があります。E5000 E5001 E5002
haslocaldir() は、ウィンドウ番号として -1 が渡された場合にのみタブローカルディレクトリをチェックし、可能な戻り値は 0 と 1 のみです。
getcwd(-1) はグローバルワーキングディレクトリを返すのではなく、getcwd(-1, 0) と同等です。グローバルワーキングディレクトリを取得するには、getcwd(-1, -1) を使用します。
自動コマンド
ネストされた自動コマンドの実行における一貫性のない動作を修正しました: https://github.com/neovim/neovim/issues/23368
TermResponse は、プライマリデバイス属性応答の代わりに、ターミナルから受信した任意の OSC シーケンスに対して発火します。 v:termresponse

欠落している機能 nvim-missing

以下のレガシー Vim 機能はまだ実装されていません。

削除されたレガシー機能 nvim-removed

以下の Vim 機能は、意図的に Nvim から削除されました。
エイリアス
ex ("nvim -e" のエイリアス)
exim ("nvim -E" のエイリアス)
gex (GUI)
gview (GUI)
gvim (GUI)
gvimdiff (GUI)
rgview (GUI)
rgvim (GUI)
rview
rvim
view ("nvim -R" のエイリアス)
vimdiff ("nvim -d" のエイリアス diff-mode)
コマンド
:behave
:fixdel
hardcopy :hardcopy は削除されました。代わりに :TOhtml を使用し、生成された HTML を Web ブラウザまたはその他の HTML ビューアで印刷してください。
:helpfind
:mode (引数を受け付けなくなりました)
:open
:Print
:promptfind
:promptrepl
:scriptversion (常にバージョン 1)
:shell
:sleep! (カーソルを非表示にしません。:sleep と同じ)
:smile
:tearoff
:cstag
:cscope
:lcscope
:scscope
:Vimuntar
:TOhtml は (さまざまな違いを伴う) Lua バージョンに置き換えられました
コンパイル時機能
Emacs タグのサポート
X11 統合 ( x11-selection を参照)
Cscope: cscope
Cscope のサポートは、以下のプラグインベースのソリューションを優先して削除されました: https://github.com/dhananjaylatkar/cscope_maps.nvim
Eval
Vim9script
v:none (JavaScript の "undefined" を表すために Vim で使用されていました)。代わりに v:null を使用してください。
イベント
SigUSR1 代わりに SIGUSR1 シグナルを検出するには、Signal を使用してください。
オプション
アンチエイリアス
'backspace' は数値の値をサポートしなくなりました。代わりに
backspace=0 の場合は backspace= (空) を設定します。
backspace=1 の場合は backspace=indent,eol を設定します。
backspace=2 の場合は backspace=indent,eol,start を設定します (Nvim のデフォルトの動作)。
backspace=3 の場合は backspace=indent,eol,nostop を設定します。
bioskey (MS-DOS)
conskey (MS-DOS)
'cp' 'nocompatible' 'nocp' 'compatible' (Nvim は常に "nocompatible" です。)
'cpoptions' (gjpkHw<*- およびすべての POSIX フラグが削除されました)
'cryptmethod' 'cm' 'key' (Vim の暗号化実装)
cscopepathcomp
cscopeprg
cscopequickfix
cscoperelative
cscopetag
cscopetagorder
cscopeverbose
'encoding' ("utf-8" が常に使用されます)
esckeys
'guioptions' "t" フラグが削除されました
'guifontset' 'gfs' (代わりに 'guifont' を使用してください。)
'guipty' (Nvim はすべてのプラットフォームでパイプと PTY を一貫して使用します。)
'highlight' (組み込みの ハイライトグループ の名前は変更できません。)
'hkmap' 'hk' 代わりに set keymap=hebrew を使用してください。
'hkmapp' 'hkp' 代わりに set keymap=hebrewp を使用してください。
keyprotocol
'pastetoggle' 'pt' ただ貼り付けるだけです。™ ターミナルまたは GUI の貼り付け機能 (CTRL-SHIFT-v、CMD-v (macOS)、中クリックなど) を使用してテキストを貼り付けると、貼り付け は自動的に処理されます。
'insertmode' 'im' 'insertmode' をエミュレートするには、次のスクリプトを使用してください
autocmd BufWinEnter * startinsert
inoremap <Esc> <C-X><C-Z><C-]>
inoremap <C-C> <C-X><C-Z>
inoremap <C-L> <C-X><C-Z><C-]><Esc>
inoremap <C-Z> <C-X><C-Z><Cmd>suspend<CR>
noremap <C-C> <Esc>
snoremap <C-C> <Esc>
noremap <C-\><C-G> <C-\><C-N><Cmd>startinsert<CR>
cnoremap <C-\><C-G> <C-\><C-N><Cmd>startinsert<CR>
inoremap <C-\><C-G> <C-X><C-Z>
autocmd CmdWinEnter * noremap <buffer> <C-C> <C-C>
autocmd CmdWinEnter * inoremap <buffer> <C-C> <C-C>
lua << EOF
  vim.on_key(function(c)
    if c == '\27' then
      local mode = vim.api.nvim_get_mode().mode
      if mode:find('^[nvV\22sS\19]') and vim.fn.getcmdtype() == '' then
        vim.schedule(function()
          vim.cmd('startinsert')
        end)
      end
    end
  end)
EOF
'maxcombine' 'mco' : Nvim は最大文字サイズをコードポイントではなくバイト単位で数えます。これは、'maxcombine' を 6 に設定した状態で vim で適切に表示されるすべての文字を常に収容するのに十分な大きさであることが保証されています。
画面バッファに収まらない大きな文字でテキストを編集することはできますが、表示することはできません。 g8 または ga を使用してください。mbyte-combining を参照してください。
注: rexexp エンジンには、構成文字を 6 つのみ考慮するというハードコードされた制限がまだあります。
'maxmem' Nvim はメモリ管理を OS に委譲します。
'maxmemtot' Nvim はメモリ管理を OS に委譲します。
printoptions
'secure' : 'exrc' ファイルでは、明示的に「信頼済み」としてマークする必要があるため、すべてが許可されます。
'shortmess' フラグ: shm-f shm-n shm-x shm-i (常にオンのように動作します)
'termencoding' 'tenc' (Vim 7.4.852 でも Windows でこれが削除されました)
'terse' 'noterse' (代わりに 'shortmess' に "s" を追加してください)
textauto
textmode
weirdinvert
プラグイン
logiPat
rrhelper
macmap.vim
tools/check_colors.vim
macros/{justify,matchit,shellmenu,swapmous}.vim: packadd! justify などを直接使用してください
プロバイダー
if_lua : Nvim の Lua API は Vim の "if_lua" と互換性がありません。
if_pyth: python-bindeval python-Function はサポートされていません。
起動
--literal: ファイル引数は常にリテラルとして扱われます。Windows でワイルドカードを展開するには、:n を使用してください。例:nvim +"n *"
イージーモード:eview, evim, nvim -y
制限モード:rview, rvim, nvim -Z
Viモード:nvim -v
テスト関数
test_alloc_fail()
test_autochdir()
test_disable_char_avail()
test_feedinput()
test_garbagecollect_soon
test_getvalue()
test_ignore_error()
test_null_blob()
test_null_channel()
test_null_dict()
test_null_function()
test_null_job()
test_null_list()
test_null_partial()
test_null_string()
test_option_not_set()
test_override()
test_refcount()
test_scrollbar()
test_setmouse()
test_settime()
test_srand_seed()
TUI: t_xx termcap-options t_AB t_Sb t_vb t_SI
Nvim は、ターミナル機能を構成するための特別な t_XX オプションや <t_XX> キーコードを持ちません。代わりに、Nvim はターミナルを他の UI と同様に扱います。例えば、'guicursor' は可能であればターミナルカーソルのスタイルを設定します。
termcap
Nvim は termcap データベースを一切使用せず、terminfobuiltin-terms のみを使用します。
xterm-8bit xterm-8-bit
Xterm は、真の 8 ビット CSI を使用するモードで実行できます。これをサポートするには、ターミナルが UTF-8 モードであるか非 UTF-8 モードであるかを自動検出する必要があります。これは、8 ビット CSI 文字をそれぞれ異なる方法で書き込む必要があるためです。Vim は起動時にターミナルに「バージョン要求」シーケンスを発行し、ターミナルがどのように CSI を送信しているかを確認します。Nvim はそのようなシーケンスを発行せず、常に 7 ビット制御シーケンスを使用します。
メイン
コマンドインデックス
クイックリファレンス