Download as pdf or txt
Download as pdf or txt
You are on page 1of 8

Vim_diff ‑ Neovim 文档

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

Nvim 和 Vim 之间的区别


尽管编辑器和 Vimscript(不是 Vim9script)功能大部分相同,但 Nvim
在很多方面与 Vim 不同。本文档是差异的完整且集中的参考。

配置 nvim 配置
使用$XDG_CONFIG_HOME/nvim/init.vim而不是.vimrc您的配置。
使用$XDG_CONFIG_HOME/nvim而不是.vim存储配置文件。
使用$XDG_STATE_HOME/nvim/shada/main.shada而不是.viminfo持久会话信息。
沙达

默认值 nvim‑默认值
默认情况下启用文件类型检测。可以通过在init.vim中添加 “:filetype off”
来禁用此功能。
默认配色方案已更新。这可能会导致配色方案看起来有所不同,因为它们依赖于默认情况下定义突出显示组的方
“:colorscheme vim” 添加到init.vim或将 “:source $VIMRUNTIME/colors/vim.lua”
添加到您的配色方案文件中,以恢复旧的默认链接和颜色。
‘backupdir’默认为 .,~/.local/state/nvim/backup// ( xdg ),自动创建
“定义”默认为“”。C ftplugin 将其设置为“^\\s*#\\s*define”
“包含”默认为“”。C ftplugin 将其设置为“^\\s*#\\s*include”
“isfname”不包含“:”(在 Windows 上)。如果没有它,驱动器号也能正确处理。(使用gF作为后缀为“:l
“路径”默认为“.„”。C ftplugin 添加“/usr/include”(如果存在)。
“标签”默认为“./tags;,tags”
‘undodir’默认为 ~/.local/state/nvim/undo// ( xdg ),自动创建
matchit 插件已启用。要在您的配置中禁用它:
:let loaded_matchit = 1

默认鼠标

[default-mouse](https://neovim.io/doc/user/vim_diff.html#default-mouse)
[disable-mouse](https://neovim.io/doc/user/vim_diff.html#disable-mouse)

1
默认情况下,鼠标处于启用状态,并<RightMouse>打开一个包含标准操作(“剪切”、“复制”、“粘贴”等
,因此您只需输入“:”即可暂时禁用它。
如果您不喜欢这样,您可以使用以下任一方法 在配置中禁用鼠标:
按<RightMouse>扩展选择而不是显示弹出菜单:
set mousemodel=extend
按下<A-LeftMouse>释放鼠标直至光标移动:
nnoremap <A-LeftMouse> <Cmd> \ set mouse=<Bar> \ echo 'mouse OFF until next cursor-move'<Bar
要删除“如何禁用鼠标”菜单项及其上方的分隔符:
aunmenu PopUp.How-to\ disable\ mouse aunmenu PopUp.-1-

默认映射

[default-mappings](https://neovim.io/doc/user/vim_diff.html#default-mappings)Nvim
在启动 时创建以下默认映射。您可以通过简单地删除映射来禁用配置中的任何这些,例如“:unmap
Y”。

默认自动命令

[default-autocmds](https://neovim.io/doc/user/vim_diff.html#default-autocmds)
默认自动命令存在于以下组中。使用“:autocmd! {group}”删除它们,并使用“:autocmd
{group}”查看它们是如何定义的。
nvim_终端:
BufReadCmd:将“term://”缓冲区视为终端缓冲区。终端启动
TermClose:不带参数启动的终端缓冲区(因此使用 ‘shell’)并且退出时没有错误会自动关闭。

新功能 nvim 功能
主要成分

用户体验

直观且一致地工作是 Nvim 的主要目标。


[feature-compile](https://neovim.io/doc/user/vim_diff.html#feature-compile)
与 Vim 相比,Nvim 始终包含所有功能(Vim 提供 100 多个可选功能的各种组合)。
feature‑compile将其视为 Vim 的“HUGE”构建的精简版本。这减少了错误的表面积,并消除了用户困惑和摩
Vim 的内部测试函数(test_autochdir()、test_settime() 等)没有暴露(也没有实现);相反,Nvim
有一个强大的 API。
如果行为、选项、文档花费用户的时间多于节省的时间,它们就会被删除。

2
可用性细节得到了改进,其好处超过了任何向后兼容性的成本。一些例子:
有些功能是内置的,否则需要外部插件:

建筑学

Nvim UI 与核心编辑器“解耦”:所有 UI,包括内置TUI,都只是连接到 Nvim


服务器的插件(通过‑‑server 或‑‑embed)。多个 Nvim UI 客户端可以连接到同一个
Nvim 编辑器服务器。
外部插件在单独的进程中运行。远程插件这提高了稳定性并允许这些插件在不阻塞编辑器的情况下工作。即使是
Vim 接口(if_pyth、 if_ruby)的“传统”Python 和 Ruby 插件也在进程外运行,因此它们不会导致
Nvim 崩溃。
平台和 I/O 设施基于 libuv 构建。Nvim 受益于 libuv 功能和错误修复,其他项目也受益于
Nvim 开发人员对 libuv 的改进。

特征

输入/映射: ALT ( META ) 和弦始终有效(即使在TUI中)。与任意键 映射<M‑


<M-1> : 、<M-BS>、<M-Del>、<M-Ins>、<M-/>、<M-\>、<M-Space>、<M-Enter>等。区分大小写:<M-a>和<
普通命令: gO显示当前缓冲区的文件类型定义的“轮廓”。 Q重播最后录制的宏,而不是切换到
Ex 模式 ( gQ )。
Shell:Shell 输出(:!、:make等)始终通过 UI 路由,因此它不会“弄乱”屏幕。(如果你想弄乱屏幕,你仍然
如果输出过多, Nvim 会限制(跳过)来自 shell 命令(:!、:grep、:make
)的消息。不会丢失数据,只会影响显示并提高性能。:终端输出永远不会受到限制。
:!不支持“交互式”命令。使用:terminal代替。(GUI Vim 有类似的限制,请参阅
Vim 中的“:help gui‑pty”。)
:!start 在 Windows 上没有特殊情况。
标志:如果删除关联线,标志也会被删除。同一组中两次放置的具有相同标识符的标志将被移动。
启动: ‑e和‑es调用与 ‑E 和 ‑Es 相同的“改进的 Ex 模式”。 ‑E和‑Es将 stdin
作为文本读取(读入缓冲区 1)。 ‑es和‑Es改进了行为:
自动退出,不需要“‑c qa!”。
默认工作:“‑”文件是可选的
适用于更多情况:‑Es,文件参数
TUI: 以“详细”[:set-termcap](https://neovim.io/doc/user/vim_diff.html#%3Aset-termcap)级别
3 启动 Nvim以显示终端功能:
<span><span>NVIM-V3</span></span>
Nvim 将在 Linux 虚拟终端上使用 256 色功能。Vim 在 Linux VT 上仅使用 8
种颜色加上明亮的前景。

3
Vim 将其内置术语中的内容与从 terminfo 中读取的内容相结合,并有一个‘ttybuiltin’设置来控制该组合的工
使用其中之一,它不会尝试合并两者。
UI/显示: 视觉选择突出显示光标处的字符。视觉使用

上游功能 nvim 上游
这些 Nvim 功能后来被集成到 Vim 中。

其他变化 nvim 已更改


本节记录了各种低级行为更改。
mkdir()行为已更改: 1. 假设 /tmp/foo 不存在并且 /tmp 可以写入 mkdir(‘/tmp/foo/bar’,
‘p’, 0700) 将创建 /tmp/foo 和 /tmp /foo/bar 具有 0700 权限。'p'Vim
mkdir 将使用 0755 创建 /tmp/foo。 2. 如果您尝试使用(例如 mkdir(‘/’,
‘p’))创建现有目录, mkdir() 将默默退出。在 Vim 中这是一个错误。3. 当
mkdir 失败时,mkdir() 错误消息现在包括 strerror() 文本。
它不使用“[⋯]”(以前:“[[], [⋯]]”,现在:“[[], []]”)。“⋯”仅用于递归容器。4.
:echo打印嵌套容器在“⋯”后面添加“@level”,指定打印递归容器的级别::echo‑
self‑refer。同样的情况也适用于string()(尽管它使用像“{E724@level}”这样的构造),但这并不可靠,因为
字符串化的无限和 NaN 值现在使用str2float()并且可以进行评估。6.(内部)尝试在
Vim 中打印或字符串化 VAR_UNKNOWN 没有任何结果,E908,在 Nvim
中这是内部错误。
Viminfo 文本文件已替换为二进制(消息包)shada文件。其他差异:
一些错误使 ShaDa 代码将临时文件保留在适当的位置,以便用户决定如何处理它。在这些情况下,Vim
会删除临时文件。 Shada 错误处理
printf()与参数一起使用时返回一些有意义的内容%p:在 Vim 中,它用于返回字符串的无用地址(字符串被复制
printf("%p", {expr})在内部使用。
:lua print("a\0b")将打印a^@b,就像 with 一样:echomsg "a\nb"。在 Vim
中,将a和打印b在单独的行上,就像 :lua print("a\nb").
:lua error('TEST')发出错误:
<span><span>E5108: �� lua ���: [string "&lt;Vimscript ������&gt;"]:1: TEST</span></span>
而 Vim 只发出“TEST”。
Lua 可以通过直接访问 Nvim APIvim.api。
宏/|录制| 行为 :lmap 期间录制的宏的重放会产生与录制时相同的操作。在 Vim
中,如果在使用 :lmap’ped 键时录制宏,则录制和重放期间的行为会有所不同。
映射:
为可简化键(例如 )创建映射<C-I>不会替换其简化形式的现有映射(例如<Tab>)。

4
“#”后跟数字并不代表映射左侧开头的功能键。
动作:跳转列表避免无用/幻象跳转。
性能:在插入模式期间不会更新折叠。
语法突出显示:syncolor.vim 已被删除。Nvim 现在会自动为浅色和深色背景设置默认突出显示组,无论是否启
on和 :syntax‑enable现在是相同的。以前使用过 after/syntax/syncolor.vim
文件的用户应该将该文件转换为颜色方案。:配色方案
工作目录(Vim 在 Nvim 之后实现了其中一些):
haslocaldir()当且仅当 ‑1 作为窗口号传递时才检查选项卡本地目录,并且其唯一可能的返回值是
0 和 1。
getcwd(-1)相当于而getcwd(-1, 0)不是返回全局工作目录。用于getcwd(-1,
-1)获取全局工作目录。

缺少功能 nvim 缺失
这些遗留的 Vim 功能尚未实现:

删除了遗留功能 nvim 已删除


这些 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](https://neovim.io/doc/user/vim_diff.html#hardcopy)
:hardcopy已删除。相反,请:TOhtml使用 Web 浏览器或其他 HTML 查看器来使用和打印生成的
HTML。:helpfind :mode (不再接受参数) :open :Print :promptfind
:promptrepl :scriptversion (始终为版本 1) :shell :sleep!(不隐藏光标;与
:sleep 相同) :smile :tearoff :cstag :cscope :lcscope :scscope :Vimuntar
Eval:Vim9script [cscope_connection()](https://neovim.io/doc/user/vim_diff.html#cscope_connect
[err_teapot()](https://neovim.io/doc/user/vim_diff.html#err_teapot())
[js_encode()](https://neovim.io/doc/user/vim_diff.html#js_encode())
[js_decode()](https://neovim.io/doc/user/vim_diff.html#js_decode())
[v:none](https://neovim.io/doc/user/vim_diff.html#v%3Anone)(Vim
使用它来表示 JavaScript“未定义”);使用v:null代替。 [v:sizeofint](https://neovim.io/doc/user/vi
[v:sizeoflong](https://neovim.io/doc/user/vim_diff.html#v%3Asizeoflong)
[v:sizeofpointer](https://neovim.io/doc/user/vim_diff.html#v%3Asizeofpointer)
高亮组: [hl-StatusLineTerm](https://neovim.io/doc/user/vim_diff.html#hl-StatusLineTerm)
[hl-StatusLineTermNC](https://neovim.io/doc/user/vim_diff.html#hl-StatusLineTermNC)是不必要的
Nvim 支持“winhighlight”窗口本地高亮。例如,模仿 Vim 的 StatusLineTerm:
hi StatusLineTerm ctermfg=black ctermbg=green hi StatusLineTermNC ctermfg=green autocmd Term

5
选项: ['aleph'](https://neovim.io/doc/user/vim_diff.html#'aleph')
['al'](https://neovim.io/doc/user/vim_diff.html#'al') 抗锯齿
“退格”不再支持数字值。反而:
用于backspace=0设置backspace=(空)
对于backspace=1套装backspace=indent,eol
for backspace=2set backspace=indent,eol,start(Nvim 中的默认行为)
for backspace=3set backspace=indent,eol,nostop ['balloondelay'](https://neovim.io/doc/user/vim_
['bdlay'](https://neovim.io/doc/user/vim_diff.html#'bdlay')
['ballooneval'](https://neovim.io/doc/user/vim_diff.html#'ballooneval')
['beval'](https://neovim.io/doc/user/vim_diff.html#'beval')
['noballooneval'](https://neovim.io/doc/user/vim_diff.html#'noballooneval')
['nobeval'](https://neovim.io/doc/user/vim_diff.html#'nobeval')
['balloonexpr'](https://neovim.io/doc/user/vim_diff.html#'balloonexpr')
['bexpr'](https://neovim.io/doc/user/vim_diff.html#'bexpr')
bioskey (MS‑DOS) conskey (MS‑DOS) ['cp'](https://neovim.io/doc/user/vim_diff.html#'cp')
['nocompatible'](https://neovim.io/doc/user/vim_diff.html#'nocompatible')
['nocp'](https://neovim.io/doc/user/vim_diff.html#'nocp') ['compatible'](https://neovim.io/do
总是“不兼容”。) ‘cpoptions’ (gjpkHw<*‑ 并且所有 POSIX 标志都被删除)
['cryptmethod'](https://neovim.io/doc/user/vim_diff.html#'cryptmethod')
['cm'](https://neovim.io/doc/user/vim_diff.html#'cm') ['key'](https://neovim.io/doc/user/vim_
加密实现) cscopepathcomp cscopeprg cscopequickfix cscoperelative
cscopetag cscopetagorder cscopeverbose ['ed'](https://neovim.io/doc/user/vim_diff.html#'ed')
['edcompatible'](https://neovim.io/doc/user/vim_diff.html#'edcompatible')
['noed'](https://neovim.io/doc/user/vim_diff.html#'noed') ['noedcompatible'](https://neovim.i
‘encoding’(始终使用“utf‑8”)esckeys’guioptions ’ “t”标志已删除
['guifontset'](https://neovim.io/doc/user/vim_diff.html#'guifontset')
['gfs'](https://neovim.io/doc/user/vim_diff.html#'gfs')(使用‘guifont’代替。)
['guipty'](https://neovim.io/doc/user/vim_diff.html#'guipty')(Nvim
在所有平台上一致使用管道和 PTY。) ‘highlight’(内置名称无法更改
突出显示组['hkmap'](https://neovim.io/doc/user/vim_diff.html#'hkmap')
['hk'](https://neovim.io/doc/user/vim_diff.html#'hk')。)请改用set
keymap=hebrew。 代替['hkmapp'](https://neovim.io/doc/user/vim_diff.html#'hkmapp')
['hkp'](https://neovim.io/doc/user/vim_diff.html#'hkp')使用。set
keymap=hebrewp关键协议
['pastetoggle'](https://neovim.io/doc/user/vim_diff.html#'pastetoggle')
['pt'](https://neovim.io/doc/user/vim_diff.html#'pt')Just Paste
It.™当您使用终端或 GUI 的粘贴功能(、CMD‑v (macOS)、中键单击等)粘贴文本时,系统会自动处理粘贴。C
['imactivatefunc'](https://neovim.io/doc/user/vim_diff.html#'imactivatefunc')
['imaf'](https://neovim.io/doc/user/vim_diff.html#'imaf') ['imactivatekey'](https://neovim.io
['imak'](https://neovim.io/doc/user/vim_diff.html#'imak') ['imstatusfunc'](https://neovim.io/
['imsf'](https://neovim.io/doc/user/vim_diff.html#'imsf') ['insertmode'](https://neovim.io/do
['im'](https://neovim.io/doc/user/vim_diff.html#'im')使用以下脚本来模拟‘insertmode’:

6
autocmd BufWinEnter * startinsert inoremap <Esc> <C-X><C-Z><C-]> inoremap <C-C> <C-X><C-Z> i
['macatsui'](https://neovim.io/doc/user/vim_diff.html#'macatsui')
['maxcombine'](https://neovim.io/doc/user/vim_diff.html#'maxcombine')
['mco'](https://neovim.io/doc/user/vim_diff.html#'mco') Nvim
以字节为单位计算最大字符大小,而不是代码点。这保证足够大,以始终适合在
vim 中正确显示的所有字符,并将‘maxcombine’设置为 6。
您仍然可以编辑比屏幕缓冲区容纳的字符更大的文本,只是看不到它们。使用g8或ga。请参阅兆字节组合。
注意:rexexp 引擎仍然存在仅考虑 6 个组合字符的硬编码限制。
['maxmem'](https://neovim.io/doc/user/vim_diff.html#'maxmem')Nvim
将内存管理委托给操作系统。 ['maxmemtot'](https://neovim.io/doc/user/vim_diff.html#'maxmemtot')
将内存管理委托给操作系统。printoptions “exrc”['printdevice'](https://neovim.io/doc/user/vim_d
['printencoding'](https://neovim.io/doc/user/vim_diff.html#'printencoding')
['printexpr'](https://neovim.io/doc/user/vim_diff.html#'printexpr')
['printfont'](https://neovim.io/doc/user/vim_diff.html#'printfont')
['printmbcharset'](https://neovim.io/doc/user/vim_diff.html#'printmbcharset')
['prompt'](https://neovim.io/doc/user/vim_diff.html#'prompt')
['noprompt'](https://neovim.io/doc/user/vim_diff.html#'noprompt')
['remap'](https://neovim.io/doc/user/vim_diff.html#'remap')
['noremap'](https://neovim.io/doc/user/vim_diff.html#'noremap')
['restorescreen'](https://neovim.io/doc/user/vim_diff.html#'restorescreen')
['rs'](https://neovim.io/doc/user/vim_diff.html#'rs') ['norestorescreen'](https://neovim.io/d
['nors'](https://neovim.io/doc/user/vim_diff.html#'nors') ['secure'](https://neovim.io/doc/us
中允许所有内容,因为它们必须明确标记为可信。 ‘shortmess’标志:(表现得像始终打开一样)
(Vim 7.4.852 也为 Windows 删除了此功能) (将“s”添加到‘shortmess’中)
textauto textmode oddinvert['shelltype'](https://neovim.io/doc/user/vim_diff.html#'shelltype')
[shm-f](https://neovim.io/doc/user/vim_diff.html#shm-f) [shm-n](https://neovim.io/doc/user/vi
[shm-x](https://neovim.io/doc/user/vim_diff.html#shm-x) [shm-i](https://neovim.io/doc/user/vi
['sn'](https://neovim.io/doc/user/vim_diff.html#'sn') ['noshortname'](https://neovim.io/doc/u
['nosn'](https://neovim.io/doc/user/vim_diff.html#'nosn') ['swapsync'](https://neovim.io/doc/
['sws'](https://neovim.io/doc/user/vim_diff.html#'sws') ['termencoding'](https://neovim.io/do
['tenc'](https://neovim.io/doc/user/vim_diff.html#'tenc')``['terse'](https://neovim.io/doc/u
['noterse'](https://neovim.io/doc/user/vim_diff.html#'noterse')['toolbar'](https://neovim.io
['tb'](https://neovim.io/doc/user/vim_diff.html#'tb') ['toolbariconsize'](https://neovim.io/d
['tbis'](https://neovim.io/doc/user/vim_diff.html#'tbis') ['ttybuiltin'](https://neovim.io/do
['tbi'](https://neovim.io/doc/user/vim_diff.html#'tbi') ['nottybuiltin'](https://neovim.io/do
['notbi'](https://neovim.io/doc/user/vim_diff.html#'notbi')
['ttyfast'](https://neovim.io/doc/user/vim_diff.html#'ttyfast')
['tf'](https://neovim.io/doc/user/vim_diff.html#'tf') ['nottyfast'](https://neovim.io/doc/use
['notf'](https://neovim.io/doc/user/vim_diff.html#'notf') ['ttymouse'](https://neovim.io/doc/
['ttym'](https://neovim.io/doc/user/vim_diff.html#'ttym') ['ttyscroll'](https://neovim.io/doc
['tsl'](https://neovim.io/doc/user/vim_diff.html#'tsl') ['ttytype'](https://neovim.io/doc/use
['tty'](https://neovim.io/doc/user/vim_diff.html#'tty')
插件:

7
提供商:
[if_lua](https://neovim.io/doc/user/vim_diff.html#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_refcount() test_scrollbar() test_setmouse()
test_settime() test_srand_seed()
TUI: [t_xx](https://neovim.io/doc/user/vim_diff.html#t_xx)
[termcap-options](https://neovim.io/doc/user/vim_diff.html#termcap-options)
[t_AB](https://neovim.io/doc/user/vim_diff.html#t_AB) [t_Sb](https://neovim.io/doc/user/vim_d
[t_vb](https://neovim.io/doc/user/vim_diff.html#t_vb) [t_SI](https://neovim.io/doc/user/vim_d
Nvim 没有特殊t_XX选项或<t_XX>键码来配置终端功能。相反,Nvim 将终端视为任何其他
UI,例如“guicursor”设置终端光标样式(如果可能)。
[xterm-8bit](https://neovim.io/doc/user/vim_diff.html#xterm-8bit)
[xterm-8-bit](https://neovim.io/doc/user/vim_diff.html#xterm-8-bit)
Xterm 可以在使用真正的 8 位 CSI 的模式下运行。支持此功能需要自动检测终端是处于
UTF‑8 模式还是非 UTF‑8 模式,因为在每种情况下必须以不同的方式写入 8 位
CSI 字符。Vim 在启动时向终端发出“请求版本”序列,并查看终端如何发送
CSI。Nvim 不发出这样的序列,并且始终使用 7 位控制序列。

You might also like