显示的错误信息,如果在你没读到之前就已经消失了,你可以这样重新看到:
:echo errmsg
或者查看最近的消息列表:
:messages
见上 :messages 。
消 息 列 表
E222E228E232E293E298E304E317E318E356E438E439E440E316E320E322E323E341E473E570E685E292 Add to read buffer makemap: Illegal mode Cannot create BalloonEval with both message and callback block was not locked Didn't get block nr {N}? ml_upd_block0(): Didn't get block 0?? pointer block id wrong {N} Updated too many blocks? get_varp ERROR u_undo: line numbers wrong undo list corrupt undo line missing ml_get: cannot find line {N} in buffer {nr}{name} line number out of range: {N} past the end line count wrong in block {N} Internal error: lalloc(0, ) Internal error: {function} Internal error in regexp fatal error in cs_manage_matches Invalid count for del_bytes(): {N}
内部错误。如果你能够使之重现,请发送漏洞报告。 bugs ATTENTION Found a swap file by the name ...
见 ATTENTION 。
E92 Buffer {N} not found
你请求的缓冲区不存在。在你清除了一个缓冲区,而它包含一个位置标记或者有其它途径
还被引用的时候,也会出现这个错误。 :bwipeoutE95 Buffer with this name already exists
你不能有两个同名的缓冲区。
E72 Close error on swap file
用来保存编辑文本的备份的 swap-file 不能被正确关闭。大多数情况下这不会有什么
问题。
E169 Command too recursive
当 Ex 命令执行了一个 Ex 命令,后者又执行一个 Ex 命令,如此反复的时候,就可能发
生。最多能有 200 层或 'maxfuncdepth' 的值的较大者。如果超过,很有可能是无穷循
环。可能涉及的命令是 :execute 或 :source 。
E254 Cannot allocate color {name}
颜色名 {name} 未知。多数系统中可用的颜色列表可以参见 gui-colors 。
E1244 Bad color string: {str}
提供的色彩值不符合 #rrggbb 模式
E458 Cannot allocate colormap entry, some colors may be incorrect
这意味着 Vim 没有足够的颜色可以分配。虽然 Vim 还能运行,但是有的颜色可能不会以
指定的颜色出现。试试停止其它使用很多颜色的应用程序,或者在启动 gvim 之后启动它
们。已知很多浏览器会消耗很多颜色。要避免这个问题,你可以告诉 netscape 使用自己
的颜色映射表:
netscape -install
或者告诉它只使用有限种的颜色 (64 应该足够了):
netscape -ncols 64
这也可以通过 Xdefaults 文件设置:
Netscape*installColormap: Yes
或者
Netscape*maxImageColors: 64
<
E79 Cannot expand wildcards
文件名包含特殊的字符组合,Vim 因而试图进行通配符扩展但不成功。这 不 意味着没有
匹配的文件名,只是说该模式是非法的。
E459 Cannot go back to previous directory
在扩展文件名的时候,Vim 不能回到最近用过的目录名。所有正在使用的文件名现在都可
能成为非法!你需要得到当前目录的可执行 (遍历) 权限。
E190E212 Cannot open "{filename}" for writing Can't open file for writing
由于某种原因,你要写入的文件不能建立或者覆盖。这可能是因为你没有目录的写权限,
或者该文件名不合法。
E166 Can't open linked file for writing
你试图写入文件,但该文件无法被覆盖,且该文件是链接类型 (硬链接或者符号链接)。
其实,包含该链接或文件的目录可写的时候并非不可写入。只不过 Vim 不知道你是要删
除该链接并在同样的位置写入实际文件呢,还是要删除链接到的文件并用新文件覆盖之。
如果你确实需要用这个名字写入文件,请手动删除这个链接或者文件,或者改变权限,使
得 Vim 可以对它进行覆盖。
E46 Cannot change read-only variable "{name}"
你试图给一个函数参数 a:var 或者 Vim 的内部只读变量 v:var 赋值。
E90 Cannot unload last buffer
Vim 要求必须有一个载入的缓冲区,不然窗口中就没有东西可以显示了。
E40 Can't open errorfile <filename>
使用 ":make" 或者 ":grep" 命令时: 不能打开用于保存错误信息或者 grep 的输出结果
的文件。可能原因如下:
- 'shellredir' 的值不正确。
- 外壳改变了目录,使得错误文件写到别的目录里。这可以通过改变 'makeef' 修正,但
是 make 命令还是在错误的目录下执行。
- 'makeef' 的值不正确。
- 'grepprg' 或者 'makeprg' 不能执行。这一点不一定总能检测到 (尤其在 MS-Windows
上)。检查你的 $PATH。
Can't open file C:\TEMP\VIoD243.TMP
MS-Windows 上,期待读入外部命令输出的结果但是命令没有正确执行时会显示此信息。
这可能有多种原因。检查 'shell'、'shellquote'、'shellxquote'、'shellslash' 和相
关的选项。这个消息也有可能是由找不到外部命令引起的。但错误信息无法区别。
E12 Command not allowed from exrc/vimrc in current dir or tag search
因为安全原因,有的命令不允许被执行。这些命令通常来自当前目录的 .exrc 或者
.vimrc 文件或标签文件。另见 'secure'。
E74 Command too complex
某个映射产生了太长的命令行字符串。可能是因为一个映射间接的引用了自己。
CONVERSION ERROR
写入文件时,这个错误消息的出现意味着部分内容在从内部 UTF-8 格式转化到文件本身
格式的过程中丢失。文件因此不会被标为未修改。如果你关心丢失的信息,把
'fileencoding' 选项设为别的能够处理缓冲区的字符的值并重新写一次。如果你觉得无
所谓,直接放弃缓冲区或者复位 'modified' 选项。
E302 Could not rename swap file
如果文件名改变,Vim 试图对 swap-file 也进行换名。如果不成功,那么依然使用旧
的交换文件。一般情况下这没有什么问题。
E43E44 Damaged match string Corrupted regexp program
Vim 的内部问题并因而产生了一个不合法的正则表达式。如果你知道如何重现,请报告。
bugsE208E209E210 Error writing to "{filename}" Error closing "{filename}" Error reading "{filename}"
如果 Vim 试图给一个文件换名,但是简单的文件名更名不能工作时,会尝试进行文件复
制,这些错误消息出现在这一步也失败的时候。结果可能是,原始文件和目标文件都存
在,但是目标文件不完整。
Vim: Error reading input, exiting...
Vim 在需要输入却不能读入键入的字符时,就会报错。Vim 没法继续,除了退出以外别无
选择。这可能发生在标准输入和标准错误 (stderr) 都被重定向,而一个自身不会退出
Vim 的脚本被执行的情况。
E47 Error while reading errorfile
不能读入错误文件。此消息的发生 不 是因为错误信息不能识别。
E80 Error while writing
文件的写入不能成功完成,该文件可能不完整。
E13E189 File exists (add ! to override) "{filename}" exists (add ! to override)
系统为了保护你,不让你不小心覆盖已存在文件。如有必要,使用相同的命令但在其后加
"!"。例如:
:w /tmp/test
可以改成:
:w! /tmp/testE768 Swap file exists: {filename} (:silent! overrides)
系统能够保护你不去覆盖一个正在被 Vim 编辑的文件。在使用 ":w! filename" 并且发
现一个交换文件时会出现这种情况。
- 如果交换文件是由以前某个崩溃的编辑对话留下的,也许你希望删除这个交换文件。编
辑 {filename} 来找出关于该交换文件的信息。
- 如果你希望强行保存,那么在命令前加 ":silent!"。例如:
:silent! w! /tmp/test
之所以需要这个特殊命令,是因为你已经用 ! 来覆盖已经存在的文件了。
E139 File is loaded in another buffer
你试图写入文件,但是别的缓冲区正在使用你写入的名字。不这么做会导致相同文件的两
个版本。
E142 File not written: Writing is disabled by 'write' option 'write' 选项被关闭。这使得所有试图写入文件的命令都会产生这个消息。这可能由
-m 命令行参数引起。你可以用 ":set write" 打开 'write' 选项。
E25 GUI cannot be used: Not enabled at compile time
你运行的 Vim 版本不支持 GUI 代码。所以 "gvim" 和 ":gui" 都不工作。
E49 Invalid scroll size
这是由 'scroll'、'scrolljump' 或者 'scrolloff' 选项的值不正确引起的。
E17 "{filename}" is a directory
你试图写入一个和目录名字相同的文件。这是不可以的。你可能想要附加一个文件名。
E19 Mark has invalid line number
你使用一个位置标记,但它所指的行号不存在。这可能是因为你使用了指向别的文件的位
置标记,而别的程序删除了其中的一些行引起的。
E219E220 Missing {. Missing }.
在文件名中使用了 {} 构造,但只有 { 而没有匹配的 } 或者相反。该构造的使用方法
是: 用 {foo,bar} 匹配 "foo" 和 "bar"。
E315 ml_get: invalid lnum: {number}
内部错误。如果你知道如何重现该问题,请提交漏洞报告。 bugreport.vim 。
E173{number} more files to edit
你试图退出,但是参数列表里的末项还没有被编辑到。这保护你在还有文件要编辑的时候
意外的退出。见 argument-list 。如果你坚持想退出,再试一次就行了。
E23E194 No alternate file No alternate file name to substitute for '#'
轮换文件还没有定义。见 alternate-file 。
E32 No file name
当前的缓冲区还没有名字。要写入,可用 ":w fname"。或者用 ":file fname" 先给出缓
冲区的名字。
E141 No file name for buffer {number}
一个被改变的缓冲区没有文件名。所以不能被写入。你需要先给缓冲区一个文件名:
:buffer {number} :file {filename}E33 No previous substitute regular expression
在 ":substitute" 命令里,模式里使用的 '~' 字符会被替换成上次用到的模式。如果这
个命令还没用过,就会失败。见 /~ 。如果使用 ":s/pat/%/",也会发生类似问题,其
中的 "%" 表示上次的替代字符串。
E35 No previous regular expression
使用空搜索模式会引用上次用到的模式。如果没有上一次搜索,那么就会失败。
E24 No such abbreviation
你使用了 ":unabbreviate" 命令,但是所带的参数不是一个已有的缩写。这个命令的各
种变形 ":cunabbrev"、":iunabbrev" 等都会给出相同的消息。检查一下尾部的空白。
/dev/dsp: No such file or directory
只有在带 Gnome 支持的 GTK GUI 才会给出。Gnome 试图使用音频设备但是它不存在。你
可以忽略这个错误。
E31 No such mapping
你使用了 ":unmap" 命令,但是所带的参数不是已有的映射。这个命令的各种变形
":cunmap"、":unmap!" 等都会给出相同的消息。一些提示:
- 检查一下尾部的空白。
- 如果是局部于缓冲区的映射,需要使用 ":unmap <buffer>"。
:map-<buffer>E37E89 No write since last change (add ! to override) No write since last change for buffer {N} (add ! to override)
你试图放弃 abandon 一个有过改动的文件。Vim 不让你这么做,以免丢失你的工作。
你可以把改动的部分用 ":w" 写回,如果你坚持要放弃而不介意并丢失所有的改变,可以
在使用的命令之后加上 '!' 字符。例如:
:e other_file
可以改为:
:e! other_fileE162 No write since last change for buffer "{name}"
如果你退出 Vim 时有的缓冲区已经被改变了就会发生这个错误。你或者可以写入改动过
的缓冲区 (用 :w ),或者可以用一个强迫放弃缓冲区的命令,比如,":qa!"。要小心,
不要丢掉你想保留的改变。有些缓冲区可能已经被忘记了,尤其是置位了 'hidden' 的时
候。
[No write since last change]
如果你执行 Shell 命令时至少一个缓冲区被改变了,就会发生这个错误。要不想显示这
个信息,可以复位 'warn' 选项。
E38 Null argument
Vim 内部出错,产生一个 NULL 指针。如果你知道如何重现,请报告。 bugsE41E82E83E342 Out of memory! Out of memory! (allocating {number} bytes) Cannot allocate any buffer, exiting... Cannot allocate buffer, using other one...
噢,噢。你可能作了一些特别复杂的操作,或者有其它程序正在占用你的内存。小心!
Vim 没有完全准备好内存溢出的情况。首先确保所有的改变被保存。然后试图解决内存的
短缺问题。要确保安全无虞,先退出 Vim,再重新开始。
如果这发生在 Vim 还在初始化时,文件编辑很可能不行,所以 Vim 会以值 123 退出。
缓冲区只是部分保存在内存里,所以编辑一个很大的文件不太可能导致内存溢出错误。撤
销信息则是完全保存在内存里,可以用以下选项减少内存的占用:
- 'undolevels' 设为较小的值,或 -1 以完全关闭之。对影响所有行的改变这会很有帮
助。
- 'undoreload' 设为零以关闭之。
E339 Pattern too long
这发生在 16 位整数的系统上: 编译的正则表达式模式超过了 65000 个字节。试试短一
些的模式。
这也可能发生在某个规则的偏移量超出了可用的空间。试试对模式进行简化。
E45'readonly' option is set (add ! to override)
你试图写入一个标为只读的文件。如果要坚持这么做,或者复位 'readonly' 选项,或者
在你用的命令后面增加 '!' 字符。例如:
:w
可以改为:
:w!E294E295E301 Read error in swap file Seek error in swap file read Oops, lost the swap file!!!
Vim 试图从 swap-file 里读取文本时出了问题。相关缓冲区的文本现在可能已经没法
用了!在写入缓冲区之前仔细检查。你可以先写到别的文件上,然后比较两者的差异。
E192 Recursive use of :normal too deep
你在使用 ":normal" 命令,而它的参数又递归使用 ":normal" 命令。'maxmapdepth' 限
制最高的递归层数。下例显示如何得到这个消息:
:map gq :normal gq<CR>
如果你输入 "gq",就会执行这个映射,它又会再次调用 "gq"。
E22 Scripts nested too deep
脚本可以通过 "-s" 命令行参数或者 ":source!" 命令读取。脚本又可以读取别的脚本。
这可以继续大概 14 层。如果需要更多的嵌套,Vim 假设其中出现了递归的循环,所以用
此错误信息停止。
E319 Sorry, the command is not available in this version
你使用了目前使用的 Vim 版本不存在的命令。在编译 Vim 的时候,许多不同的特性可以
打开或者关闭。这取决于编译时选择要多大的 Vim,还有具体操作系统。能用的特性可见
+feature-list 。 :version 命令显示 Vim 编译时所带的特性。
E300 Swap file already exists (symlink attack?)
当 Vim 试图打开交换文件并发现它已经存在,而且是一个符号链接时,显示该错误。这
不应该发生,因为 Vim 已经检查过该文件不存在。除非别人同时打开了相同的文件 (非
常不太可能) 或者有人试图一个符号链接攻击 (如果编辑 /tmp 下的文件或者
'directory' 以 "/tmp" 开始时可能发生。这是一个坏的选择)。
E432 Tags file not sorted: {file name}
Vim (和 Vi) 期待标签文件以 ASCII 顺序排序。然后可以使用二分法搜索,这比线性查
找快很多。如果你的标签文件没有适当的排序,复位 'tagbsearch' 选项。
这个消息只有在 Vim 在搜索标签时发生问题的时候才会给出。有的时候即使标签文件没
有适当排序,这个消息也不会给出。
E424 Too many different highlighting attributes in use
Vim 只能处理 223 种不同的高亮。如果遇到了这个限制,你一定用了太多的带不同参数
的 :highlight 命令。":highlight link" 不计算在内。
E77 Too many file names
在扩展文件名的时候,找到了多于一个的匹配。而使用的命令只支持单一匹配的参数。
E303 Unable to open swap file for "{filename}", recovery impossible
Vim 不能建立交换文件。你可以继续编辑该文件,但如果 Vim 不正常地退出,你所有的
改变就丢失了。同时,Vim 可能在编辑大文件时消耗大量的内存。要避免这个错误,你可
能想改变 'directory' 选项。当 'directory' 为空时不给出此错误。见 swap-file 。
E140 Use ! to write partial buffer
将区域对应缓冲区的部分内容写到一个已有的文件是不常见的。这可能是个错误 (比如,
如果在可视模式下使用 ":w" 的时候),所以 Vim 需要在命令后使用 !,比如:
":3,10w!"。
Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type VirtualBinding
启动时的时候可能出现这样的错误。这不是 Vim 的问题,而是你的 X11 配置有问题。你
可以在这里看到如何解决这个问题的提示:
http://groups.yahoo.com/group/solarisonintel/message/12179。
[此 URL 已不可用]
W10 Warning: Changing a readonly file
文件是只读的,而你坚持要修改它。你可以用 FileChangedRO 自动命令事件来避免这
个消息 (该自动命令必须复位 'readonly' 选项)。'modifiable' 可以完全禁止修改文
件。
只有 'readonly' 置位后第一次作改变时,才显示这条消息。
W13 Warning: File "{filename}" has been created after editing started
你在 Vim 里开始编辑文件时它并不存在,但是现在存在了。你可以决定保留 Vim 的版本
还是新建的文件。这个消息在 'buftype' 非空的时候不会给出。
W11 Warning: File "{filename}" has changed since editing started
你已经开始编辑的文件现在有了别的时间戳 (修改时间),而且内容也发生了改变 (更精
确地说,使用当前选项设置和自动命令重新读入文件会给你不同的文本)。这可能是因为
别的程序修改了文件。你需要自己研究发生了什么事,并决定保留哪个版本的内容。如果
你想自动处理,参见 'autoread' 选项。如果 'buftype' 不为空,该消息不会给出。
另见 FileChangedShell 自动命令。
有一种情况即使没发生任何错误也会得到这个消息: 在 Windows 上,你在夏令时开始的
那天保存一个文件。有几种方法可以修正之:
- 在你的 autoexec.bat 增加这行:
SET TZ=-1
根据你的时区调整 "-1" 为其它值。
- 关闭 "根据夏令时时间自动调整时钟"。
- 第二天再次写入文件。或者把时钟设为第二天,写入文件两次,再把时钟调回来。
如果你不停收到 W11,可能需要关闭 "Acronis Active Protection" 或把 Vim 登记为受
信任的服务/应用。
W12 Warning: File "{filename}" has changed and the buffer was changed in Vim as well
和上面类似,而这个 Vim 里这个文件的缓冲区也改变了。你必须决定要保留这个 Vim 的
版本还是磁盘上的。这个消息在 'buftype' 非空时不会给出。
W16 Warning: Mode of file "{filename}" has changed since editing started
缓冲区的时间戳发生了改变时,内容保持不变但是模式 (许可权限) 发生了改变。这通常
是从版本控制系统里取出文件而复位了只读位引起的。重读文件应该是安全的选择。置位
'autoread' 可以自动重读文件。
E211 File "{filename}" no longer available
你已经开始编辑的文件现在不再存在或不能访问。确定你把缓冲区写到某处,以免丢失改
动。如果 'buftype' 非空,该消息不会给出。
W14 Warning: List of file names overflow
你一定用了太多的缓冲区了。可能两个缓冲区使用相同的号码,这会引起问题。你可能要
退出 Vim 并重启。
E931 Buffer cannot be registered
内存溢出,或者重复的缓冲区号。可能在 W14 之后出现。查找缓冲区不总是有效,最好
重启 Vim。
E296E297 Seek error in swap file write Write error in swap file
这通常是因为磁盘空间满引起的。Vim 不能把文本写入 swap-file 。它本身并无害,
但如果 Vim 意外退出,有些文本可能丢失,而无法恢复。如果这个问题持续存在,Vim
可能会内存溢出。
connection-refused Xlib: connection to "<machine-name:0.0" refused by server
当 Vim 试图连接到 X 服务器,但是 X 服务器不允许连接的时候,就会发生这个错误。
只有建立 X 服务器的连接才能恢复标题和得到 xterm 的剪贴板的支持。不幸的是,这
个错误信息无法避免,除非关闭 +xterm_clipboard 和 +X11 特性。
E10 \\ should be followed by /, ? or &
命令行以反斜杠开始,或者命令的范围包含了在错误位置出现的反斜杠。通常,这是因为
命令行的续行功能被关闭了。从 'cpoptions' 选项里去掉 'C' 标志位就可以打开这一功
能。使用 ":set nocp" 也可。
E471 Argument required
这是由 Ex 命令执行时需要的参数没有提供引起的。
E474E475E983 Invalid argument Invalid argument: {arg} Duplicate argument: {arg}
执行 Ex 命令或函数时使用了非法的参数。
E488 Trailing characters Trailing characters: {text}
在不允许有参数的 Ex 命令后带了参数。或者参数有非法字符而不能识别。
E477E478 No ! allowed Don't panic!
给不支持带 ! 后缀的 Ex 命令加了 "!" 命令。
E481 No range allowed
在不支持范围参数的 Ex 命令前加了范围。见 cmdline-ranges 。
E482E483 Can't create file {filename} Can't get temp file name
Vim 不能建立临时文件。
E484E485 Can't open file {filename} Can't read file {filename}
Vim 不能读临时文件。特别是在 Windows 上,这可能由错误转义 cmd.exe 的中特殊字符
引起。 7.3.443 补丁对转义的方法有所改变。对 system() 的所有外壳参数应有
shellescape() 进行转义,或直接用 ^ 转义。另见 'shellxquote' 和
'shellxescape'。
E464 Ambiguous use of user-defined command
有两个用户定义的命令,它们有相同的前缀,而你用命令行补全来执行其中的一个。
user-cmd-ambiguous
示例:
:command MyCommand1 echo "one" :command MyCommand2 echo "two" :MyCommandE492 Not an editor command
你试图执行一个既不是 Ex 命令也不是用户定义的命令。
E943 Command table needs to be updated, run 'make cmdidxs'
只可能在修改了源代码,在 src/ex_cmds.h 中增加了新命令时发生。此时需要更新查找
表,运行:
make cmdidxsE928E889 E928: String required E889: Number required
使用的值或表达式与预期的类型不符。