12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454 |
- *starting.txt* Nvim
- VIM REFERENCE MANUAL by Bram Moolenaar
- Starting Vim *starting*
- Type |gO| to see the table of contents.
- ==============================================================================
- Nvim arguments *cli-arguments*
- Most often, Nvim is started to edit a single file with the command: >
- nvim filename
- More generally, Nvim is started with: >
- nvim [option | filename] ..
- Option arguments and file name arguments can be mixed, and any number of them
- can be given. However, watch out for options that take an argument.
- The following items decide how to start editing:
- *-file* *---*
- filename One or more file names. The first one will be the current
- file and read into the buffer. The cursor will be positioned
- on the first line of the buffer.
- To avoid a file name starting with a '-' being interpreted as
- an option, precede the arglist with "--", e.g.: >
- nvim -- -filename
- < All arguments after "--" are interpreted as file names, no
- other options or "+command" arguments can follow.
- *--*
- `-` Alias for stdin (standard input).
- Example: >
- echo text | nvim - file
- < "text" is read into buffer 1, "file" is opened as buffer 2.
- In most cases (except -s, -es, |--embed|, --headless) if stdin
- is not a TTY then it is read as text, so "-" is implied: >
- echo text | nvim file
- < The buffer will be marked as modified, because it contains
- text that needs to be saved (except for readonly |-R| mode).
- If you don't like that, put these lines in your init.vim: >
- " Don't set 'modified' when reading from stdin
- au StdinReadPost * set nomodified
- <
- To read stdin as Normal commands use |-s| with "-": >
- echo "ifoo" | nvim -s -
- < To read stdin as Ex commands use |-es| or |-e|: >
- echo "echo getpid()" | nvim -e - -V1
- < To open a file literally named "-", put it after "--": >
- echo foo | nvim -- -
- < To read stdin as text with |--headless| use "-".
- *-t* *-tag*
- -t {tag} A tag. "tag" is looked up in the tags file, the associated
- file becomes the current file, and the associated command is
- executed. Mostly this is used for C programs, in which case
- "tag" often is a function name. The effect is that the file
- containing that function becomes the current file and the
- cursor is positioned on the start of the function (see
- |tags|).
- *-q* *-qf*
- -q [errorfile] QuickFix mode. The file with the name [errorfile] is read
- and the first error is displayed. See |quickfix|.
- If [errorfile] is not given, the 'errorfile' option is used
- for the file name. See 'errorfile' for the default value.
- (nothing) Without one of the four items above, Vim will start editing a
- new buffer. It's empty and doesn't have a file name.
- *startup-options*
- The option arguments may be given in any order. Single-letter options can be
- combined after one dash. There can be no option arguments after the "--"
- argument.
- --help *-h* *--help* *-?*
- -?
- -h Give usage (help) message and exit.
- --version *-v* *--version*
- -v Print version information and exit. Same output as for
- |:version| command.
- *--clean*
- --clean Mimics a fresh install of Nvim:
- - Skips initializations from files and environment variables.
- - No 'shada' file is read or written.
- - Excludes user directories from 'runtimepath'
- - Loads builtin plugins, unlike "-u NONE -i NONE".
- *--noplugin*
- --noplugin Skip loading plugins. Resets the 'loadplugins' option.
- Note that the |-u| argument may also disable loading plugins:
- argument load vimrc files load plugins ~
- (nothing) yes yes
- -u NONE no no
- -u NORC no yes
- --noplugin yes no
- --startuptime {fname} *--startuptime*
- During startup write timing messages to the file {fname}.
- This can be used to find out where time is spent while loading
- your |config|, plugins and opening the first file.
- When {fname} already exists new messages are appended.
- *-+*
- +[num] The cursor will be positioned on line "num" for the first
- file being edited. If "num" is missing, the cursor will be
- positioned on the last line.
- *-+/*
- +/{pat} The cursor will be positioned on the first line containing
- "pat" in the first file being edited (see |pattern| for the
- available search patterns). The search starts at the cursor
- position, which can be the first line or the cursor position
- last used from |shada|. To force a search from the first
- line use "+1 +/pat".
- +{command} *-+c* *-c*
- -c {command} {command} will be executed after the first file has been
- read (and after autocommands and modelines for that file have
- been processed). "command" is interpreted as an Ex command.
- If the "command" contains spaces, it must be enclosed in
- double quotes (this depends on the shell that is used).
- Example: >
- vim "+set si" main.c
- vim "+find stdio.h"
- vim -c "set ff=dos" -c wq mine.mak
- <
- Note: You can use up to 10 "+" or "-c" arguments in a Vim
- command. They are executed in the order given. A "-S"
- argument counts as a "-c" argument as well.
- --cmd {command} *--cmd*
- {command} will be executed before processing any vimrc file.
- Otherwise, it acts like -c {command}. You can use up to 10 of
- these commands, independently from "-c" commands.
- *-S*
- -S [file] Executes Vimscript or Lua (".lua") [file] after the first file
- has been read. See also |:source|. If [file] is not given,
- defaults to "Session.vim". Equivalent to: >
- -c "source {file}"
- < Can be repeated like "-c", subject to the same limit of 10
- "-c" arguments. {file} cannot start with a "-".
- -L *-L* *-r*
- -r Recovery mode. Without a file name argument, a list of
- existing swap files is given. With a file name, a swap file
- is read to recover a crashed editing session. See
- |crash-recovery|.
- *-R*
- -R Readonly mode. The 'readonly' option will be set for all the
- files being edited. You can still edit the buffer, but will
- be prevented from accidentally overwriting a file. If you
- forgot that you are in View mode and did make some changes,
- you can overwrite a file by adding an exclamation mark to
- the Ex command, as in ":w!". The 'readonly' option can be
- reset with ":set noro" (see the options chapter, |options|).
- Subsequent edits will not be done in readonly mode. Calling
- the executable "view" has the same effect as the -R argument.
- The 'updatecount' option will be set to 10000, meaning that
- the swap file will not be updated automatically very often.
- See |-M| for disallowing modifications.
- *-m*
- -m Modifications not allowed to be written. The 'write' option
- will be reset, so that writing files is disabled. However,
- the 'write' option can be set to enable writing again.
- *-M*
- -M Modifications not allowed. The 'modifiable' option will be
- reset, so that changes are not allowed. The 'write' option
- will be reset, so that writing files is disabled. However,
- the 'modifiable' and 'write' options can be set to enable
- changes and writing.
- -e *-e* *-E*
- -E Start Nvim in Ex mode |gQ|, see |Ex-mode|.
- If stdin is not a TTY:
- -e reads/executes stdin as Ex commands.
- -E reads stdin as text (into buffer 1).
- -es *-es* *-Es* *-s-ex* *silent-mode*
- -Es Script mode, aka "silent mode", aka "batch mode". No UI,
- disables most prompts and messages. Unrelated to |-s|.
- See also |-S| to run script files.
- -es reads/executes stdin as Ex commands. >
- printf "put ='foo'\n%%print\n" | nvim -es
- < -Es reads stdin as text (into buffer 1). Use |-c| or "+" to
- send commands. >
- printf "foo\n" | nvim -Es +"%print"
- < These commands display on stdout:
- :list
- :number
- :print
- :set
- With |:verbose| or 'verbose', other commands display on stderr: >
- nvim -es +":verbose echo 'foo'"
- nvim -V1 -es +foo
- < User |config| is skipped unless |-u| was given.
- Swap file is skipped (like |-n|).
- User |shada| is loaded (unless "-i NONE" is given).
- *-l*
- -l {script} [args]
- Executes Lua {script} non-interactively (no UI) with optional
- [args] after processing any preceding Nvim |cli-arguments|,
- then exits. Exits 1 on Lua error. See |-S| to run multiple Lua
- scripts without args, with a UI.
- *lua-args*
- All [args] are treated as {script} arguments and stored in the
- Lua `_G.arg` global table, thus "-l" ends processing of Nvim
- arguments. The {script} name is stored at `_G.arg[0]`.
- Sets 'verbose' to 1 (like "-V1"), so Lua `print()` writes to
- output.
- If {script} prints messages and doesn't cause Nvim to exit,
- Nvim ensures output ends with a newline.
- Arguments before "-l" are processed before executing {script}.
- This example quits before executing "foo.lua": >
- nvim +q -l foo.lua
- < This loads Lua module "bar" before executing "foo.lua": >
- nvim +"lua require('bar')" -l foo.lua
- <
- Skips user |config| unless |-u| was given.
- Disables plugins unless 'loadplugins' was set.
- Disables |shada| unless |-i| was given.
- Disables swapfile (like |-n|).
- *-ll*
- -ll {script} [args]
- Execute a Lua script, similarly to |-l|, but the editor is not
- initialized. This gives a Lua environment similar to a worker
- thread. See |lua-loop-threading|.
- Unlike `-l` no prior arguments are allowed.
- *-b*
- -b Binary mode. File I/O will only recognize <NL> to separate
- lines. The 'expandtab' option will be reset. The 'textwidth'
- option is set to 0. 'modeline' is reset. The 'binary' option
- is set. This is done after reading the |vimrc| but before
- reading any file in the arglist. See also |edit-binary|.
- *-A*
- -A Arabic mode. Sets the 'arabic' option on.
- *-H*
- -H Hebrew mode. Sets the 'rightleft' option on and the 'keymap'
- option to "hebrew".
- *-V* *verbose*
- -V[N] Verbose. Sets the 'verbose' option to [N] (default: 10).
- Messages will be given for each file that is ":source"d and
- for reading or writing a ShaDa file. Can be used to find
- out what is happening upon startup and exit.
- Example: >
- nvim -V8
- -V[N]{file}
- Like -V and sets 'verbosefile' to {file} (must not start with
- a digit). Messages are not displayed, instead they are
- written to {file}.
- Example: >
- nvim -V20vimlog
- <
- *-D*
- -D Debugging. Go to debugging mode when executing the first
- command from a script. |debug-mode|
- *-n*
- -n No |swap-file| will be used. Recovery after a crash will be
- impossible. Handy if you want to view or edit a file on a
- very slow medium (e.g., a floppy).
- Can also be done with ":set updatecount=0". You can switch it
- on again by setting the 'updatecount' option to some value,
- e.g., ":set uc=100".
- 'updatecount' is set to 0 AFTER executing commands from a
- vimrc file, but before the GUI initializations. Thus it
- overrides a setting for 'updatecount' in a vimrc file, but not
- in a gvimrc file. See |startup|.
- When you want to reduce accesses to the disk (e.g., for a
- laptop), don't use "-n", but set 'updatetime' and
- 'updatecount' to very big numbers, and type ":preserve" when
- you want to save your work. This way you keep the possibility
- for crash recovery.
- *-o*
- -o[N] Open N windows, split horizontally. If [N] is not given,
- one window is opened for every file given as argument. If
- there is not enough room, only the first few files get a
- window. If there are more windows than arguments, the last
- few windows will be editing an empty file.
- *-O*
- -O[N] Open N windows, split vertically. Otherwise, it's like -o.
- If both the -o and the -O option are given, the last one on
- the command line determines how the windows will be split.
- *-p*
- -p[N] Open N tab pages. If [N] is not given, one tab page is opened
- for every file given as argument. The maximum is set with
- 'tabpagemax' pages (default 50). If there are more tab pages
- than arguments, the last few tab pages will be editing an
- empty file. Also see |tabpage|.
- *-d*
- -d Start in |diff-mode|.
- *-u* *E282*
- -u {vimrc} The file {vimrc} is read for initializations. Most other
- initializations are skipped; see |initialization|.
- This can be used to start Vim in a special mode, with special
- mappings and settings. A shell alias can be used to make
- this easy to use. For example, in a C shell descendant: >
- alias vimc 'nvim -u ~/.config/nvim/c_init.vim \!*'
- < And in a Bash shell: >
- alias vimc='nvim -u ~/.config/nvim/c_init.vim'
- < Also consider using autocommands; see |autocommand|.
- When {vimrc} is "NONE" (all uppercase), all initializations
- from files and environment variables are skipped. Plugins and
- syntax highlighting are also skipped.
- When {vimrc} is "NORC" (all uppercase), this has the same
- effect as "NONE", but plugins and syntax highlighting are not
- skipped.
- *-i*
- -i {shada} The file {shada} is used instead of the default ShaDa
- file. If the name "NONE" is used (all uppercase), no ShaDa
- file is read or written, even if 'shada' is set or when
- ":rsh" or ":wsh" are used. See also |shada-file|.
- *-s*
- -s {scriptin} Read script file {scriptin}, interpreting characters as
- Normal-mode input. The same can be done with ":source!": >
- :source! {scriptin}
- < Reads from stdin if {scriptin} is "-": >
- echo "ifoo" | nvim -s -
- < If the end of the file is reached before Nvim exits, further
- characters are read from the keyboard.
- Does not work with |-es|. See also |complex-repeat|.
- *-w_nr*
- -w {number}
- -w{number} Set the 'window' option to {number}.
- *-w*
- -w {scriptout} All keys that you type are recorded in the file "scriptout",
- until you exit Vim. Useful to create a script file to be used
- with "vim -s" or ":source!". Appends to the "scriptout" file
- if it already exists. {scriptout} cannot start with a digit.
- See also |vim.on_key()|.
- See also |complex-repeat|.
- *-W*
- -W {scriptout} Like -w, but do not append, overwrite an existing file.
- *--api-info*
- --api-info Print msgpack-encoded |api-metadata| and exit.
- *--embed*
- --embed Use stdin/stdout as a msgpack-RPC channel, so applications can
- embed and control Nvim via the RPC |API|.
- Waits for the client ("embedder") to call |nvim_ui_attach()|
- before sourcing startup files and reading buffers, so that UIs
- can deterministically handle (display) early messages,
- dialogs, etc. The client can do other requests before
- `nvim_ui_attach` (e.g. `nvim_get_api_info` for feature-detection).
- During this pre-startup phase the user config is of course not
- available (similar to `--cmd`).
- Embedders _not_ using the UI protocol must pass |--headless|: >
- nvim --embed --headless
- < Then startup will continue without waiting for `nvim_ui_attach`.
- This is equivalent to: >
- nvim --headless --cmd "call stdioopen({'rpc': v:true})"
- <
- Embedders that use the UI protocol on a socket connection must
- pass |--listen| as well as |--embed|: >
- nvim --embed --listen addr
- < See also: |ui-startup| |channel-stdio|
- *--headless*
- --headless Start without UI, and do not wait for `nvim_ui_attach`. The
- builtin TUI is not used, so stdio works as an arbitrary
- communication channel. |channel-stdio|
- Also useful for scripting (tests) to see messages that would
- not be printed by |-es|.
- To detect if a UI is available, check if |nvim_list_uis()| is
- empty during or after |VimEnter|.
- To read stdin as text, "-" must be given explicitly:
- --headless cannot assume that stdin is just text. >
- echo foo | nvim --headless +"%print" +"q!" -
- <
- See also |--embed|.
- See also |-es|, which also disables most messages.
- --listen {addr} *--listen*
- Start |RPC| server on pipe or TCP address {addr}. Sets the
- primary listen address |v:servername| to {addr}. |serverstart()|
- To start the server on-demand with systemd, use a systemd
- socket unit and associated service unit running: >
- systemd-socket-proxyd --exit-idle-time
- <
- ==============================================================================
- Initialization *initialization* *startup*
- At startup, Nvim checks environment variables and files and sets values
- accordingly, proceeding as follows:
- 1. Set the 'shell' option *SHELL* *COMSPEC*
- The environment variable SHELL, if it exists, is used to set the
- 'shell' option. On Win32, the COMSPEC variable is used
- if SHELL is not set.
- 2. Process the arguments
- The options and file names from the command that start Vim are
- inspected.
- The |-V| argument can be used to display or log what happens next,
- useful for debugging the initializations.
- The |--cmd| arguments are executed.
- Buffers are created for all files (but not loaded yet).
- 3. Start a server (unless |--listen| was given) and set |v:servername|.
- 4. Wait for UI to connect.
- Nvim started with |--embed| waits for the UI to connect before
- proceeding to load user configuration.
- 5. Setup |default-mappings| and |default-autocmds|. Create |popup-menu|.
- 6. Enable filetype and indent plugins.
- This does the same as the command: >
- :runtime! ftplugin.vim indent.vim
- < Skipped if the "-u NONE" command line argument was given.
- 7. Load user config (execute Ex commands from files, environment, …).
- $VIMINIT environment variable is read as one Ex command line (separate
- multiple commands with '|' or <NL>).
- *config* *init.vim* *init.lua* *vimrc* *exrc*
- A file containing initialization commands is generically called
- a "vimrc" or config file. It can be either Vimscript ("init.vim") or
- Lua ("init.lua"), but not both. *E5422*
- See also |vimrc-intro| and |base-directories|.
- The config file is located at:
- Unix ~/.config/nvim/init.vim (or init.lua)
- Windows ~/AppData/Local/nvim/init.vim (or init.lua)
- |$XDG_CONFIG_HOME| $XDG_CONFIG_HOME/nvim/init.vim (or init.lua)
- If Nvim was started with "-u {file}" then {file} is used as the config
- and all initializations until 8. are skipped. $MYVIMRC is not set.
- "nvim -u NORC" can be used to skip these initializations without
- reading a file. "nvim -u NONE" also skips plugins and syntax
- highlighting. |-u|
- If Nvim was started with |-es| or |-Es| or |-l| all initializations until 8.
- are skipped.
- *system-vimrc* *sysinit.vim*
- a. The system vimrc file is read for initializations. If
- nvim/sysinit.vim file exists in one of $XDG_CONFIG_DIRS, it will be
- used. Otherwise the system vimrc file is used. The path of this file
- is given by the |:version| command. Usually it's "$VIM/sysinit.vim".
- *VIMINIT* *EXINIT* *$MYVIMRC*
- b. Locations searched for initializations, in order of preference:
- - $VIMINIT environment variable (Ex command line).
- - User |config|: $XDG_CONFIG_HOME/nvim/init.vim (or init.lua).
- - Other config: {dir}/nvim/init.vim (or init.lua) where {dir} is any
- directory in $XDG_CONFIG_DIRS.
- - $EXINIT environment variable (Ex command line).
- |$MYVIMRC| is set to the first valid location unless it was already
- set or when using $VIMINIT.
- c. If the 'exrc' option is on (which is NOT the default), the current
- directory is searched for the following files, in order of precedence:
- - ".nvim.lua"
- - ".nvimrc"
- - ".exrc"
- The first that exists is used, the others are ignored.
- 8. Enable filetype detection.
- This does the same as the command: >
- :runtime! filetype.lua
- < Skipped if ":filetype off" was called or if the "-u NONE" command line
- argument was given.
- 9. Enable syntax highlighting.
- This does the same as the command: >
- :runtime! syntax/syntax.vim
- < Skipped if ":syntax off" was called or if the "-u NONE" command
- line argument was given.
- 10. Load the plugin scripts. *load-plugins*
- This does the same as the command: >
- :runtime! plugin/**/*.{vim,lua}
- < The result is that all directories in 'runtimepath' will be searched
- for the "plugin" sub-directory and all files ending in ".vim" or
- ".lua" will be sourced (in alphabetical order per directory),
- also in subdirectories. First "*.vim" are sourced, then "*.lua" files,
- per directory.
- However, directories in 'runtimepath' ending in "after" are skipped
- here and only loaded after packages, see below.
- Loading plugins won't be done when:
- - The |'loadplugins'| option was reset in a vimrc file.
- - The |--noplugin| command line argument is used.
- - The |--clean| command line argument is used.
- - The "-u NONE" command line argument is used |-u|.
- Note that using `-c 'set noloadplugins'` doesn't work, because the
- commands from the command line have not been executed yet. You can
- use `--cmd 'set noloadplugins'` or `--cmd 'set loadplugins'` |--cmd|.
- Packages are loaded. These are plugins, as above, but found in the
- "start" directory of each entry in 'packpath'. Every plugin directory
- found is added in 'runtimepath' and then the plugins are sourced. See
- |packages|.
- The plugins scripts are loaded, as above, but now only the directories
- ending in "after" are used. Note that 'runtimepath' will have changed
- if packages have been found, but that should not add a directory
- ending in "after".
- 11. Set 'shellpipe' and 'shellredir'
- The 'shellpipe' and 'shellredir' options are set according to the
- value of the 'shell' option, unless they have been set before.
- This means that Nvim will figure out the values of 'shellpipe' and
- 'shellredir' for you, unless you have set them yourself.
- 12. Set 'updatecount' to zero, if "-n" command argument used.
- 13. Set binary options if the |-b| flag was given.
- 14. Read the |shada-file|.
- 15. Read the quickfix file if the |-q| flag was given, or exit on failure.
- 16. Open all windows
- When the |-o| flag was given, windows will be opened (but not
- displayed yet).
- When the |-p| flag was given, tab pages will be created (but not
- displayed yet).
- When switching screens, it happens now. Redrawing starts.
- If the |-q| flag was given, the first error is jumped to.
- Buffers for all windows will be loaded, without triggering |BufAdd|
- autocommands.
- 17. Execute startup commands
- If a |-t| flag was given, the tag is jumped to.
- Commands given with |-c| and |+cmd| are executed.
- The starting flag is reset, has("vim_starting") will now return zero.
- The |v:vim_did_enter| variable is set to 1.
- The |VimEnter| autocommands are executed.
- Saving the current state of Vim to a file ~
- Whenever you have changed values of options or when you have created a
- mapping, then you may want to save them in a vimrc file for later use. See
- |save-settings| about saving the current state of settings to a file.
- Avoiding trojan horses ~
- *trojan-horse*
- While reading the "vimrc" or the "exrc" file in the current directory, some
- commands can be disabled for security reasons by setting the 'secure' option.
- This is always done when executing the command from a tags file. Otherwise,
- it would be possible that you accidentally use a vimrc or tags file that
- somebody else created and contains nasty commands. The disabled commands are
- the ones that start a shell, the ones that write to a file, and ":autocmd".
- The ":map" commands are echoed, so you can see which keys are being mapped.
- If you want Vim to execute all commands in a local vimrc file, you
- can reset the 'secure' option in the EXINIT or VIMINIT environment variable or
- in the global exrc or vimrc file. This is not possible in vimrc or
- exrc in the current directory, for obvious reasons.
- On Unix systems, this only happens if you are not the owner of the
- vimrc file. Warning: If you unpack an archive that contains a vimrc or exrc
- file, it will be owned by you. You won't have the security protection. Check
- the vimrc file before you start Vim in that directory, or reset the 'exrc'
- option. Some Unix systems allow a user to do "chown" on a file. This makes
- it possible for another user to create a nasty vimrc and make you the owner.
- Be careful!
- When using tag search commands, executing the search command (the last
- part of the line in the tags file) is always done in secure mode. This works
- just like executing a command from a vimrc in the current directory.
- If Vim startup is slow ~
- *slow-start*
- If Vim takes a long time to start up, use the |--startuptime| argument to find
- out what happens.
- If you have 'shada' enabled, the loading of the ShaDa file may take a
- while. You can find out if this is the problem by disabling ShaDa for a
- moment (use the Vim argument "-i NONE", |-i|). Try reducing the number of
- lines stored in a register with ":set shada='20,<50,s10". |shada-file|.
- Troubleshooting broken configurations ~
- *bisect*
- The extreme flexibility of editors like Vim and Emacs means that any plugin or
- setting can affect the entire editor in ways that are not initially obvious.
- To find the cause of a problem in your config, you must "bisect" it:
- 1. Remove or disable half of your |config|.
- 2. Restart Nvim.
- 3. If the problem still occurs, goto 1.
- 4. If the problem is gone, restore half of the removed lines.
- 5. Continue narrowing your config in this way, until you find the setting or
- plugin causing the issue.
- Intro message ~
- *:intro*
- When Vim starts without a file name, an introductory message is displayed. It
- is removed as soon as the display is redrawn. To see the message again, use
- the ":intro" command. To avoid the intro message on startup, add the "I" flag
- to 'shortmess'.
- ==============================================================================
- $VIM and $VIMRUNTIME
- *$VIM*
- The environment variable "$VIM" is used to locate various user files for Nvim,
- such as the user |config|. This depends on the system, see
- |startup|.
- Nvim will try to get the value for $VIM in this order:
- 1. Environment variable $VIM, if it is set.
- 2. Path derived from the 'helpfile' option, unless it contains some
- environment variable too (default is "$VIMRUNTIME/doc/help.txt"). File
- name ("help.txt", etc.) is removed. Trailing directory names are removed,
- in this order: "doc", "runtime".
- 3. Path derived from the location of the `nvim` executable.
- 4. Compile-time defined installation directory (see output of ":version").
- After doing this once, Nvim sets the $VIM environment variable.
- *$VIMRUNTIME*
- The environment variable "$VIMRUNTIME" is used to locate various support
- files, such as the documentation and syntax-highlighting files. For example,
- the main help file is normally "$VIMRUNTIME/doc/help.txt".
- Nvim will try to get the value for $VIMRUNTIME in this order:
- 1. Environment variable $VIMRUNTIME, if it is set.
- 2. Directory path "$VIM/vim{version}", if it exists, where {version} is the
- Vim version number without '-' or '.'. For example: "$VIM/vim82".
- 3. Directory path "$VIM/runtime", if it exists.
- 4. Value of $VIM environment variable. This is for backwards compatibility
- with older Vim versions.
- 5. If "../share/nvim/runtime" exists relative to |v:progpath|, it is used.
- 6. Path derived from the 'helpfile' option (if it doesn't contain '$') with
- "doc/help.txt" removed from the end.
- After doing this once, Nvim sets the $VIMRUNTIME environment variable.
- In case you need the value of $VIMRUNTIME in a shell (e.g., for a script that
- greps in the help files) you might be able to use this: >
- VIMRUNTIME="$(nvim --clean --headless --cmd 'echo $VIMRUNTIME|q')"
- ==============================================================================
- Suspending *suspend*
- *CTRL-Z* *v_CTRL-Z*
- CTRL-Z Suspend Nvim, like ":stop".
- Works in Normal and in Visual mode. In Insert and
- Command-line mode, the CTRL-Z is inserted as a normal
- character. In Visual mode Nvim goes back to Normal
- mode.
- :sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
- :st[op][!] Suspend Nvim using OS "job control"; it will continue
- if you make it the foreground job again. Triggers
- |VimSuspend| before suspending and |VimResume| when
- resumed.
- If "!" is not given and 'autowrite' is set, every
- buffer with changes and a file name is written out.
- If "!" is given or 'autowrite' is not set, changed
- buffers are not written, don't forget to bring Nvim
- back to the foreground later!
- In the GUI, suspending is implementation-defined.
- ==============================================================================
- Exiting *exiting*
- There are several ways to exit Vim:
- - Close the last window with `:quit`. Only when there are no changes.
- - Close the last window with `:quit!`. Also when there are changes.
- - Close all windows with `:qall`. Only when there are no changes.
- - Close all windows with `:qall!`. Also when there are changes.
- - Use `:cquit`. Also when there are changes.
- When using `:cquit` or when there was an error message Vim exits with exit
- code 1. Errors can be avoided by using `:silent!` or with `:catch`.
- ==============================================================================
- Saving settings *save-settings*
- Mostly you will edit your vimrc files manually. This gives you the greatest
- flexibility. There are a few commands to generate a vimrc file automatically.
- You can use these files as they are, or copy/paste lines to include in another
- vimrc file.
- *:mk* *:mkexrc*
- :mk[exrc] [file] Write current key mappings and changed options to
- [file] (default ".exrc" in the current directory),
- unless it already exists.
- :mk[exrc]! [file] Always write current key mappings and changed
- options to [file] (default ".exrc" in the current
- directory).
- *:mkv* *:mkvi* *:mkvimrc*
- :mkv[imrc][!] [file] Like ":mkexrc", but the default is ".nvimrc" in the
- current directory. The ":version" command is also
- written to the file.
- These commands will write ":map" and ":set" commands to a file, in such a way
- that when these commands are executed, the current key mappings and options
- will be set to the same values. The options 'columns', 'endofline',
- 'fileformat', 'lines', 'modified', and 'scroll' are not included, because
- these are terminal or file dependent.
- Note that the options 'binary', 'paste' and 'readonly' are included, this
- might not always be what you want.
- When special keys are used in mappings, the 'cpoptions' option will be
- temporarily set to its Vim default, to avoid the mappings to be
- misinterpreted. This makes the file incompatible with Vi, but makes sure it
- can be used with different terminals.
- Only global mappings are stored, not mappings local to a buffer.
- A common method is to use a default |config| file, make some modifications
- with ":map" and ":set" commands and write the modified file. First read the
- default vimrc in with a command like ":source ~piet/.vimrc.Cprogs", change
- the settings and then save them in the current directory with ":mkvimrc!". If
- you want to make this file your default |config|, move it to
- $XDG_CONFIG_HOME/nvim. You could also use autocommands |autocommand| and/or
- modelines |modeline|.
- *vimrc-option-example*
- If you only want to add a single option setting to your vimrc, you can use
- these steps:
- 1. Edit your vimrc file with Vim.
- 2. Play with the option until it's right. E.g., try out different values for
- 'guifont'.
- 3. Append a line to set the value of the option, using the expression register
- '=' to enter the value. E.g., for the 'guifont' option: >
- o:set guifont=<C-R>=&guifont<CR><Esc>
- < [<C-R> is a CTRL-R, <CR> is a return, <Esc> is the escape key]
- You need to escape special characters, esp. spaces.
- ==============================================================================
- Views and Sessions *views-sessions*
- This is introduced in sections |21.4| and |21.5| of the user manual.
- *View* *view-file*
- A View is a collection of settings that apply to one window. You can save a
- View and when you restore it later, the text is displayed in the same way.
- The options and mappings in this window will also be restored, so that you can
- continue editing like when the View was saved.
- *Session* *session-file*
- A Session keeps the Views for all windows, plus the global settings. You can
- save a Session and when you restore it later the window layout looks the same.
- You can use a Session to quickly switch between different projects,
- automatically loading the files you were last working on in that project.
- Views and Sessions are a nice addition to ShaDa files, which are used to
- remember information for all Views and Sessions together |shada-file|.
- You can quickly start editing with a previously saved View or Session with the
- |-S| argument: >
- vim -S Session.vim
- <
- *:mks* *:mksession*
- :mks[ession][!] [file] Write a Vim script that restores the current editing
- session.
- When [!] is included, an existing file is overwritten.
- When [file] is omitted, "Session.vim" is used.
- The output of ":mksession" is like ":mkvimrc", but additional commands are
- added to the file. Which ones depends on the 'sessionoptions' option. The
- resulting file, when executed with a ":source" command:
- 1. Restores global mappings and options, if 'sessionoptions' contains
- "options". Script-local mappings will not be written.
- 2. Restores global variables that start with an uppercase letter and contain
- at least one lowercase letter, if 'sessionoptions' contains "globals".
- 3. Closes all windows in the current tab page, except the current one; closes
- all tab pages except the current one (this results in currently loaded
- buffers to be unloaded, some may become hidden if 'hidden' is set or
- otherwise specified); wipes out the current buffer, if it is empty and
- unnamed.
- 4. Restores the current directory, if 'sessionoptions' contains "curdir", or
- sets the current directory to where the Session file is, if
- 'sessionoptions' contains "sesdir".
- 5. Restores GUI Vim window position, if 'sessionoptions' contains "winpos".
- 6. Restores screen size, if 'sessionoptions' contains "resize".
- 7. Reloads the buffer list, with the last cursor positions. If
- 'sessionoptions' contains "buffers" then all buffers are restored,
- including hidden and unloaded buffers. Otherwise, only buffers in windows
- are restored.
- 8. Restores all windows with the same layout. If 'sessionoptions' contains
- "help", help windows are restored. If 'sessionoptions' contains "blank",
- windows editing a buffer without a name will be restored.
- If 'sessionoptions' contains "winsize" and no (help/blank) windows were
- left out, the window sizes are restored (relative to the screen size).
- Otherwise, the windows are just given sensible sizes.
- 9. Restores the Views for all the windows, as with |:mkview|. But
- 'sessionoptions' is used instead of 'viewoptions'.
- 10. If a file exists with the same name as the Session file, but ending in
- "x.vim" (for eXtra), executes that as well. You can use `*x.vim` files to
- specify additional settings and actions associated with a given Session,
- such as creating menu items in the GUI version.
- After restoring the Session, the full filename of your current Session is
- available in the internal variable |v:this_session|.
- An example mapping: >
- :nmap <F2> :wa<Bar>exe "mksession! " .. v:this_session<CR>:so ~/sessions/
- This saves the current Session, and starts off the command to load another.
- A session includes all tab pages, unless "tabpages" was removed from
- 'sessionoptions'. |tab-page|
- The |SessionLoadPost| autocmd event is triggered after a session file is
- loaded/sourced.
- *SessionLoad-variable*
- While the session file is loading, the SessionLoad global variable is set to
- 1. Plugins can use this to postpone some work until the SessionLoadPost event
- is triggered.
- *:mkvie* *:mkview*
- :mkvie[w][!] [file] Write a Vim script that restores the contents of the
- current window.
- When [!] is included, an existing file is overwritten.
- When [file] is omitted or is a number from 1 to 9, a
- name is generated and 'viewdir' prepended. When the
- last path part of 'viewdir' does not exist, this
- directory is created. E.g., when 'viewdir' is
- "$VIM/vimfiles/view" then "view" is created in
- "$VIM/vimfiles".
- An existing file is always overwritten then. Use
- |:loadview| to load this view again.
- When [file] is the name of a file ('viewdir' is not
- used), a command to edit the file is added to the
- generated file.
- The output of ":mkview" contains these items:
- 1. The argument list used in the window. When the global argument list is
- used, it is reset to the global list.
- The index in the argument list is also restored.
- 2. The file being edited in the window. If there is no file, the window is
- made empty.
- 3. Restore mappings, abbreviations and options local to the window, if
- 'viewoptions' contains "options" or "localoptions". Only option values
- that are local to the current buffer and the current window are restored.
- When storing the view as part of a session and "options" is in
- 'sessionoptions', global values for local options will be stored too.
- 4. Restore folds when using manual folding and 'viewoptions' contains
- "folds". Restore manually opened and closed folds.
- 5. The scroll position and the cursor position in the file. Doesn't work very
- well when there are closed folds.
- 6. The local current directory, if it is different from the global current
- directory and 'viewoptions' contains "curdir".
- Note that Views and Sessions are not perfect:
- - They don't restore everything. For example, defined functions, autocommands
- and ":syntax on" are not included. Things like register contents and
- command line history are in ShaDa, not in Sessions or Views.
- - Global option values are only set when they differ from the default value.
- When the current value is not the default value, loading a Session will not
- set it back to the default value. Local options will be set back to the
- default value though.
- - Existing mappings will be overwritten without warning. An existing mapping
- may cause an error for ambiguity.
- - When storing manual folds and when storing manually opened/closed folds,
- changes in the file between saving and loading the view will mess it up.
- - The Vim script is not very efficient. But still faster than typing the
- commands yourself!
- *:lo* *:loadview*
- :lo[adview] [nr] Load the view for the current file. When [nr] is
- omitted, the view stored with ":mkview" is loaded.
- When [nr] is specified, the view stored with ":mkview
- [nr]" is loaded.
- The combination of ":mkview" and ":loadview" can be used to store up to ten
- different views of a file. These are remembered in the directory specified
- with the 'viewdir' option. The views are stored using the file name. If a
- file is renamed or accessed through a (symbolic) link, the view will not be
- found.
- You might want to clean up your 'viewdir' directory now and then.
- To automatically save and restore views for `*.c` files: >
- au BufWinLeave *.c mkview
- au BufWinEnter *.c silent! loadview
- ==============================================================================
- Shada ("shared data") file *shada* *shada-file*
- If you exit Vim and later start it again, you would normally lose a lot of
- information. The ShaDa file can be used to remember that information, which
- enables you to continue where you left off. Its name is the abbreviation of
- SHAred DAta because it is used for sharing data between Nvim sessions.
- This is introduced in section |21.3| of the user manual.
- The ShaDa file is used to store:
- - The command line history.
- - The search string history.
- - The input-line history.
- - Contents of non-empty registers.
- - Marks for several files.
- - File marks, pointing to locations in files.
- - Last search/substitute pattern (for 'n' and '&').
- - The buffer list.
- - Global variables.
- You could also use a Session file. The difference is that the ShaDa file
- does not depend on what you are working on. There normally is only one
- ShaDa file. Session files are used to save the state of a specific editing
- Session. You could have several Session files, one for each project you are
- working on. ShaDa and Session files together can be used to effectively
- enter Vim and directly start working in your desired setup. |session-file|
- *shada-read*
- When Vim is started and the 'shada' option is non-empty, the contents of
- the ShaDa file are read and the info can be used in the appropriate places.
- The |v:oldfiles| variable is filled. The marks are not read in at startup
- (but file marks are). See |initialization| for how to set the 'shada'
- option upon startup.
- *shada-write*
- When Vim exits and 'shada' is non-empty, the info is stored in the ShaDa file
- (it's actually merged with the existing one, if one exists |shada-merging|).
- The 'shada' option is a string containing information about what info should
- be stored, and contains limits on how much should be stored (see 'shada').
- Notes for Unix:
- - The file protection for the ShaDa file will be set to prevent other users
- from being able to read it, because it may contain any text or commands that
- you have worked with.
- - If you want to share the ShaDa file with other users (e.g. when you "su"
- to another user), you can make the file writable for the group or everybody.
- Vim will preserve this when writing new ShaDa files. Be careful, don't
- allow just anybody to read and write your ShaDa file!
- - Vim will not overwrite a ShaDa file that is not writable by the current
- "real" user. This helps for when you did "su" to become root, but your
- $HOME is still set to a normal user's home directory. Otherwise, Vim would
- create a ShaDa file owned by root that nobody else can read.
- - The ShaDa file cannot be a symbolic link. This is to avoid security
- issues.
- Marks are stored for each file separately. When a file is read and 'shada'
- is non-empty, the marks for that file are read from the ShaDa file. NOTE:
- The marks are only written when exiting Vim, which is fine because marks are
- remembered for all the files you have opened in the current editing session,
- unless ":bdel" is used. If you want to save the marks for a file that you are
- about to abandon with ":bdel", use ":wsh". The '[' and ']' marks are not
- stored, but the '"' mark is. The '"' mark is very useful for jumping to the
- cursor position when the file was last exited. No marks are saved for files
- that start with any string given with the "r" flag in 'shada'. This can be
- used to avoid saving marks for files on removable media (for MS-Windows you
- would use "ra:,rb:").
- The |v:oldfiles| variable is filled with the file names that the ShaDa file
- has marks for.
- *shada-file-marks*
- Uppercase marks ('A to 'Z) are stored when writing the ShaDa file. The
- numbered marks ('0 to '9) are a bit special. When the ShaDa file is written
- (when exiting or with the |:wshada| command), '0 is set to the current cursor
- position and file. The old '0 is moved to '1, '1 to '2, etc. This
- resembles what happens with the "1 to "9 delete registers. If the current
- cursor position is already present in '0 to '9, it is moved to '0, to avoid
- having the same position twice. The result is that with "'0", you can jump
- back to the file and line where you exited Vim. To do that right away, try
- using this command: >
- vim -c "normal '0"
- In a C shell descendant, you could make an alias for it: >
- alias lvim vim -c '"'normal "'"0'"'
- For a Bash-like shell: >
- alias lvim='vim -c "normal '\''0"'
- Use the "r" flag in 'shada' to specify for which files no marks should be
- remembered.
- MERGING *shada-merging*
- When writing ShaDa files with |:wshada| without bang or at regular exit
- information in the existing ShaDa file is merged with information from current
- Nvim instance. For this purpose ShaDa files store timestamps associated
- with ShaDa entries. Specifically the following is being done:
- 1. History lines are merged, ordered by timestamp. Maximum amount of items in
- ShaDa file is defined by 'shada' option (|shada-/|, |shada-:|, |shada-@|,
- etc: one suboption for each character that represents history name
- (|:history|)).
- 2. Local marks and changes for files that were not opened by Nvim are copied
- to new ShaDa file. Marks for files that were opened by Nvim are merged,
- changes to files opened by Nvim are ignored. |shada-'|
- 3. Jump list is merged: jumps are ordered by timestamp, identical jumps
- (identical position AND timestamp) are squashed.
- 4. Search patterns and substitute strings are not merged: search pattern or
- substitute string which has greatest timestamp will be the only one copied
- to ShaDa file.
- 5. For each register entity with greatest timestamp is the only saved.
- |shada-<|
- 6. All saved variables are saved from current Nvim instance. Additionally
- existing variable values are copied, meaning that the only way to remove
- variable from a ShaDa file is either removing it by hand or disabling
- writing variables completely. |shada-!|
- 7. For each global mark entity with greatest timestamp is the only saved.
- 8. Buffer list and header are the only entries which are not merged in any
- fashion: the only header and buffer list present are the ones from the
- Nvim instance which was last writing the file. |shada-%|
- COMPATIBILITY *shada-compatibility*
- ShaDa files are forward and backward compatible. This means that
- 1. Entries which have unknown type (i.e. that hold unidentified data) are
- ignored when reading and blindly copied when writing.
- 2. Register entries with unknown register name are ignored when reading and
- blindly copied when writing. Limitation: only registers that use name with
- code in interval [1, 255] are supported. |registers|
- 3. Register entries with unknown register type are ignored when reading and
- merged as usual when writing. |getregtype()|
- 4. Local and global mark entries with unknown mark names are ignored when
- reading. When writing global mark entries are blindly copied and local mark
- entries are also blindly copied, but only if file they are attached to fits
- in the |shada-'| limit. Unknown local mark entry's timestamp is also taken
- into account when calculating which files exactly should fit into this
- limit. Limitation: only marks that use name with code in interval [1, 255]
- are supported. |mark-motions|
- 5. History entries with unknown history type are ignored when reading and
- blindly copied when writing. Limitation: there can be only up to 256
- history types. |history|
- 6. Unknown keys found in register, local mark, global mark, change, jump and
- search pattern entries are saved internally and dumped when writing.
- Entries created during Nvim session never have such additions.
- 7. Additional elements found in replacement string and history entries are
- saved internally and dumped. Entries created during Nvim session never
- have such additions.
- 8. Additional elements found in variable entries are simply ignored when
- reading. When writing new variables they will be preserved during merging,
- but that's all. Variable values dumped from current Nvim session never
- have additional elements, even if variables themselves were obtained by
- reading ShaDa files.
- "Blindly" here means that there will be no attempts to somehow merge them,
- even if other entries (with known name/type/etc) are merged. |shada-merging|
- SHADA FILE NAME *shada-file-name*
- - Default name of the |shada| file is:
- Unix: "$XDG_STATE_HOME/nvim/shada/main.shada"
- Windows: "$XDG_STATE_HOME/nvim-data/shada/main.shada"
- See also |base-directories|.
- - To choose a different file name you can use:
- - The "n" flag in the 'shada' option.
- - The |-i| startup argument. "NONE" means no shada file is ever read or
- written. Also not for the commands below!
- - The 'shadafile' option. The value from the "-i" argument (if any) is
- stored in the 'shadafile' option.
- - For the commands below, another file name can be given, overriding the
- default and the name given with 'shada' or "-i" (unless it's NONE).
- MANUALLY READING AND WRITING *shada-read-write*
- Two commands can be used to read and write the ShaDa file manually. This
- can be used to exchange registers between two running Vim programs: First
- type ":wsh" in one and then ":rsh" in the other. Note that if the register
- already contained something, then ":rsh!" would be required. Also note,
- however, that this means everything will be overwritten with information from
- the first Vim, including the command line history, etc.
- The ShaDa file itself can be edited by hand too, although we suggest you
- start with an existing one to get the format right. You need to understand
- MessagePack (or, more likely, find software that is able to use it) format to
- do this. This can be useful in order to create a second file, say
- "~/.my.shada", which could contain certain settings that you always want when
- you first start Nvim. For example, you can preload registers with
- particular data, or put certain commands in the command line history. A line
- in your |config| file like >
- :rshada! ~/.my.shada
- can be used to load this information. You could even have different ShaDa
- files for different types of files (e.g., C code) and load them based on the
- file name, using the ":autocmd" command (see |:autocmd|). More information on
- ShaDa file format is contained in |shada-format| section.
- *E136* *E929* *shada-error-handling*
- Some errors make Nvim leave temporary file named `{basename}.tmp.X` (X is
- any free letter from `a` to `z`) while normally it will create this file,
- write to it and then rename `{basename}.tmp.X` to `{basename}`. Such errors
- include:
- - Errors which make Nvim think that the file being read is not a ShaDa
- file at all:
- non-ShaDa files are not overwritten for safety reasons to avoid accidentally
- destroying an unrelated file. This could happen e.g. when typing "nvim -i
- file" in place of "nvim -R file" (yes, somebody did that at least with Vim).
- Such errors are listed at |shada-critical-contents-errors|.
- - If writing to the temporary file failed: e.g. because of the insufficient
- space left.
- - If renaming file failed: e.g. because of insufficient permissions.
- - If target ShaDa file has different from the Nvim instance's owners (user
- and group) and changing them failed. Unix-specific, applies only when
- Nvim was launched from root.
- Do not forget to remove the temporary file or replace the target file with
- temporary one after getting one of the above errors or all attempts to create
- a ShaDa file may fail with |E929|. If you got one of them when using
- |:wshada| (and not when exiting Nvim: i.e. when you have Nvim session
- running) you have additional options:
- - First thing which you should consider if you got any error, except failure
- to write to the temporary file: remove existing file and replace it with the
- temporary file. Do it even if you have running Nvim instance.
- - Fix the permissions and/or file ownership, free some space and attempt to
- write again. Do not remove the existing file.
- - Use |:wshada| with bang. Does not help in case of permission error. If
- target file was actually the ShaDa file some information may be lost in this
- case. To make the matters slightly better use |:rshada| prior to writing,
- but this still will loose buffer-local marks and change list entries for any
- file which is not opened in the current Nvim instance.
- - Remove the target file from shell and use |:wshada|. Consequences are not
- different from using |:wshada| with bang, but "rm -f" works in some cases
- when you don't have write permissions.
- *:rsh* *:rshada* *E886*
- :rsh[ada][!] [file] Read from ShaDa file [file] (default: see above).
- If [!] is given, then any information that is
- already set (registers, marks, |v:oldfiles|, etc.)
- will be overwritten.
- *:wsh* *:wshada* *E137*
- :wsh[ada][!] [file] Write to ShaDa file [file] (default: see above).
- The information in the file is first read in to make
- a merge between old and new info. When [!] is used,
- the old information is not read first, only the
- internal info is written (also disables safety checks
- described in |shada-error-handling|). If 'shada' is
- empty, marks for up to 100 files will be written.
- When you get error "E929: All .tmp.X files exist,
- cannot write ShaDa file!", check that no old temp
- files were left behind (e.g.
- ~/.local/state/nvim/shada/main.shada.tmp*).
- Note: Executing :wshada will reset all |'quote| marks.
- *:o* *:ol* *:oldfiles*
- :o[ldfiles] List the files that have marks stored in the ShaDa
- file. This list is read on startup and only changes
- afterwards with `:rshada!`. Also see |v:oldfiles|.
- The number can be used with |c_#<|.
- The output can be filtered with |:filter|, e.g.: >
- filter /\.vim/ oldfiles
- < The filtering happens on the file name.
- :bro[wse] o[ldfiles][!]
- List file names as with |:oldfiles|, and then prompt
- for a number. When the number is valid that file from
- the list is edited.
- If you get the |press-enter| prompt you can press "q"
- and still get the prompt to enter a file number.
- Use [!] to abandon a modified buffer. |abandon|
- SHADA FILE FORMAT *shada-format*
- ShaDa files are concats of MessagePack entries. Each entry is a concat of
- exactly four MessagePack objects:
- 1. First goes type of the entry. Object type must be an unsigned integer.
- Object type must not be equal to zero.
- 2. Second goes entry timestamp. It must also be an unsigned integer.
- 3. Third goes the length of the fourth entry. Unsigned integer as well, used
- for fast skipping without parsing.
- 4. Fourth is actual entry data. All currently used ShaDa entries use
- containers to hold data: either map or array. All string values in those
- containers are either binary (applies to filenames) or UTF-8, yet parser
- needs to expect that invalid bytes may be present in a UTF-8 string.
- Exact format depends on the entry type:
- Entry type (name) Entry data ~
- 1 (Header) Map containing data that describes the generator
- instance that wrote this ShaDa file. It is ignored
- when reading ShaDa files. Contains the following data:
- Key Data ~
- generator Binary, software used to generate ShaDa
- file. Is equal to "nvim" when ShaDa file was
- written by Nvim.
- version Binary, generator version.
- encoding Binary, effective 'encoding' value.
- max_kbyte Integer, effective |shada-s| limit value.
- pid Integer, instance process ID.
- `*` It is allowed to have any number of
- additional keys with any data.
- 2 (SearchPattern) Map containing data describing last used search or
- substitute pattern. Normally ShaDa file contains two
- such entries: one with "ss" key set to true (describes
- substitute pattern, see |:substitute|), and one set to
- false (describes search pattern, see
- |search-commands|). "su" key should be true on one of
- the entries. If key value is equal to default then it
- is normally not present. Keys:
- Key Type Default Description ~
- sm Boolean true Effective 'magic' value.
- sc Boolean false Effective 'smartcase' value.
- sl Boolean true True if search pattern comes
- with a line offset. See
- |search-offset|.
- se Boolean false True if |search-offset|
- requested to place cursor at
- (relative to) the end of the
- pattern.
- so Integer 0 Offset value. |search-offset|
- su Boolean false True if current entry was the
- last used search pattern.
- ss Boolean false True if current entry describes
- |:substitute| pattern.
- sh Boolean false True if |v:hlsearch| is on.
- With |shada-h| or 'nohlsearch'
- this key is always false.
- sp Binary N/A Actual pattern. Required.
- sb Boolean false True if search direction is
- backward.
- `*` any none Other keys are allowed for
- compatibility reasons, see
- |shada-compatibility|.
- 3 (SubString) Array containing last |:substitute| replacement string.
- Contains single entry: binary, replacement string used.
- More entries are allowed for compatibility reasons, see
- |shada-compatibility|.
- 4 (HistoryEntry) Array containing one entry from history. Should have
- two or three entries. First one is history type
- (unsigned integer), second is history line (binary),
- third is the separator character (unsigned integer,
- must be in interval [0, 255]). Third item is only
- valid for search history. Possible history types are
- listed in |hist-names|, here are the corresponding
- numbers: 0 - cmd, 1 - search, 2 - expr, 3 - input,
- 4 - debug.
- 5 (Register) Map describing one register (|registers|). If key
- value is equal to default then it is normally not
- present. Keys:
- Key Type Def Description ~
- rt UInteger 0 Register type:
- No Description ~
- 0 |charwise-register|
- 1 |linewise-register|
- 2 |blockwise-register|
- rw UInteger 0 Register width. Only valid
- for |blockwise-register|s.
- rc Array of binary N/A Register contents. Each
- entry in the array
- represents its own line.
- NUL characters inside the
- line should be represented
- as NL according to
- |NL-used-for-Nul|.
- ru Boolean false Unnamed register. Whether
- the unnamed register had
- pointed to this register.
- n UInteger N/A Register name: character
- code in range [1, 255].
- Example: |quote0| register
- has name 48 (ASCII code for
- zero character).
- * any none Other keys are allowed
- for compatibility reasons,
- see |shada-compatibility|.
- 6 (Variable) Array containing two items: variable name (binary) and
- variable value (any object). Values are converted
- using the same code |msgpackparse()| uses when reading,
- |msgpackdump()| when writing, so there may appear
- |msgpack-special-dict|s. If there are more then two
- entries then the rest are ignored
- (|shada-compatibility|).
- 7 (GlobalMark)
- 8 (Jump)
- 10 (LocalMark)
- 11 (Change) Map containing some position description:
- Entry Position ~
- GlobalMark Global mark position. |'A|
- LocalMark Local mark position. |'a|
- Jump One position from the |jumplist|.
- Change One position from the |changelist|.
- Data contained in the map:
- Key Type Default Description ~
- l UInteger 1 Position line number. Must be
- greater then zero.
- c UInteger 0 Position column number.
- n UInteger 34 ('"') Mark name. Only valid for
- GlobalMark and LocalMark
- entries.
- f Binary N/A File name. Required.
- `*` any none Other keys are allowed for
- compatibility reasons, see
- |shada-compatibility|.
- 9 (BufferList) Array containing maps. Each map in the array
- represents one buffer. Possible keys:
- Key Type Default Description ~
- l UInteger 1 Position line number. Must be
- greater then zero.
- c UInteger 0 Position column number.
- f Binary N/A File name. Required.
- `*` any none Other keys are allowed for
- compatibility reasons, see
- |shada-compatibility|.
- `*` (Unknown) Any other entry type is allowed for compatibility
- reasons, see |shada-compatibility|.
- *E575* *E576*
- Errors in ShaDa file may have two types:
- 1. E575 for “logical” errors.
- 2. E576 for “critical” errors.
- When writing, critical errors trigger behaviour described in
- |shada-error-handling|.
- When reading, critical errors cause the rest of the file to be skipped.
- Critical errors include:
- *shada-critical-contents-errors*
- - Any of first three MessagePack objects being not an unsigned integer.
- - Third object requesting amount of bytes greater then bytes left in the ShaDa
- file.
- - Entry with zero type. I.e. first object being equal to zero.
- - MessagePack parser failing to parse the entry data.
- - MessagePack parser consuming less or requesting greater bytes then described
- in the third object for parsing fourth object. I.e. when fourth object
- either contains more then one MessagePack object or it does not contain
- complete MessagePack object.
- ==============================================================================
- Standard Paths *standard-path*
- Nvim stores configuration, data, and logs in standard locations. Plugins are
- strongly encouraged to follow this pattern also. Use |stdpath()| to get the
- paths.
- *base-directories* *xdg*
- The "base" (root) directories conform to the XDG Base Directory Specification.
- https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
- The $XDG_CONFIG_HOME, $XDG_DATA_HOME, $XDG_RUNTIME_DIR, $XDG_STATE_HOME,
- $XDG_CACHE_HOME, $XDG_CONFIG_DIRS and $XDG_DATA_DIRS environment variables
- are used if defined, else default values (listed below) are used.
- Throughout the help pages these defaults are used as placeholders, e.g.
- "~/.config" is understood to mean "$XDG_CONFIG_HOME or ~/.config".
- CONFIG DIRECTORY (DEFAULT) ~
- *$XDG_CONFIG_HOME* Nvim: stdpath("config")
- Unix: ~/.config ~/.config/nvim
- Windows: ~/AppData/Local ~/AppData/Local/nvim
- DATA DIRECTORY (DEFAULT) ~
- *$XDG_DATA_HOME* Nvim: stdpath("data")
- Unix: ~/.local/share ~/.local/share/nvim
- Windows: ~/AppData/Local ~/AppData/Local/nvim-data
- RUN DIRECTORY (DEFAULT) ~
- *$XDG_RUNTIME_DIR* Nvim: stdpath("run")
- Unix: /tmp/nvim.user/xxx /tmp/nvim.user/xxx
- Windows: $TMP/nvim.user/xxx $TMP/nvim.user/xxx
- STATE DIRECTORY (DEFAULT) ~
- *$XDG_STATE_HOME* Nvim: stdpath("state")
- Unix: ~/.local/state ~/.local/state/nvim
- Windows: ~/AppData/Local ~/AppData/Local/nvim-data
- CACHE DIRECTORY (DEFAULT) ~
- *$XDG_CACHE_HOME* Nvim: stdpath("cache")
- Unix: ~/.cache ~/.cache/nvim
- Windows: ~/AppData/Local/Temp ~/AppData/Local/Temp/nvim-data
- LOG FILE (DEFAULT) ~
- `$NVIM_LOG_FILE` Nvim: stdpath("log")/log
- Unix: ~/.local/state/nvim ~/.local/state/nvim/log
- Windows: ~/AppData/Local/nvim-data ~/AppData/Local/nvim-data/log
- Note that stdpath("log") is currently an alias for stdpath("state").
- ADDITIONAL CONFIGS DIRECTORY (DEFAULT) ~
- *$XDG_CONFIG_DIRS* Nvim: stdpath("config_dirs")
- Unix: /etc/xdg/ /etc/xdg/nvim
- Windows: Not applicable Not applicable
- ADDITIONAL DATA DIRECTORY (DEFAULT) ~
- *$XDG_DATA_DIRS* Nvim: stdpath("data_dirs")
- Unix: /usr/local/share /usr/local/share/nvim
- /usr/share /usr/share/nvim
- Windows: Not applicable Not applicable
- NVIM_APPNAME *$NVIM_APPNAME*
- The standard directories can be further configured by the `$NVIM_APPNAME`
- environment variable. This variable controls the sub-directory that Nvim will
- read from (and auto-create) in each of the base directories. For example,
- setting `$NVIM_APPNAME` to "foo" before starting will cause Nvim to look for
- configuration files in `$XDG_CONFIG_HOME/foo` instead of
- `$XDG_CONFIG_HOME/nvim`. `$NVIM_APPNAME` must be a name, such as "foo", or a
- relative path, such as "foo/bar".
- One use-case for $NVIM_APPNAME is to "isolate" Nvim applications.
- Alternatively, for true isolation, on Linux you can use cgroups namespaces: >
- systemd-run --user -qt -p PrivateUsers=yes -p BindPaths=/home/user/profile_xy:/home/user/.config/nvim nvim
- Note: Throughout the help pages, wherever `$XDG_CONFIG_…/nvim` is mentioned it
- is understood to mean `$XDG_CONFIG_…/$NVIM_APPNAME`.
- LOG FILE *log* *$NVIM_LOG_FILE* *E5430*
- Besides 'debug' and 'verbose', Nvim keeps a general log file for internal
- debugging, plugins and RPC clients. >
- :echo $NVIM_LOG_FILE
- By default, the file is located at stdpath("log")/log ($XDG_STATE_HOME/nvim/log)
- unless that path is inaccessible or if $NVIM_LOG_FILE was set before |startup|.
- vim:noet:tw=78:ts=8:ft=help:norl:
|