mirror of
				https://github.com/neovim/neovim.git
				synced 2025-10-26 12:27:24 +00:00 
			
		
		
		
	Merge #7171 from justinmk/doc
This commit is contained in:
		
							
								
								
									
										27
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								README.md
									
									
									
									
									
								
							| @@ -48,17 +48,24 @@ and [more](https://github.com/neovim/neovim/wiki/Installing-Neovim)! | ||||
| Project layout | ||||
| -------------- | ||||
|  | ||||
|     ├─ ci/            Build server scripts | ||||
|     ├─ cmake/         Build scripts | ||||
|     ├─ runtime/       User plugins/docs | ||||
|     ├─ src/           Source code | ||||
|     ├─ third-party/   CMake subproject to build dependencies  | ||||
|     └─ test/          Test code | ||||
|     ├─ ci/              build automation | ||||
|     ├─ cmake/           build scripts | ||||
|     ├─ runtime/         user plugins/docs | ||||
|     ├─ src/             application source code (see src/nvim/README.md) | ||||
|     │  ├─ api/          API subsystem | ||||
|     │  ├─ eval/         VimL subsystem | ||||
|     │  ├─ event/        event-loop subsystem | ||||
|     │  ├─ generators/   code generation (pre-compilation) | ||||
|     │  ├─ lib/          generic data structures | ||||
|     │  ├─ lua/          lua subsystem | ||||
|     │  ├─ msgpack_rpc/  RPC subsystem | ||||
|     │  ├─ os/           low-level platform code | ||||
|     │  └─ tui/          built-in UI | ||||
|     ├─ third-party/     cmake subproject to build dependencies | ||||
|     └─ test/            tests (see test/README.md) | ||||
|  | ||||
| - `third-party/` is activated if `USE_BUNDLED_DEPS` is undefined or the | ||||
|   `USE_BUNDLED` CMake option is true. | ||||
| - [Source README](src/nvim/README.md) | ||||
| - [Test README](test/README.md) | ||||
| - To disable `third-party/` specify `USE_BUNDLED_DEPS=NO` or `USE_BUNDLED=NO` | ||||
|   (CMake option). | ||||
|  | ||||
| Features | ||||
| -------- | ||||
|   | ||||
| @@ -171,8 +171,8 @@ nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special}) | ||||
|                 Parameters:~ | ||||
|                     {str}        String to be converted. | ||||
|                     {from_part}  Legacy Vim parameter. Usually true. | ||||
|                     {do_lt}      Also translate <lt>. Does nothing if | ||||
|                                  `special` is false. | ||||
|                     {do_lt}      Also translate <lt>. Ignored if `special` is | ||||
|                                  false. | ||||
|                     {special}    Replace |keycodes|, e.g. <CR> becomes a "\n" | ||||
|                                  char. | ||||
|  | ||||
| @@ -309,20 +309,24 @@ nvim_set_option({name}, {value})                           *nvim_set_option()* | ||||
|                     {value}  New option value | ||||
|  | ||||
| nvim_out_write({str})                                       *nvim_out_write()* | ||||
|                 Writes a message to vim output buffer | ||||
|                 Writes a message to the Vim output buffer. Does not append | ||||
|                 "\n", the message is buffered (won't display) until a linefeed | ||||
|                 is written. | ||||
|  | ||||
|                 Parameters:~ | ||||
|                     {str}  Message | ||||
|  | ||||
| nvim_err_write({str})                                       *nvim_err_write()* | ||||
|                 Writes a message to vim error buffer | ||||
|                 Writes a message to the Vim error buffer. Does not append | ||||
|                 "\n", the message is buffered (won't display) until a linefeed | ||||
|                 is written. | ||||
|  | ||||
|                 Parameters:~ | ||||
|                     {str}  Message | ||||
|  | ||||
| nvim_err_writeln({str})                                   *nvim_err_writeln()* | ||||
|                 Writes a message to vim error buffer. Appends a linefeed to | ||||
|                 ensure all contents are written. | ||||
|                 Writes a message to the Vim error buffer. Appends "\n", so the | ||||
|                 buffer is flushed (and displayed). | ||||
|  | ||||
|                 Parameters:~ | ||||
|                     {str}  Message | ||||
|   | ||||
| @@ -1522,14 +1522,16 @@ v:errors	Errors found by assert functions, such as |assert_true()|. | ||||
|  | ||||
| 					*v:event* *event-variable* | ||||
| v:event		Dictionary of event data for the current |autocommand|.  Valid | ||||
| 		only during the autocommand lifetime: storing or passing | ||||
| 		`v:event` is invalid.  Copy it instead: > | ||||
| 		only during the event lifetime; storing or passing v:event is | ||||
| 		invalid!  Copy it instead: > | ||||
| 			au TextYankPost * let g:foo = deepcopy(v:event) | ||||
| <		Keys vary by event; see the documentation for the specific | ||||
| 		event, e.g. |TextYankPost|. | ||||
| 		event, e.g. |DirChanged| or |TextYankPost|. | ||||
| 			KEY		DESCRIPTION ~ | ||||
| 			operator	The current |operator|.  Also set for | ||||
| 					Ex commands (unlike |v:operator|). For | ||||
| 			cwd		Current working directory | ||||
| 			scope		Event-specific scope name. | ||||
| 			operator	Current |operator|.  Also set for Ex | ||||
| 					commands (unlike |v:operator|). For | ||||
| 					example if |TextYankPost| is triggered | ||||
| 					by the |:yank| Ex command then | ||||
| 					`v:event['operator']` is "y". | ||||
| @@ -4726,7 +4728,8 @@ input({opts}) | ||||
| 		"-complete=" argument.	Refer to |:command-completion| for | ||||
| 		more information.  Example: > | ||||
| 			let fname = input("File: ", "", "file") | ||||
| <							*E5400* *E5402* | ||||
|  | ||||
| <					*input()-highlight* *E5400* *E5402* | ||||
| 		The optional `highlight` key allows specifying function which | ||||
| 		will be used for highlighting user input.  This function | ||||
| 		receives user input as its only argument and must return | ||||
| @@ -4744,6 +4747,30 @@ input({opts}) | ||||
| 		sections must be ordered so that next hl_start_col is greater | ||||
| 		then or equal to previous hl_end_col. | ||||
|  | ||||
| 		Example (try some input with parentheses): > | ||||
| 			highlight RBP1 guibg=Red ctermbg=red | ||||
| 			highlight RBP2 guibg=Yellow ctermbg=yellow | ||||
| 			highlight RBP3 guibg=Green ctermbg=green | ||||
| 			highlight RBP4 guibg=Blue ctermbg=blue | ||||
| 			let g:rainbow_levels = 4 | ||||
| 			function! RainbowParens(cmdline) | ||||
| 			  let ret = [] | ||||
| 			  let i = 0 | ||||
| 			  let lvl = 0 | ||||
| 			  while i < len(a:cmdline) | ||||
| 			    if a:cmdline[i] is# '(' | ||||
| 			      call add(ret, [i, i + 1, 'RBP' . ((lvl % g:rainbow_levels) + 1)]) | ||||
| 			      let lvl += 1 | ||||
| 			    elseif a:cmdline[i] is# ')' | ||||
| 			      let lvl -= 1 | ||||
| 			      call add(ret, [i, i + 1, 'RBP' . ((lvl % g:rainbow_levels) + 1)]) | ||||
| 			    endif | ||||
| 			    let i += 1 | ||||
| 			  endwhile | ||||
| 			  return ret | ||||
| 			endfunction | ||||
| 			call input({'prompt':'>','highlight':'RainbowParens'}) | ||||
| < | ||||
| 		Highlight function is called at least once for each new | ||||
| 		displayed input string, before command-line is redrawn.  It is | ||||
| 		expected that function is pure for the duration of one input() | ||||
|   | ||||
| @@ -6,9 +6,8 @@ | ||||
|  | ||||
| Differences between Nvim and Vim			       *vim-differences* | ||||
|  | ||||
| Throughout the help files, differences between Nvim and Vim are indicated via | ||||
| the "{Nvim}" tag.  This document is a complete and centralized list of all | ||||
| these differences. | ||||
| Nvim differs from Vim in many ways, big and small.  This document is | ||||
| a complete and centralized reference of those differences. | ||||
|  | ||||
| 				      Type <M-]> to see the table of contents. | ||||
|  | ||||
| @@ -72,12 +71,18 @@ Clipboard integration		|provider-clipboard| | ||||
|  | ||||
| USER EXPERIENCE  ~ | ||||
|  | ||||
| Working intuitively and consistently is a major goal of Nvim. Examples: | ||||
| Working intuitively and consistently is a major goal of Nvim. | ||||
|  | ||||
| - Nvim does not have `-X`, a platform-specific option "sometimes" available in | ||||
|   Vim (with potential surprises: http://stackoverflow.com/q/14635295). Nvim | ||||
|   avoids features that cannot be provided on all platforms--instead that is | ||||
|   delegated to external plugins/extensions. | ||||
| 							*feature-compile* | ||||
| - Nvim always includes ALL features, in contrast to Vim (which ships with | ||||
|   various combinations of 100+ optional features). Think of it as a leaner | ||||
|   version of Vim's "HUGE" build. This reduces surface area for bugs, and | ||||
|   removes a common source of confusion and friction for users. | ||||
|  | ||||
| - Nvim avoids features that cannot be provided on all platforms; instead that | ||||
|   is delegated to external plugins/extensions. E.g. the `-X` platform-specific | ||||
|   option is "sometimes" available in Vim (with potential surprises: | ||||
|   http://stackoverflow.com/q/14635295). | ||||
|  | ||||
| - Vim's internal test functions (test_autochdir(), test_settime(), etc.) are | ||||
|   not exposed (nor implemented); instead Nvim has a robust API. | ||||
| @@ -268,13 +273,12 @@ Lua interface (|if_lua.txt|): | ||||
| - Lua has direct access to Nvim |API| via `vim.api`. | ||||
| - Lua package.path and package.cpath are automatically updated according to | ||||
|   'runtimepath': |lua-require|. | ||||
| - Currently, most legacy Vim features are missing. | ||||
|  | ||||
| |input()| and |inputdialog()| gained support for each other’s features (return  | ||||
| on cancel and completion respectively) via dictionary argument (replaces all  | ||||
| |input()| and |inputdialog()| support for each other’s features (return on | ||||
| cancel and completion respectively) via dictionary argument (replaces all | ||||
| other arguments if used). | ||||
|  | ||||
| |input()| and |inputdialog()| now support user-defined cmdline highlighting. | ||||
| |input()| and |inputdialog()| support user-defined cmdline highlighting. | ||||
|  | ||||
| ============================================================================== | ||||
| 5. Missing legacy features				 *nvim-features-missing* | ||||
| @@ -282,7 +286,7 @@ other arguments if used). | ||||
| Some legacy Vim features are not implemented: | ||||
|  | ||||
| - |if_py|: vim.bindeval() and vim.Function() are not supported | ||||
| - |if_lua|: the `vim` object currently only supports `vim.api` | ||||
| - |if_lua|: the `vim` object is missing most legacy methods | ||||
| - *if_perl* | ||||
| - *if_mzscheme* | ||||
| - *if_tcl* | ||||
| @@ -290,7 +294,7 @@ Some legacy Vim features are not implemented: | ||||
| ============================================================================== | ||||
| 6. Removed features					 *nvim-features-removed* | ||||
|  | ||||
| These features are in Vim, but have been intentionally removed from Nvim. | ||||
| These Vim features were intentionally removed from Nvim. | ||||
|  | ||||
| 			*'cp'* *'nocompatible'* *'nocp'* *'compatible'* | ||||
| Nvim is always "non-compatible" with Vi. | ||||
|   | ||||
| @@ -484,7 +484,8 @@ void nvim_set_option(String name, Object value, Error *err) | ||||
|   set_option_to(NULL, SREQ_GLOBAL, name, value, err); | ||||
| } | ||||
|  | ||||
| /// Writes a message to vim output buffer | ||||
| /// Writes a message to the Vim output buffer. Does not append "\n", the | ||||
| /// message is buffered (won't display) until a linefeed is written. | ||||
| /// | ||||
| /// @param str Message | ||||
| void nvim_out_write(String str) | ||||
| @@ -493,7 +494,8 @@ void nvim_out_write(String str) | ||||
|   write_msg(str, false); | ||||
| } | ||||
|  | ||||
| /// Writes a message to vim error buffer | ||||
| /// Writes a message to the Vim error buffer. Does not append "\n", the | ||||
| /// message is buffered (won't display) until a linefeed is written. | ||||
| /// | ||||
| /// @param str Message | ||||
| void nvim_err_write(String str) | ||||
| @@ -502,8 +504,8 @@ void nvim_err_write(String str) | ||||
|   write_msg(str, true); | ||||
| } | ||||
|  | ||||
| /// Writes a message to vim error buffer. Appends a linefeed to ensure all | ||||
| /// contents are written. | ||||
| /// Writes a message to the Vim error buffer. Appends "\n", so the buffer is | ||||
| /// flushed (and displayed). | ||||
| /// | ||||
| /// @param str Message | ||||
| /// @see nvim_err_write() | ||||
|   | ||||
| @@ -1878,54 +1878,47 @@ static void usage(void) | ||||
|   signal_stop();              // kill us with CTRL-C here, if you like | ||||
|  | ||||
|   mch_msg(_("Usage:\n")); | ||||
|   mch_msg(_("  nvim [arguments] [file ...]      Edit specified file(s)\n")); | ||||
|   mch_msg(_("  nvim [arguments] -               Read text from stdin\n")); | ||||
|   mch_msg(_("  nvim [arguments] -t <tag>        Edit file where tag is defined\n")); | ||||
|   mch_msg(_("  nvim [arguments] -q [errorfile]  Edit file with first error\n")); | ||||
|   mch_msg(_("\nArguments:\n")); | ||||
|   mch_msg(_("  nvim [options] [file ...]      Edit file(s)\n")); | ||||
|   mch_msg(_("  nvim [options] -               Read text from stdin\n")); | ||||
|   mch_msg(_("  nvim [options] -t <tag>        Edit file where tag is defined\n")); | ||||
|   mch_msg(_("  nvim [options] -q [errorfile]  Edit file with first error\n")); | ||||
|   mch_msg(_("\nOptions:\n")); | ||||
|   mch_msg(_("  --                    Only file names after this\n")); | ||||
|   mch_msg(_("  +                     Start at end of file\n")); | ||||
|   mch_msg(_("  --cmd <cmd>           Execute <cmd> before any config\n")); | ||||
|   mch_msg(_("  +<cmd>, -c <cmd>      Execute <cmd> after config and first file\n")); | ||||
|   mch_msg("\n"); | ||||
|   mch_msg(_("  -b                    Binary mode\n")); | ||||
|   mch_msg(_("  -d                    Diff mode\n")); | ||||
|   mch_msg(_("  -e, -E                Ex mode, Improved Ex mode\n")); | ||||
|   mch_msg(_("  -es                   Silent (batch) mode\n")); | ||||
|   mch_msg(_("  -h, --help            Print this help message\n")); | ||||
|   mch_msg(_("  -i <shada>            Use this shada file\n")); | ||||
|   mch_msg(_("  -m                    Modifications (writing files) not allowed\n")); | ||||
|   mch_msg(_("  -M                    Modifications in text not allowed\n")); | ||||
|   mch_msg(_("  -n                    No swap file, use memory only\n")); | ||||
|   mch_msg(_("  -o[N]                 Open N windows (default: one per file)\n")); | ||||
|   mch_msg(_("  -O[N]                 Open N vertical windows (default: one per file)\n")); | ||||
|   mch_msg(_("  -p[N]                 Open N tab pages (default: one per file)\n")); | ||||
|   mch_msg(_("  -r, -L                List swap files\n")); | ||||
|   mch_msg(_("  -r <file>             Recover edit state for this file\n")); | ||||
|   mch_msg(_("  -R                    Read-only mode\n")); | ||||
|   mch_msg(_("  -S <session>          Source <session> after loading the first file\n")); | ||||
|   mch_msg(_("  -s <scriptin>         Read Normal mode commands from <scriptin>\n")); | ||||
|   mch_msg(_("  -u <config>           Use this config file\n")); | ||||
|   mch_msg(_("  -v, --version         Print version information\n")); | ||||
|   mch_msg(_("  -V[N][file]           Verbose [level][file]\n")); | ||||
|   mch_msg(_("  -Z                    Restricted mode\n")); | ||||
|   mch_msg("\n"); | ||||
|   mch_msg(_("  --api-info            Write msgpack-encoded API metadata to stdout\n")); | ||||
|   mch_msg(_("  --embed               Use stdin/stdout as a msgpack-rpc channel\n")); | ||||
|   mch_msg(_("  --headless            Don't start a user interface\n")); | ||||
| #if !defined(UNIX) | ||||
|   mch_msg(_("  --literal             Don't expand wildcards\n")); | ||||
| #endif | ||||
|   mch_msg(_("  -e                    Ex mode\n")); | ||||
|   mch_msg(_("  -E                    Improved Ex mode\n")); | ||||
|   mch_msg(_("  -s                    Silent (batch) mode (only for ex mode)\n")); | ||||
|   mch_msg(_("  -d                    Diff mode\n")); | ||||
|   mch_msg(_("  -R                    Read-only mode\n")); | ||||
|   mch_msg(_("  -Z                    Restricted mode\n")); | ||||
|   mch_msg(_("  -m                    Modifications (writing files) not allowed\n")); | ||||
|   mch_msg(_("  -M                    Modifications in text not allowed\n")); | ||||
|   mch_msg(_("  -b                    Binary mode\n")); | ||||
|   mch_msg(_("  -l                    Lisp mode\n")); | ||||
|   mch_msg(_("  -A                    Arabic mode\n")); | ||||
|   mch_msg(_("  -F                    Farsi mode\n")); | ||||
|   mch_msg(_("  -H                    Hebrew mode\n")); | ||||
|   mch_msg(_("  -V[N][file]           Be verbose [level N][log messages to file]\n")); | ||||
|   mch_msg(_("  -D                    Debugging mode\n")); | ||||
|   mch_msg(_("  -n                    No swap file, use memory only\n")); | ||||
|   mch_msg(_("  -r, -L                List swap files and exit\n")); | ||||
|   mch_msg(_("  -r <file>             Recover crashed session\n")); | ||||
|   mch_msg(_("  -u <vimrc>            Use <vimrc> instead of the default\n")); | ||||
|   mch_msg(_("  -i <shada>            Use <shada> instead of the default\n")); | ||||
|   mch_msg(_("  --noplugin            Don't load plugin scripts\n")); | ||||
|   mch_msg(_("  -o[N]                 Open N windows (default: one for each file)\n")); | ||||
|   mch_msg(_("  -O[N]                 Like -o but split vertically\n")); | ||||
|   mch_msg(_("  -p[N]                 Open N tab pages (default: one for each file)\n")); | ||||
|   mch_msg(_("  +                     Start at end of file\n")); | ||||
|   mch_msg(_("  +<linenum>            Start at line <linenum>\n")); | ||||
|   mch_msg(_("  +/<pattern>           Start at first occurrence of <pattern>\n")); | ||||
|   mch_msg(_("  --cmd <command>       Execute <command> before loading any vimrc\n")); | ||||
|   mch_msg(_("  -c <command>          Execute <command> after loading the first file\n")); | ||||
|   mch_msg(_("  -S <session>          Source <session> after loading the first file\n")); | ||||
|   mch_msg(_("  -s <scriptin>         Read Normal mode commands from <scriptin>\n")); | ||||
|   mch_msg(_("  -w <scriptout>        Append all typed characters to <scriptout>\n")); | ||||
|   mch_msg(_("  -W <scriptout>        Write all typed characters to <scriptout>\n")); | ||||
|   mch_msg(_("  --noplugin            Don't load plugins\n")); | ||||
|   mch_msg(_("  --startuptime <file>  Write startup timing messages to <file>\n")); | ||||
|   mch_msg(_("  --api-info            Dump API metadata serialized to msgpack and exit\n")); | ||||
|   mch_msg(_("  --embed               Use stdin/stdout as a msgpack-rpc channel\n")); | ||||
|   mch_msg(_("  --headless            Don't start a user interface\n")); | ||||
|   mch_msg(_("  -v, --version         Print version information and exit\n")); | ||||
|   mch_msg(_("  -h, --help            Print this help message and exit\n")); | ||||
|   mch_msg(_("\nSee \":help startup-options\" for all options.\n")); | ||||
| } | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -79,7 +79,7 @@ func Test_help_arg() | ||||
|         call add(found, 'Readonly mode') | ||||
|       endif | ||||
|       " Watch out for a second --version line in the Gnome version. | ||||
|       if line =~ '--version.*Print version information and exit' | ||||
|       if line =~ '--version.*Print version information' | ||||
|         call add(found, "--version") | ||||
|       endif | ||||
|     endfor | ||||
|   | ||||
| @@ -1089,13 +1089,7 @@ static void list_features(void) | ||||
|           msg_putchar('\n'); | ||||
|         } | ||||
|       } else { | ||||
|         while (msg_col % width) { | ||||
|           int old_msg_col = msg_col; | ||||
|         msg_putchar(' '); | ||||
|           if (old_msg_col == msg_col) { | ||||
|             break;  // XXX: Avoid infinite loop. | ||||
|           } | ||||
|         } | ||||
|       } | ||||
|     } else { | ||||
|       if (msg_col > 0) { | ||||
| @@ -1103,7 +1097,7 @@ static void list_features(void) | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|   MSG_PUTS("For differences from Vim, see :help vim-differences\n\n"); | ||||
|   MSG_PUTS("See \":help feature-compile\"\n\n"); | ||||
| } | ||||
|  | ||||
| void list_version(void) | ||||
| @@ -1144,7 +1138,7 @@ void list_version(void) | ||||
|   } | ||||
| #endif  // ifdef HAVE_PATHDEF | ||||
|  | ||||
|   version_msg(_("\n\nOptional features included (+) or not (-): ")); | ||||
|   version_msg(_("\n\nFeatures: ")); | ||||
|  | ||||
|   list_features(); | ||||
|  | ||||
| @@ -1216,7 +1210,6 @@ void intro_message(int colon) | ||||
|   static char *(lines[]) = { | ||||
|     N_(NVIM_VERSION_LONG), | ||||
|     "", | ||||
|     N_("by al."), | ||||
|     N_("Nvim is open source and freely distributable"), | ||||
|     N_("https://neovim.io/community"), | ||||
|     "", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Justin M. Keyes
					Justin M. Keyes