Mercurial > vim
view runtime/doc/message.txt @ 32936:c517845bd10e v9.0.1776
patch 9.0.1776: No support for stable Python 3 ABI
Commit: https://github.com/vim/vim/commit/c13b3d1350b60b94fe87f0761ea31c0e7fb6ebf3
Author: Yee Cheng Chin <ychin.git@gmail.com>
Date: Sun Aug 20 21:18:38 2023 +0200
patch 9.0.1776: No support for stable Python 3 ABI
Problem: No support for stable Python 3 ABI
Solution: Support Python 3 stable ABI
Commits:
1) Support Python 3 stable ABI to allow mixed version interoperatbility
Vim currently supports embedding Python for use with plugins, and the
"dynamic" linking option allows the user to specify a locally installed
version of Python by setting `pythonthreedll`. However, one caveat is
that the Python 3 libs are not binary compatible across minor versions,
and mixing versions can potentially be dangerous (e.g. let's say Vim was
linked against the Python 3.10 SDK, but the user sets `pythonthreedll`
to a 3.11 lib). Usually, nothing bad happens, but in theory this could
lead to crashes, memory corruption, and other unpredictable behaviors.
It's also difficult for the user to tell something is wrong because Vim
has no way of reporting what Python 3 version Vim was linked with.
For Vim installed via a package manager, this usually isn't an issue
because all the dependencies would already be figured out. For prebuilt
Vim binaries like MacVim (my motivation for working on this), AppImage,
and Win32 installer this could potentially be an issue as usually a
single binary is distributed. This is more tricky when a new Python
version is released, as there's a chicken-and-egg issue with deciding
what Python version to build against and hard to keep in sync when a new
Python version just drops and we have a mix of users of different Python
versions, and a user just blindly upgrading to a new Python could lead to
bad interactions with Vim.
Python 3 does have a solution for this problem: stable ABI / limited API
(see https://docs.python.org/3/c-api/stable.html). The C SDK limits the
API to a set of functions that are promised to be stable across
versions. This pull request adds an ifdef config that allows us to turn
it on when building Vim. Vim binaries built with this option should be
safe to freely link with any Python 3 libraies without having the
constraint of having to use the same minor version.
Note: Python 2 has no such concept and this doesn't change how Python 2
integration works (not that there is going to be a new version of Python
2 that would cause compatibility issues in the future anyway).
---
Technical details:
======
The stable ABI can be accessed when we compile with the Python 3 limited
API (by defining `Py_LIMITED_API`). The Python 3 code (in `if_python3.c`
and `if_py_both.h`) would now handle this and switch to limited API
mode. Without it set, Vim will still use the full API as before so this
is an opt-in change.
The main difference is that `PyType_Object` is now an opaque struct that
we can't directly create "static types" out of, and we have to create
type objects as "heap types" instead. This is because the struct is not
stable and changes from version to version (e.g. 3.8 added a
`tp_vectorcall` field to it). I had to change all the types to be
allocated on the heap instead with just a pointer to them.
Other functions are also simply missing in limited API, or they are
introduced too late (e.g. `PyUnicode_AsUTF8AndSize` in 3.10) to it that
we need some other ways to do the same thing, so I had to abstract a few
things into macros, and sometimes re-implement functions like
`PyObject_NEW`.
One caveat is that in limited API, `OutputType` (used for replacing
`sys.stdout`) no longer inherits from `PyStdPrinter_Type` which I don't
think has any real issue other than minor differences in how they
convert to a string and missing a couple functions like `mode()` and
`fileno()`.
Also fixed an existing bug where `tp_basicsize` was set incorrectly for
`BufferObject`, `TabListObject, `WinListObject`.
Technically, there could be a small performance drop, there is a little
more indirection with accessing type objects, and some APIs like
`PyUnicode_AsUTF8AndSize` are missing, but in practice I didn't see any
difference, and any well-written Python plugin should try to avoid
excessing callbacks to the `vim` module in Python anyway.
I only tested limited API mode down to Python 3.7, which seemes to
compile and work fine. I haven't tried earlier Python versions.
2) Fix PyIter_Check on older Python vers / type##Ptr unused warning
For PyIter_Check, older versions exposed them as either macros (used in
full API), or a function (for use in limited API). A previous change
exposed PyIter_Check to the dynamic build because Python just moved it
to function-only in 3.10 anyway. Because of that, just make sure we
always grab the function in dynamic builds in earlier versions since
that's what Python eventually did anyway.
3) Move Py_LIMITED_API define to configure script
Can now use --with-python-stable-abi flag to customize what stable ABI
version to target. Can also use an env var to do so as well.
4) Show +python/dyn-stable in :version, and allow has() feature query
Not sure if the "/dyn-stable" suffix would break things, or whether we
should do it another way. Or just don't show it in version and rely on
has() feature checking.
5) Documentation first draft. Still need to implement v:python3_version
6) Fix PyIter_Check build breaks when compiling against Python 3.8
7) Add CI coverage stable ABI on Linux/Windows / make configurable on Windows
This adds configurable options for Windows make files (both MinGW and
MSVC). CI will also now exercise both traditional full API and stable
ABI for Linux and Windows in the matrix for coverage.
Also added a "dynamic" option to Linux matrix as a drive-by change to
make other scripting languages like Ruby / Perl testable under both
static and dynamic builds.
8) Fix inaccuracy in Windows docs
Python's own docs are confusing but you don't actually want to use
`python3.dll` for the dynamic linkage.
9) Add generated autoconf file
10) Add v:python3_version support
This variable indicates the version of Python3 that Vim was built
against (PY_VERSION_HEX), and will be useful to check whether the Python
library you are loading in dynamically actually fits it. When built with
stable ABI, it will be the limited ABI version instead
(`Py_LIMITED_API`), which indicates the minimum version of Python 3 the
user should have, rather than the exact match. When stable ABI is used,
we won't be exposing PY_VERSION_HEX in this var because it just doesn't
seem necessary to do so (the whole point of stable ABI is the promise
that it will work across versions), and I don't want to confuse the user
with too many variables.
Also, cleaned up some documentation, and added help tags.
11) Fix Python 3.7 compat issues
Fix a couple issues when using limited API < 3.8
- Crash on exit: In Python 3.7, if a heap-allocated type is destroyed
before all instances are, it would cause a crash later. This happens
when we destroyed `OptionsType` before calling `Py_Finalize` when
using the limited API. To make it worse, later versions changed the
semantics and now each instance has a strong reference to its own type
and the recommendation has changed to have each instance de-ref its
own type and have its type in GC traversal. To avoid dealing with
these cross-version variations, we just don't free the heap type. They
are static types in non-limited-API anyway and are designed to last
through the entirety of the app, and we also don't restart the Python
runtime and therefore do not need it to have absolutely 0 leaks.
See:
- https://docs.python.org/3/whatsnew/3.8.html#changes-in-the-c-api
- https://docs.python.org/3/whatsnew/3.9.html#changes-in-the-c-api
- PyIter_Check: This function is not provided in limited APIs older than
3.8. Previously I was trying to mock it out using manual
PyType_GetSlot() but it was brittle and also does not actually work
properly for static types (it will generate a Python error). Just
return false. It does mean using limited API < 3.8 is not recommended
as you lose the functionality to handle iterators, but from playing
with plugins I couldn't find it to be an issue.
- Fix loading of PyIter_Check so it will be done when limited API < 3.8.
Otherwise loading a 3.7 Python lib will fail even if limited API was
specified to use it.
12) Make sure to only load `PyUnicode_AsUTF8AndSize` in needed in limited API
We don't use this function unless limited API >= 3.10, but we were
loading it regardless. Usually it's ok in Unix-like systems where Python
just has a single lib that we load from, but in Windows where there is a
separate python3.dll this would not work as the symbol would not have
been exposed in this more limited DLL file. This makes it much clearer
under what condition is this function needed.
closes: #12032
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Yee Cheng Chin <ychin.git@gmail.com>
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Sun, 20 Aug 2023 21:30:04 +0200 |
parents | 695b50472e85 |
children | f2445075dbeb |
line wrap: on
line source
*message.txt* For Vim version 9.0. Last change: 2023 May 24 VIM REFERENCE MANUAL by Bram Moolenaar This file contains an alphabetical list of messages and error messages that Vim produces. You can use this if you don't understand what the message means. It is not complete though. 1. Old messages |:messages| 2. Error messages |error-messages| 3. Messages |messages| ============================================================================== 1. Old messages *:messages* *:mes* *message-history* The ":messages" command can be used to view previously given messages. This is especially useful when messages have been overwritten or truncated. This depends on the 'shortmess' option. :mes[sages] Show all messages. :{count}mes[sages] Show the {count} most recent messages. :mes[sages] clear Clear all messages. :{count}mes[sages] clear Clear messages, keeping only the {count} most recent ones. The number of remembered messages is fixed at 200. *g<* The "g<" command can be used to see the last page of previous command output. This is especially useful if you accidentally typed <Space> at the hit-enter prompt. You are then back at the hit-enter prompt and can then scroll further back. Note: If the output has been stopped with "q" at the more prompt, it will only be displayed up to this point. The previous command output is cleared when another command produces output. The "g<" output is not redirected. If you are using translated messages, the first printed line tells who maintains the messages or the translations. You can use this to contact the maintainer when you spot a mistake. If you want to find help on a specific (error) message, use the ID at the start of the message. For example, to get help on the message: E72: Close error on swap file ~ or (translated): E72: Errore durante chiusura swap file ~ Use: > :help E72 If you are lazy, it also works without the shift key: > :help e72 The number in this ID has no meaning. ============================================================================== 2. Error messages *error-messages* *errors* When an error message is displayed, but it is removed before you could read it, you can see it again with: > :echo errmsg Or view a list of recent messages with: > :messages See `:messages` above. LIST OF MESSAGES *E222* *E228* *E232* *E292* *E293* *E298* *E304* *E316* *E317* *E318* *E320* *E322* *E323* *E341* *E356* *E438* *E439* *E440* *E473* *E570* 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} ~ *E340* *E685* *internal-error* This is an internal error. If you can reproduce it, please send in a bug report, see |bugs|. ATTENTION ~ Found a swap file by the name ... ~ See |ATTENTION|. *E92* Buffer {N} not found ~ The buffer you requested does not exist. This can also happen when you have wiped out a buffer which contains a mark or is referenced in another way. |:bwipeout| *E95* Buffer with this name already exists ~ You cannot have two buffers with exactly the same name. This includes the path leading to the file. *E72* Close error on swap file ~ The |swap-file|, that is used to keep a copy of the edited text, could not be closed properly. Mostly harmless. *E169* Command too recursive ~ This happens when an Ex command executes an Ex command that executes an Ex command, etc. The limit is 200 or the value of 'maxfuncdepth', whatever is larger. When it's more there probably is an endless loop. Probably a |:execute| or |:source| command is involved. *E254* Cannot allocate color {name} ~ The color name {name} is unknown. See |gui-colors| for a list of colors that are available on most systems. *E1244* Bad color string: {str} ~ The provided color did not conform to the pattern #rrggbb *E458* Cannot allocate colormap entry, some colors may be incorrect ~ This means that there are not enough colors available for Vim. It will still run, but some of the colors will not appear in the specified color. Try stopping other applications that use many colors, or start them after starting gvim. Browsers are known to consume a lot of colors. You can avoid this with netscape by telling it to use its own colormap: netscape -install ~ Or tell it to limit to a certain number of colors (64 should work well): netscape -ncols 64 ~ This can also be done with a line in your Xdefaults file: Netscape*installColormap: Yes ~ or Netscape*maxImageColors: 64 ~ *E79* Cannot expand wildcards ~ A filename contains a strange combination of characters, which causes Vim to attempt expanding wildcards but this fails. This does NOT mean that no matching file names could be found, but that the pattern was illegal. *E459* Cannot go back to previous directory ~ While expanding a file name, Vim failed to go back to the previously used directory. All file names being used may be invalid now! You need to have execute permission on the current directory. *E190* *E212* Cannot open "{filename}" for writing ~ Can't open file for writing ~ For some reason the file you are writing to cannot be created or overwritten. The reason could be that you do not have permission to write in the directory or the file name is not valid. *E166* Can't open linked file for writing ~ You are trying to write to a file which can't be overwritten, and the file is a link (either a hard link or a symbolic link). Writing might still be possible if the directory that contains the link or the file is writable, but Vim now doesn't know if you want to delete the link and write the file in its place, or if you want to delete the file itself and write the new file in its place. If you really want to write the file under this name, you have to manually delete the link or the file, or change the permissions so that Vim can overwrite. *E46* Cannot change read-only variable "{name}" ~ You are trying to assign a value to an argument of a function |a:var| or a Vim internal variable |v:var| which is read-only. *E90* Cannot unload last buffer ~ Vim always requires one buffer to be loaded, otherwise there would be nothing to display in the window. *E40* Can't open errorfile <filename> ~ When using the ":make" or ":grep" commands: The file used to save the error messages or grep output cannot be opened. This can have several causes: - 'shellredir' has a wrong value. - The shell changes directory, causing the error file to be written in another directory. This could be fixed by changing 'makeef', but then the make command is still executed in the wrong directory. - 'makeef' has a wrong value. - The 'grepprg' or 'makeprg' could not be executed. This cannot always be detected (especially on MS-Windows). Check your $PATH. Can't open file C:\TEMP\VIoD243.TMP ~ On MS-Windows, this message appears when the output of an external command was to be read, but the command didn't run successfully. This can be caused by many things. Check the 'shell', 'shellquote', 'shellxquote', 'shellslash' and related options. It might also be that the external command was not found, there is no different error message for that. *E12* Command not allowed from exrc/vimrc in current dir or tag search ~ Some commands are not allowed for security reasons. These commands mostly come from a .exrc or .vimrc file in the current directory, or from a tags file. Also see 'secure'. *E74* Command too complex ~ A mapping resulted in a very long command string. Could be caused by a mapping that indirectly calls itself. CONVERSION ERROR ~ When writing a file and the text "CONVERSION ERROR" appears, this means that some bits were lost when converting text from the internally used UTF-8 to the format of the file. The file will not be marked unmodified. If you care about the loss of information, set the 'fileencoding' option to another value that can handle the characters in the buffer and write again. If you don't care, you can abandon the buffer or reset the 'modified' option. If there is a backup file, when 'writebackup' or 'backup' is set, it will not be deleted, so you can move it back into place if you want to discard the changes. *E302* Could not rename swap file ~ When the file name changes, Vim tries to rename the |swap-file| as well. This failed and the old swap file is now still used. Mostly harmless. *E43* *E44* Damaged match string ~ Corrupted regexp program ~ Something inside Vim went wrong and resulted in a corrupted regexp. If you know how to reproduce this problem, please report it. |bugs| *E208* *E209* *E210* Error writing to "{filename}" ~ Error closing "{filename}" ~ Error reading "{filename}" ~ This occurs when Vim is trying to rename a file, but a simple change of file name doesn't work. Then the file will be copied, but somehow this failed. The result may be that both the original file and the destination file exist and the destination file may be incomplete. Vim: Error reading input, exiting... ~ This occurs when Vim cannot read typed characters while input is required. Vim got stuck, the only thing it can do is exit. This can happen when both stdin and stderr are redirected and executing a script that doesn't exit Vim. *E47* Error while reading errorfile ~ Reading the error file was not possible. This is NOT caused by an error message that was not recognized. *E80* Error while writing ~ Writing a file was not completed successfully. The file is probably incomplete. *E13* *E189* File exists (add ! to override) ~ "{filename}" exists (add ! to override) ~ You are protected from accidentally overwriting a file. When you want to write anyway, use the same command, but add a "!" just after the command. Example: > :w /tmp/test changes to: > :w! /tmp/test < *E768* Swap file exists: {filename} (:silent! overrides) ~ You are protected from overwriting a file that is being edited by Vim. This happens when you use ":w! filename" and a swapfile is found. - If the swapfile was left over from an old crashed edit session you may want to delete the swapfile. Edit {filename} to find out information about the swapfile. - If you want to write anyway prepend ":silent!" to the command. For example: > :silent! w! /tmp/test < The special command is needed, since you already added the ! for overwriting an existing file. *E139* File is loaded in another buffer ~ You are trying to write a file under a name which is also used in another buffer. This would result in two versions of the same file. *E142* File not written: Writing is disabled by 'write' option ~ The 'write' option is off. This makes all commands that try to write a file generate this message. This could be caused by a |-m| commandline argument. You can switch the 'write' option on with ":set write". *E25* GUI cannot be used: Not enabled at compile time ~ You are running a version of Vim that doesn't include the GUI code. Therefore "gvim" and ":gui" don't work. *E49* Invalid scroll size ~ This is caused by setting an invalid value for the 'scroll', 'scrolljump' or 'scrolloff' options. *E17* "{filename}" is a directory ~ You tried to write a file with the name of a directory. This is not possible. You probably need to append a file name. *E19* Mark has invalid line number ~ You are using a mark that has a line number that doesn't exist. This can happen when you have a mark in another file, and some other program has deleted lines from it. *E219* *E220* Missing {. ~ Missing }. ~ Using a {} construct in a file name, but there is a { without a matching } or the other way around. It should be used like this: {foo,bar}. This matches "foo" and "bar". *E315* ml_get: invalid lnum: {number} ~ This is an internal Vim error. Please try to find out how it can be reproduced, and submit a bug report |bugreport.vim|. *E173* {number} more files to edit ~ You are trying to exit, while the last item in the argument list has not been edited. This protects you from accidentally exiting when you still have more files to work on. See |argument-list|. If you do want to exit, just do it again and it will work. *E23* *E194* No alternate file ~ No alternate file name to substitute for '#' ~ The alternate file is not defined yet. See |alternate-file|. *E32* No file name ~ The current buffer has no name. To write it, use ":w fname". Or give the buffer a name with ":file fname". *E141* No file name for buffer {number} ~ One of the buffers that was changed does not have a file name. Therefore it cannot be written. You need to give the buffer a file name: > :buffer {number} :file {filename} < *E33* No previous substitute regular expression ~ When using the '~' character in a pattern, it is replaced with the previously used pattern in a ":substitute" command. This fails when no such command has been used yet. See |/~|. This also happens when using ":s/pat/%/", where the "%" stands for the previous substitute string. *E35* No previous regular expression ~ When using an empty search pattern, the previous search pattern is used. But that is not possible if there was no previous search. *E24* No such abbreviation ~ You have used an ":unabbreviate" command with an argument which is not an existing abbreviation. All variations of this command give the same message: ":cunabbrev", ":iunabbrev", etc. Check for trailing white space. /dev/dsp: No such file or directory ~ Only given for GTK GUI with Gnome support. Gnome tries to use the audio device and it isn't present. You can ignore this error. *E31* No such mapping ~ You have used an ":unmap" command with an argument which is not an existing mapping. All variations of this command give the same message: ":cunmap", ":unmap!", etc. A few hints: - Check for trailing white space. - If the mapping is buffer-local you need to use ":unmap <buffer>". |:map-<buffer>| *E37* *E89* No write since last change (add ! to override) ~ No write since last change for buffer {N} (add ! to override) ~ You are trying to |abandon| a file that has changes. Vim protects you from losing your work. You can either write the changed file with ":w", or, if you are sure, |abandon| it anyway, and lose all the changes. This can be done by adding a '!' character just after the command you used. Example: > :e other_file changes to: > :e! other_file < *E162* No write since last change for buffer "{name}" ~ This appears when you try to exit Vim while some buffers are changed. You will either have to write the changed buffer (with |:w|), or use a command to abandon the buffer forcefully, e.g., with ":qa!". Careful, make sure you don't throw away changes you really want to keep. You might have forgotten about a buffer, especially when 'hidden' is set. [No write since last change] ~ This appears when executing a shell command while at least one buffer was changed. To avoid the message reset the 'warn' option. *E38* Null argument ~ Something inside Vim went wrong and resulted in a NULL pointer. If you know how to reproduce this problem, please report it. |bugs| *E41* *E82* *E83* *E342* Out of memory! ~ Out of memory! (allocating {number} bytes) ~ Cannot allocate any buffer, exiting... ~ Cannot allocate buffer, using other one... ~ Oh, oh. You must have been doing something complicated, or some other program is consuming your memory. Be careful! Vim is not completely prepared for an out-of-memory situation. First make sure that any changes are saved. Then try to solve the memory shortage. To stay on the safe side, exit Vim and start again. If this happens while Vim is still initializing, editing files is very unlikely to work, therefore Vim will exit with value 123. Buffers are only partly kept in memory, thus editing a very large file is unlikely to cause an out-of-memory situation. Undo information is completely in memory, you can reduce that with these options: - 'undolevels' Set to a low value, or to -1 to disable undo completely. This helps for a change that affects all lines. - 'undoreload' Set to zero to disable. *E339* Pattern too long ~ This happens on systems with 16 bit ints: The compiled regexp pattern is longer than about 65000 characters. Try using a shorter pattern. It also happens when the offset of a rule doesn't fit in the space available. Try simplifying the pattern. *E45* 'readonly' option is set (add ! to override) ~ You are trying to write a file that was marked as read-only. To write the file anyway, either reset the 'readonly' option, or add a '!' character just after the command you used. Example: > :w changes to: > :w! < *E294* *E295* *E301* Read error in swap file ~ Seek error in swap file read ~ Oops, lost the swap file!!! ~ Vim tried to read text from the |swap-file|, but something went wrong. The text in the related buffer may now be corrupted! Check carefully before you write a buffer. You may want to write it in another file and check for differences. *E192* Recursive use of :normal too deep ~ You are using a ":normal" command, whose argument again uses a ":normal" command in a recursive way. This is restricted to 'maxmapdepth' levels. This example illustrates how to get this message: > :map gq :normal gq<CR> If you type "gq", it will execute this mapping, which will call "gq" again. *E22* Scripts nested too deep ~ Scripts can be read with the "-s" command-line argument and with the `:source!` command. The script can then again read another script. This can continue for about 14 levels. When more nesting is done, Vim assumes that there is a recursive loop and stops with this error message. *E319* Sorry, the command is not available in this version ~ You have used a command that is not present in the version of Vim you are using. When compiling Vim, many different features can be enabled or disabled. This depends on how big Vim has chosen to be and the operating system. See |+feature-list| for when which feature is available. The |:version| command shows which feature Vim was compiled with. *E300* Swap file already exists (symlink attack?) ~ This message appears when Vim is trying to open a swap file and finds it already exists or finds a symbolic link in its place. This shouldn't happen, because Vim already checked that the file doesn't exist. Either someone else opened the same file at exactly the same moment (very unlikely) or someone is attempting a symlink attack (could happen when editing a file in /tmp or when 'directory' starts with "/tmp", which is a bad choice). *E432* Tags file not sorted: {file name} ~ Vim (and Vi) expect tags files to be sorted in ASCII order. Binary searching can then be used, which is a lot faster than a linear search. If your tags files are not properly sorted, reset the |'tagbsearch'| option. This message is only given when Vim detects a problem when searching for a tag. Sometimes this message is not given, even though the tags file is not properly sorted. *E424* Too many different highlighting attributes in use ~ Vim can only handle about 223 different kinds of highlighting. If you run into this limit, you have used too many |:highlight| commands with different arguments. A ":highlight link" is not counted. *E77* Too many file names ~ When expanding file names, more than one match was found. Only one match is allowed for the command that was used. *E303* Unable to open swap file for "{filename}", recovery impossible ~ Vim was not able to create a swap file. You can still edit the file, but if Vim unexpectedly exits the changes will be lost. And Vim may consume a lot of memory when editing a big file. You may want to change the 'directory' option to avoid this error. This error is not given when 'directory' is empty. See |swap-file|. *E140* Use ! to write partial buffer ~ When using a range to write part of a buffer, it is unusual to overwrite the original file. It is probably a mistake (e.g., when Visual mode was active when using ":w"), therefore Vim requires using a ! after the command, e.g.: ":3,10w!". Warning: Cannot convert string "<Key>Escape,_Key_Cancel" to type ~ VirtualBinding ~ Messages like this appear when starting up. This is not a Vim problem, your X11 configuration is wrong. You can find a hint on how to solve this here: http://groups.yahoo.com/group/solarisonintel/message/12179. [this URL is no longer valid] *W10* Warning: Changing a readonly file ~ The file is read-only and you are making a change to it anyway. You can use the |FileChangedRO| autocommand event to avoid this message (the autocommand must reset the 'readonly' option). See 'modifiable' to completely disallow making changes to a file. This message is only given for the first change after 'readonly' has been set. *W13* Warning: File "{filename}" has been created after editing started ~ You are editing a file in Vim when it didn't exist, but it does exist now. You will have to decide if you want to keep the version in Vim or the newly created file. This message is not given when 'buftype' is not empty. *W11* Warning: File "{filename}" has changed since editing started ~ The file which you have started editing has got another timestamp and the contents changed (more precisely: When reading the file again with the current option settings and autocommands you would end up with different text). This probably means that some other program changed the file. You will have to find out what happened, and decide which version of the file you want to keep. Set the 'autoread' option if you want to do this automatically. This message is not given when 'buftype' is not empty. Also see the |FileChangedShell| autocommand. There is one situation where you get this message even though there is nothing wrong: If you save a file in Windows on the day the daylight saving time starts. It can be fixed in one of these ways: - Add this line in your autoexec.bat: > SET TZ=-1 < Adjust the "-1" for your time zone. - Disable "automatically adjust clock for daylight saving changes". - Just write the file again the next day. Or set your clock to the next day, write the file twice and set the clock back. If you get W11 all the time, you may need to disable "Acronis Active Protection" or register Vim as a trusted service/application. *W12* Warning: File "{filename}" has changed and the buffer was changed in Vim as well ~ Like the above, and the buffer for the file was changed in this Vim as well. You will have to decide if you want to keep the version in this Vim or the one on disk. This message is not given when 'buftype' is not empty. *W16* Warning: Mode of file "{filename}" has changed since editing started ~ When the timestamp for a buffer was changed and the contents are still the same but the mode (permissions) have changed. This usually occurs when checking out a file from a version control system, which causes the read-only bit to be reset. It should be safe to reload the file. Set 'autoread' to automatically reload the file. *E211* File "{filename}" no longer available ~ The file which you have started editing has disappeared, or is no longer accessible. Make sure you write the buffer somewhere to avoid losing changes. This message is not given when 'buftype' is not empty. *W14* Warning: List of file names overflow ~ You must be using an awful lot of buffers. It's now possible that two buffers have the same number, which causes various problems. You might want to exit Vim and restart it. *E931* Buffer cannot be registered ~ Out of memory or a duplicate buffer number. May happen after W14. Looking up a buffer will not always work, better restart Vim. *E296* *E297* Seek error in swap file write ~ Write error in swap file ~ This mostly happens when the disk is full. Vim could not write text into the |swap-file|. It's not directly harmful, but when Vim unexpectedly exits some text may be lost without recovery being possible. Vim might run out of memory when this problem persists. *connection-refused* Xlib: connection to "<machine-name:0.0" refused by server ~ This happens when Vim tries to connect to the X server, but the X server does not allow a connection. The connection to the X server is needed to be able to restore the title and for the xterm clipboard support. Unfortunately this error message cannot be avoided, except by disabling the |+xterm_clipboard| and |+X11| features. *E10* \\ should be followed by /, ? or & ~ A command line started with a backslash or the range of a command contained a backslash in a wrong place. This is often caused by command-line continuation being disabled. Remove the 'C' flag from the 'cpoptions' option to enable it. Or use ":set nocp". *E471* Argument required ~ This happens when an Ex command with mandatory argument(s) was executed, but no argument has been specified. *E474* *E475* *E983* Invalid argument ~ Invalid argument: {arg} ~ Duplicate argument: {arg} ~ An Ex command or function has been executed, but an invalid argument has been specified. *E488* Trailing characters ~ Trailing characters: {text} ~ An argument has been added to an Ex command that does not permit one. Or the argument has invalid characters and has not been recognized. *E477* *E478* No ! allowed ~ Don't panic! ~ You have added a "!" after an Ex command that doesn't permit one. *E481* No range allowed ~ A range was specified for an Ex command that doesn't permit one. See |cmdline-ranges|. *E482* *E483* Can't create file {filename} ~ Can't get temp file name ~ Vim cannot create a temporary file. *E484* *E485* Can't open file {filename} ~ Can't read file {filename} ~ Vim cannot read a temporary file. Especially on Windows, this can be caused by wrong escaping of special characters for cmd.exe; the approach was changed with patch 7.3.443. Try using |shellescape()| for all shell arguments given to |system()|, or explicitly add escaping with ^. Also see 'shellxquote' and 'shellxescape'. *E464* Ambiguous use of user-defined command ~ There are two user-defined commands with a common name prefix, and you used Command-line completion to execute one of them. |user-cmd-ambiguous| Example: > :command MyCommand1 echo "one" :command MyCommand2 echo "two" :MyCommand < *E492* Not an editor command ~ You tried to execute a command that is neither an Ex command nor a user-defined command. *E943* Command table needs to be updated, run 'make cmdidxs' ~ This can only happen when changing the source code, when adding a command in src/ex_cmds.h. The lookup table then needs to be updated, by running: > make cmdidxs < *E928* *E889* E928: String required ~ E889: Number required ~ These happen when a value or expression is used that does not have the expected type. ============================================================================== 3. Messages *messages* This is an (incomplete) overview of various messages that Vim gives: *hit-enter* *press-enter* *hit-return* *press-return* *hit-enter-prompt* Press ENTER or type command to continue ~ This message is given when there is something on the screen for you to read, and the screen is about to be redrawn: - After executing an external command (e.g., ":!ls" and "="). - Something is displayed on the status line that is longer than the width of the window, or runs into the 'showcmd' or 'ruler' output. -> Press <Enter> or <Space> to redraw the screen and continue, without that key being used otherwise. -> Press ':' or any other Normal mode command character to start that command. Note that after an external command some special keys, such as the cursor keys, may not work normally, because the terminal is still set to a state for executing the external command. -> Press 'k', <Up>, 'u', 'b' or 'g' to scroll back in the messages. This works the same way as at the |more-prompt|. Only works when 'compatible' is off and 'more' is on. -> Pressing 'j', 'f', 'd' or <Down> is ignored when messages scrolled off the top of the screen, 'compatible' is off and 'more' is on, to avoid that typing one 'j' or 'f' too many causes the messages to disappear. -> Press <C-Y> to copy (yank) a modeless selection to the clipboard register. -> Use a menu. The characters defined for Cmdline-mode are used. -> When 'mouse' contains the 'r' flag, clicking the left mouse button works like pressing <Space>. This makes it impossible to select text though. -> For the GUI clicking the left mouse button in the last line works like pressing <Space>. If you accidentally hit <Enter> or <Space> and you want to see the displayed text then use |g<|. This only works when 'more' is set. To reduce the number of hit-enter prompts: - Set 'cmdheight' to 2 or higher. - Add flags to 'shortmess'. - Reset 'showcmd' and/or 'ruler'. - Make sure `:echo` text is shorter than or equal to |v:echospace| screen cells. If your script causes the hit-enter prompt and you don't know why, you may find the |v:scrollstart| variable useful. Also see 'mouse'. The hit-enter message is highlighted with the |hl-Question| group. *more-prompt* *pager* -- More -- ~ -- More -- SPACE/d/j: screen/page/line down, b/u/k: up, q: quit ~ This message is given when the screen is filled with messages. It is only given when the 'more' option is on. It is highlighted with the |hl-MoreMsg| group. Type effect ~ <CR> or <NL> or j or <Down> one more line d down a page (half a screen) <Space> or f or <PageDown> down a screen G down all the way, until the hit-enter prompt <BS> or k or <Up> one line back u up a page (half a screen) b or <PageUp> back a screen g back to the start q, <Esc> or CTRL-C stop the listing : stop the listing and enter a command-line <C-Y> yank (copy) a modeless selection to the clipboard ("* and "+ registers) {menu-entry} what the menu is defined to in Cmdline-mode. <LeftMouse> next page (*) Any other key causes the meaning of the keys to be displayed. (*) Clicking the left mouse button only works: - For the GUI: in the last line of the screen. - When 'r' is included in 'mouse' (but then selecting text won't work). Note: The typed key is directly obtained from the terminal, it is not mapped and typeahead is ignored. The |g<| command can be used to see the last page of previous command output. This is especially useful if you accidentally typed <Space> at the hit-enter prompt. vim:tw=78:ts=8:noet:ft=help:norl: