Vim_diff

Nvim :help 页面,生成来源 使用 tree-sitter-vimdoc 解析器。


Nvim 和 Vim 之间的区别
Nvim 在许多方面不同于 Vim,尽管编辑器和 Vimscript(不是 Vim9script)功能基本相同。本文档是差异的完整集中参考。

配置 nvim-config

用户配置和数据文件位于标准 基本目录 中(另请参见 $NVIM_APPNAME)。特别注意
使用 $XDG_CONFIG_HOME/nvim/init.vim 而不是 .vimrc 作为您的 配置
使用 $XDG_CONFIG_HOME/nvim 而不是 .vim 来存储配置文件。
使用 $XDG_STATE_HOME/nvim/shada/main.shada 而不是 .viminfo 来保存持久会话信息。 shada

默认值 nvim-defaults

文件类型检测默认情况下启用。这可以通过在 init.vim 中添加 ":filetype off" 来禁用。
语法高亮默认情况下启用。这可以通过在 init.vim 中添加 ":syntax off" 来禁用。
默认颜色方案已更新。这可能导致颜色方案看起来不同,因为它们依赖于默认情况下高亮组的定义方式。在 init.vim 中添加 ":colorscheme vim" 或在颜色方案文件中添加 ":source $VIMRUNTIME/colors/vim.lua" 以恢复旧的默认链接和颜色。
'autoindent' 已启用
'autoread' 已启用(在所有 UI 中工作,包括终端)
'background' 默认值为 "dark"(除非由终端/UI 自动设置)
'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 上)。驱动器字母在没有它的情况下被正确处理。(使用 gF 对于以 ":line:col" 为后缀的文件路径)。
'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 默认值为 "l" 以启用 Lua 高亮

默认鼠标

default-mouse disable-mouse 默认情况下鼠标已启用。这意味着 滚动鼠标滚轮 将滚动窗口而不是移动光标;<LeftMouse> 点击放置光标;<RightMouse> 点击打开默认的 弹出菜单,其中包含标准操作。
鼠标在 命令行模式more 提示 中未启用,因此您可以通过简单地输入 ":" 来暂时禁用它。或者,如果您想部分或完全禁用鼠标或弹出菜单,请执行以下任一操作
通过取消设置 '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" 时为白色背景和黑色前景。虽然这可能不反映实际的前景/背景颜色,但它允许 'background' 保留在终端模拟器中运行的嵌套 Nvim 实例中。
TermOpen:为 终端 缓冲区设置默认选项
'undolevels' 设置为 -1
'textwidth' 设置为 0
nvim_cmdwin
CmdwinEnter:将语法同步限制为 maxlines=1 在 cmdwin 中。
nvim_swapfile
SwapExists:当交换文件由正在运行的 Nvim 进程拥有时,跳过交换文件提示(将 v:swapchoice 设置为 "e")。显示 W325 "忽略交换文件…" 消息。

新功能 nvim-features

主要组件

API API
作业控制 job-control
LSP 框架 lsp
Lua 脚本 lua
解析引擎 treesitter
提供者
Node.js 插件 provider-nodejs
Python 插件 provider-python
Ruby 插件 provider-ruby
远程插件 remote-plugin
共享数据 shada
终端模拟器 terminal
Vimscript 解析器 nvim_parse_expression()
XDG 基础目录 xdg

用户体验

直观一致的操作是 Nvim 的主要目标之一。
功能编译
与 Vim(它提供 100 多个可选功能的不同组合)不同,Nvim 始终包含所有功能。 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 与核心编辑器“分离”:所有 UI(包括内置 TUI)都只是连接到 Nvim 服务器(通过 --server--embed)的插件。 多个 Nvim UI 客户端可以连接到同一个 Nvim 编辑器服务器。
外部插件在单独的进程中运行。 remote-plugin 这提高了稳定性,并允许这些插件在不阻塞编辑器的情况下工作。 即使使用旧的 Vim 接口(if_pythif_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 以在您键入时显示结果
使用“++p”标志的 :write 会创建父目录。
函数
dictwatcheradd() 每次修改 Dict 时都会通知回调
msgpackdump()msgpackparse() 提供 msgpack 序列化/反序列化
system()systemlist() 可以直接运行 {cmd}(无需 'shell'
matchadd() 可以在定义突出显示组之前调用
tempname() 如果 Nvim tempdir 消失,则尝试恢复。
使用“p”标志的 writefile() 会创建父目录。
突出显示组
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> 是两个不同的键码。
如果没有映射,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" 尝试在通过跳转列表移动时恢复 标记视图
"clean" 从跳转列表中删除未加载的缓冲区。
跳转列表、更改列表、备用文件或使用 标记移动
'laststatus' 全局状态行支持
'mousescroll' 使用鼠标滚动时滚动的数量
'pumblend' 伪透明弹出菜单
"F" 标志不影响来自 autocommand 的输出。
"q" 标志完全隐藏宏录制消息。
'signcolumn' 支持最多 9 个动态/固定列
'statuscolumn' 使用 'statusline' 格式完全控制列
'tabline' 中间单击选项卡页面标签会关闭选项卡页面,%@Func@foo%X 可以通过鼠标单击调用任何函数
'ttimeout''ttimeoutlen' 的行为已简化
'winblend' 浮动窗口中的伪透明度 api-floatwin
'winhighlight' 窗口局部突出显示
提供者
如果您的 $PATH 上有可用的 Python 解释器,则 :python:python3 始终可用。 请参阅 provider-python
Shell
Shell 输出 (:!:make 等) 始终通过 UI 路由,因此它不会“弄乱”屏幕。(如果您想弄乱屏幕,仍然可以使用“chansend(v:stderr,…)” :)
如果 shell 命令 (:!:grep:make) 的输出过多,Nvim 会对其进行节流处理(跳过)。 不会丢失任何数据,这只会影响显示并提高性能。 :terminal 输出永远不会被节流处理。
:! 不支持“交互式”命令。 请改用 :terminal。(GUI Vim 有类似的限制,请参阅 Vim 中的“:help gui-pty”。)
:!start 在 Windows 上没有特殊情况。
system() 不支持写入/读取“后台”命令。 E5677
标记
如果关联行被删除,则会删除标记。
在同一组中使用相同标识符放置两次的标记将被移动。
启动
-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 文件。
Nvim 将在 Linux 虚拟终端上使用 256 色功能。 Vim 在 Linux VT 上仅使用 8 种颜色加上亮色前景。
Vim 将其 内置终端 中的内容与其从 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
:redir 嵌套在 execute() 中有效。

上游功能 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() 并且可以被 eval 回去。
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 将非特殊寄存器粘贴到 cmdline 中,会省略最后一个 <CR>
CursorMoved 在窗口之间移动时触发。
Lua 接口 (lua.txt)
:lua print("a\0b") 将打印 a^@b,就像 :echomsg "a\nb" 一样。在 Vim 中,它在单独的行上打印 ab,与 :lua print("a\nb") 完全相同。
: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-flags。带有参数时,它等同于 :lua=
命令行
箭头键的含义不会根据 'wildoptions' 改变。
函数
input()inputdialog() 通过字典参数支持彼此的功能(分别在取消和完成时返回),并且如果在字典中传递 "cancelreturn",它可以具有任何类型(替换所有其他参数)。
input()inputdialog() 支持用户定义的 cmdline 高亮显示。
突出显示组
hl-ColorColumnhl-CursorColumn 的优先级低于大多数其他组
hl-CursorLine 的优先级较低,除非设置了前景色
高亮组名称允许包含 @ 字符。
使用与正则表达式 [a-zA-Z0-9_.@-]* 不匹配的名称定义高亮组会导致错误(请参阅 group-name)。
hl-StatusLineTerm hl-StatusLineTermNC 通过 'winhighlight' 窗口本地高亮显示实现,这些高亮显示由默认的 TermOpen 处理程序设置。
ins-completion-menu 具有级联高亮显示样式。 hl-PmenuSelhl-PmenuMatch 继承自 hl-Pmenu,而 hl-PmenuMatchSel 继承自 hl-PmenuSelhl-PmenuMatch
宏 (录制) 行为
在 :lmap 期间录制的宏的回放会产生与录制时相同的动作。在 Vim 中,如果在使用 :lmap'ped 键时录制宏,则录制和回放的行为不同。
'keymap' 通过 :lmap 实现,而不是 :lnoremap,这样你就可以同时使用宏和 'keymap'。这也意味着你可以在 'keymap' 中的键结果上使用 :imap
映射
为可简化的键创建映射(例如 <C-I>)不会替换其简化形式的现有映射(例如 <Tab>)。
"#" 后跟一个数字在映射的 lhs 开头不代表功能键。
移动
跳跃列表 避免无用/虚假的跳跃。
性能
在插入模式下不会更新折叠。
语法高亮显示
syncolor.vim 已被删除。Nvim 现在为浅色和深色背景自动设置默认高亮显示组,无论是否启用语法高亮显示。这意味着 :syntax-on:syntax-enable 现在是相同的。以前使用 after/syntax/syncolor.vim 文件的用户应该将该文件转换为配色方案。 :colorscheme
Vimscript 兼容性
count 不再是 v:count 的别名
errmsg 不再是 v:errmsg 的别名
shell_error 不再是 v:shell_error 的别名
this_session 不再是 v:this_session 的别名
工作目录(Vim 在 Nvim 之后实现了其中的一些)
DirChangedDirChangedPre 在切换到另一个窗口或标签页时可以被触发。
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 模式
命令
:behave
:fixdel
hardcopy :hardcopy 已被移除。请使用 :TOhtml 并使用网页浏览器或其他 HTML 查看器打印生成的 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(Vim 用来表示 JavaScript 的“undefined”);请使用 v:null 代替。
事件
SigUSR1 请使用 Signal 来检测 SIGUSR1 信号。
选项
antialias
'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'(内置 highlight-groups 的名称不可更改。)
'hkmap' 'hk' 请改用 set keymap=hebrew
'hkmapp' 'hkp' 请改用 set keymap=hebrewp
keyprotocol
'pastetoggle' 'pt' Just Paste It.™ paste 会在您使用终端或 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 以字节而不是代码点来计算最大字符大小。这保证了足够大,可以始终将所有字符正确地显示在 vim 中,并将 'maxcombine' 设置为 6。
您仍然可以使用大于屏幕缓冲区大小的字符编辑文本,只是看不到它们。请使用 g8ga。参见 mbyte-combining
注意:rexexp 引擎仍然有硬编码限制,最多只能考虑 6 个组合字符。
'maxmem' Nvim 将内存管理委托给操作系统。
'maxmemtot' Nvim 将内存管理委托给操作系统。
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”不兼容。
启动
--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 位控制序列。
主要
命令索引
快速参考