Merge pull request #3470 from ZyX-I/pr-3198

XDG base directory specification support
This commit is contained in:
Justin M. Keyes
2015-10-25 22:38:23 -04:00
73 changed files with 1165 additions and 693 deletions

View File

@@ -104,9 +104,9 @@ o Setting the Arabic fonts
font name akin to that used in Linux/Unix systems. font name akin to that used in Linux/Unix systems.
(e.g. -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1) (e.g. -misc-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1)
You can append the 'guifont' set command to your .vimrc file You can append the 'guifont' set command to your vimrc file
in order to get the same above noted results. In other words, in order to get the same above noted results. In other words,
you can include ':set guifont=your_ARABIC_FONT' to your .vimrc you can include ':set guifont=your_ARABIC_FONT' to your vimrc
file. file.
+ Under the X Window environment, you can also start VIM with + Under the X Window environment, you can also start VIM with
@@ -118,9 +118,9 @@ o Setting the appropriate character Encoding
> >
:set encoding=utf-8 :set encoding=utf-8
< <
to your .vimrc file (entering the command manually into you VIM to your vimrc file (entering the command manually into you VIM
window is highly discouraged). In short, include ':set window is highly discouraged). In short, include ':set
encoding=utf-8' to your .vimrc file. encoding=utf-8' to your vimrc file.
Attempts to use Arabic without UTF-8 will result the following Attempts to use Arabic without UTF-8 will result the following
warning message, warning message,
@@ -149,7 +149,7 @@ o Enable Arabic settings [short-cut]
4. enable rightleftcmd mode (affecting the command-line) 4. enable rightleftcmd mode (affecting the command-line)
5. enable arabicshape mode (do visual character alterations) 5. enable arabicshape mode (do visual character alterations)
You may also append the command to your .vimrc file and simply You may also append the command to your vimrc file and simply
include ':set arabic' to it. include ':set arabic' to it.
You are also capable of disabling Arabic support via You are also capable of disabling Arabic support via
@@ -184,8 +184,8 @@ o Enable Arabic settings [short-cut]
:set keymap=arabic :set keymap=arabic
< <
in your VIM window. You can also append the 'keymap' set command to in your VIM window. You can also append the 'keymap' set command to
your .vimrc file. In other words, you can include ':set keymap=arabic' your vimrc file. In other words, you can include ':set keymap=arabic'
to your .vimrc file. to your vimrc file.
To turn toggle (or switch) your keymapping between Arabic and the To turn toggle (or switch) your keymapping between Arabic and the
default mapping (English), it is advised that users use the 'CTRL-^' default mapping (English), it is advised that users use the 'CTRL-^'
@@ -206,8 +206,8 @@ o Enable Arabic settings [short-cut]
:set delcombine :set delcombine
< <
in our VIM window. You can also append the 'delcombine' set command in our VIM window. You can also append the 'delcombine' set command
to your .vimrc file. In other words, you can include ':set delcombine' to your vimrc file. In other words, you can include ':set delcombine'
to your .vimrc file. to your vimrc file.
+ Arabic right-to-left Mode + Arabic right-to-left Mode
@@ -221,8 +221,8 @@ o Enable Arabic settings [short-cut]
- While in Left-to-right mode, enter ':set rl' in the command line - While in Left-to-right mode, enter ':set rl' in the command line
('rl' is the abbreviation for rightleft). ('rl' is the abbreviation for rightleft).
- Put the ':set rl' line in your '.vimrc' file to start Vim in - Put the ':set rl' line in your vimrc file to start Vim in
right-to-left mode permanently. right-to-left mode permanently.
+ Arabic right-to-left command-line Mode + Arabic right-to-left command-line Mode
@@ -248,8 +248,8 @@ o Enable Arabic settings [short-cut]
:set arabicshape :set arabicshape
< <
in our VIM window. You can also append the 'arabicshape' set in our VIM window. You can also append the 'arabicshape' set
command to your .vimrc file. In other words, you can include command to your vimrc file. In other words, you can include
':set arabicshape' to your .vimrc file. ':set arabicshape' to your vimrc file.
Keymap/Keyboard *arabickeymap* Keymap/Keyboard *arabickeymap*

View File

@@ -28,7 +28,7 @@ a file, when entering or leaving a buffer or window, and when exiting Vim.
For example, you can create an autocommand to set the 'cindent' option for For example, you can create an autocommand to set the 'cindent' option for
files matching *.c. You can also use autocommands to implement advanced files matching *.c. You can also use autocommands to implement advanced
features, such as editing compressed files (see |gzip-example|). The usual features, such as editing compressed files (see |gzip-example|). The usual
place to put autocommands is in your .vimrc or .exrc file. place to put autocommands is in your vimrc file.
*E203* *E204* *E143* *E855* *E203* *E204* *E143* *E855*
WARNING: Using autocommands is very powerful, and may lead to unexpected side WARNING: Using autocommands is very powerful, and may lead to unexpected side
@@ -73,8 +73,8 @@ exception is that "<sfile>" is expanded when the autocmd is defined. Example:
Here Vim expands <sfile> to the name of the file containing this line. Here Vim expands <sfile> to the name of the file containing this line.
When your .vimrc file is sourced twice, the autocommands will appear twice. When your vimrc file is sourced twice, the autocommands will appear twice.
To avoid this, put this command in your .vimrc file, before defining To avoid this, put this command in your vimrc file, before defining
autocommands: > autocommands: >
:autocmd! " Remove ALL autocommands for the current group. :autocmd! " Remove ALL autocommands for the current group.
@@ -695,7 +695,7 @@ FuncUndefined When a user function is used but it isn't
GUIEnter After starting the GUI successfully, and after GUIEnter After starting the GUI successfully, and after
opening the window. It is triggered before opening the window. It is triggered before
VimEnter when using gvim. Can be used to VimEnter when using gvim. Can be used to
position the window from a .gvimrc file: > position the window from a gvimrc file: >
:autocmd GUIEnter * winpos 100 50 :autocmd GUIEnter * winpos 100 50
< *GUIFailed* < *GUIFailed*
GUIFailed After starting the GUI failed. Vim may GUIFailed After starting the GUI failed. Vim may
@@ -907,7 +907,7 @@ UserGettingBored When the user presses the same key 42 times.
Just kidding! :-) Just kidding! :-)
*VimEnter* *VimEnter*
VimEnter After doing all the startup stuff, including VimEnter After doing all the startup stuff, including
loading .vimrc files, executing the "-c cmd" loading vimrc files, executing the "-c cmd"
arguments, creating all windows and loading arguments, creating all windows and loading
the buffers in them. the buffers in them.
*VimLeave* *VimLeave*
@@ -994,7 +994,7 @@ expect.
Environment variables can be used in a pattern: > Environment variables can be used in a pattern: >
:autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab :autocmd BufRead $VIMRUNTIME/doc/*.txt set expandtab
And ~ can be used for the home directory (if $HOME is defined): > And ~ can be used for the home directory (if $HOME is defined): >
:autocmd BufWritePost ~/.vimrc so ~/.vimrc :autocmd BufWritePost ~/.config/nvim/init.vim so <afile>
:autocmd BufRead ~archive/* set readonly :autocmd BufRead ~archive/* set readonly
The environment variable is expanded when the autocommand is defined, not when The environment variable is expanded when the autocommand is defined, not when
the autocommand is executed. This is different from the command! the autocommand is executed. This is different from the command!
@@ -1135,7 +1135,7 @@ Example: >
:augroup END :augroup END
This prevents having the autocommands defined twice (e.g., after sourcing the This prevents having the autocommands defined twice (e.g., after sourcing the
.vimrc file again). vimrc file again).
============================================================================== ==============================================================================
9. Executing autocommands *autocmd-execute* 9. Executing autocommands *autocmd-execute*
@@ -1157,7 +1157,7 @@ option will not cause any commands to be executed.
It's possible to use this inside an autocommand too, It's possible to use this inside an autocommand too,
so you can base the autocommands for one extension on so you can base the autocommands for one extension on
another extension. Example: > another extension. Example: >
:au BufEnter *.cpp so ~/.vimrc_cpp :au BufEnter *.cpp so ~/.config/nvim/init_cpp.vim
:au BufEnter *.cpp doau BufEnter x.c :au BufEnter *.cpp doau BufEnter x.c
< Be careful to avoid endless loops. See < Be careful to avoid endless loops. See
|autocmd-nested|. |autocmd-nested|.

View File

@@ -109,7 +109,7 @@ CTRL-W Delete the |word| before the cursor. This depends on the
CTRL-U Remove all characters between the cursor position and CTRL-U Remove all characters between the cursor position and
the beginning of the line. Previous versions of vim the beginning of the line. Previous versions of vim
deleted all characters on the line. If that is the deleted all characters on the line. If that is the
preferred behavior, add the following to your .vimrc: > preferred behavior, add the following to your vimrc: >
:cnoremap <C-U> <C-E><C-U> :cnoremap <C-U> <C-E><C-U>
< <
*c_<Insert>* *c_Insert* *c_<Insert>* *c_Insert*
@@ -456,7 +456,7 @@ that take a file name.
If you would like using <S-Tab> for CTRL-P in an xterm, put this command in If you would like using <S-Tab> for CTRL-P in an xterm, put this command in
your .cshrc: > your .cshrc: >
xmodmap -e "keysym Tab = Tab Find" xmodmap -e "keysym Tab = Tab Find"
And this in your .vimrc: > And this in your vimrc: >
:cmap <Esc>[1~ <C-P> :cmap <Esc>[1~ <C-P>
============================================================================== ==============================================================================
@@ -823,8 +823,8 @@ These modifiers can be given, in this order:
precede any :r or :e. precede any :r or :e.
:r Root of the file name (the last extension removed). When :r Root of the file name (the last extension removed). When
there is only an extension (file name that starts with '.', there is only an extension (file name that starts with '.',
e.g., ".vimrc"), it is not removed. Can be repeated to remove e.g., ".nvimrc"), it is not removed. Can be repeated to
several extensions (last one first). remove several extensions (last one first).
:e Extension of the file name. Only makes sense when used alone. :e Extension of the file name. Only makes sense when used alone.
When there is no extension the result is empty. When there is no extension the result is empty.
When there is only an extension (file name that starts with When there is only an extension (file name that starts with

View File

@@ -52,7 +52,7 @@ Use this command to start Vim:
> >
valgrind --log-file=valgrind.log --leak-check=full ./vim valgrind --log-file=valgrind.log --leak-check=full ./vim
Note: Vim will run much slower. If your .vimrc is big or you have several Note: Vim will run much slower. If your vimrc is big or you have several
plugins you need to be patient for startup, or run with the "-u NONE" plugins you need to be patient for startup, or run with the "-u NONE"
argument. argument.

View File

@@ -66,7 +66,7 @@ make changes after loading a file, these will be included in the displayed
diffs. You might have to do ":diffupdate" now and then, not all changes are diffs. You might have to do ":diffupdate" now and then, not all changes are
immediately taken into account. immediately taken into account.
In your .vimrc file you could do something special when Vim was started in In your vimrc file you could do something special when Vim was started in
diff mode. You could use a construct like this: > diff mode. You could use a construct like this: >
if &diff if &diff

View File

@@ -3441,7 +3441,7 @@ getfperm({fname}) *getfperm()*
If a user does not have a given permission the flag for this If a user does not have a given permission the flag for this
is replaced with the string "-". Examples: > is replaced with the string "-". Examples: >
:echo getfperm("/etc/passwd") :echo getfperm("/etc/passwd")
:echo getfperm(expand("~/.vimrc")) :echo getfperm(expand("~/.config/nvim/init.vim"))
< This will hopefully (from a security point of view) display < This will hopefully (from a security point of view) display
the string "rw-r--r--" or even "rw-------". the string "rw-r--r--" or even "rw-------".
@@ -4668,10 +4668,10 @@ msgpackdump({list}) {Nvim} *msgpackdump()*
msgpackparse({list}) {Nvim} *msgpackparse()* msgpackparse({list}) {Nvim} *msgpackparse()*
Convert a |readfile()|-style list to a list of VimL objects. Convert a |readfile()|-style list to a list of VimL objects.
Example: > Example: >
let fname = expand('~/.nvim/shada/main.shada') let fname = expand('~/.config/nvim/shada/main.shada')
let mpack = readfile(fname, 'b') let mpack = readfile(fname, 'b')
let shada_objects = msgpackparse(mpack) let shada_objects = msgpackparse(mpack)
< This will read ~/.nvim/shada/main.shada file to < This will read ~/.config/nvim/shada/main.shada file to
`shada_objects` list. `shada_objects` list.
Limitations: Limitations:
@@ -4770,8 +4770,8 @@ pathshorten({expr}) *pathshorten()*
result. The tail, the file name, is kept as-is. The other result. The tail, the file name, is kept as-is. The other
components in the path are reduced to single letters. Leading components in the path are reduced to single letters. Leading
'~' and '.' characters are kept. Example: > '~' and '.' characters are kept. Example: >
:echo pathshorten('~/.vim/autoload/myfile.vim') :echo pathshorten('~/.config/nvim/autoload/file1.vim')
< ~/.v/a/myfile.vim ~ < ~/.v/a/file1.vim ~
It doesn't matter if the path exists or not. It doesn't matter if the path exists or not.
pow({x}, {y}) *pow()* pow({x}, {y}) *pow()*
@@ -7274,8 +7274,8 @@ like this: >
When such a function is called, and it is not defined yet, Vim will search the When such a function is called, and it is not defined yet, Vim will search the
"autoload" directories in 'runtimepath' for a script file called "autoload" directories in 'runtimepath' for a script file called
"filename.vim". For example "~/.vim/autoload/filename.vim". That file should "filename.vim". For example "~/.config/nvim/autoload/filename.vim". That
then define the function like this: > file should then define the function like this: >
function filename#funcname() function filename#funcname()
echo "Done!" echo "Done!"
@@ -9080,7 +9080,7 @@ A few options contain an expression. When this expression is evaluated it may
have to be done in the sandbox to avoid a security risk. But the sandbox is have to be done in the sandbox to avoid a security risk. But the sandbox is
restrictive, thus this only happens when the option was set from an insecure restrictive, thus this only happens when the option was set from an insecure
location. Insecure in this context are: location. Insecure in this context are:
- sourcing a .vimrc or .exrc in the current directory - sourcing a .nvimrc or .exrc in the current directory
- while executing in the sandbox - while executing in the sandbox
- value coming from a modeline - value coming from a modeline

View File

@@ -122,8 +122,7 @@ o Setting the Farsi fonts
':set guifont=far-a01' in the Vim window. ':set guifont=far-a01' in the Vim window.
You can have 'guifont' set to far-a01 by Vim during the Vim startup You can have 'guifont' set to far-a01 by Vim during the Vim startup
by appending the ':set guifont=far-a01' into your .vimrc file by appending the ':set guifont=far-a01' into your vimrc file.
(in case of NT/95/98 platforms _vimrc).
Under the X Window environment, you can also start Vim with the Under the X Window environment, you can also start Vim with the
'-fn far-a01' option. '-fn far-a01' option.
@@ -139,7 +138,7 @@ o Farsi Keymapping Activation
To activate the Farsi keymapping, set either 'altkeymap' or 'fkmap'. To activate the Farsi keymapping, set either 'altkeymap' or 'fkmap'.
This is done by entering ':set akm' or ':set fk' in the Vim window. This is done by entering ':set akm' or ':set fk' in the Vim window.
You can have 'altkeymap' or 'fkmap' set as default by appending ':set akm' You can have 'altkeymap' or 'fkmap' set as default by appending ':set akm'
or ':set fk' in your .vimrc file or _vimrc in case of NT/95/98 platforms. or ':set fk' in your vimrc file.
To turn off the Farsi keymapping as a default second language keymapping, To turn off the Farsi keymapping as a default second language keymapping,
reset the 'altkeymap' by entering ':set noakm'. reset the 'altkeymap' by entering ':set noakm'.
@@ -156,8 +155,8 @@ o right-to-left Farsi Mode
+ While in Left-to-right mode, enter 'set rl' in the command line ('rl' is + While in Left-to-right mode, enter 'set rl' in the command line ('rl' is
the abbreviation for rightleft). the abbreviation for rightleft).
+ Put the 'set rl' line in your '.vimrc' file to start Vim in + Put the 'set rl' line in your vimrc file to start Vim in right-to-left
right-to-left mode permanently. mode permanently.
Encoding Encoding
-------- --------

View File

@@ -162,8 +162,7 @@ A. If you want to overrule all default file type checks.
1. Create your user runtime directory. You would normally use the first 1. Create your user runtime directory. You would normally use the first
item of the 'runtimepath' option. Then create the directory "ftdetect" item of the 'runtimepath' option. Then create the directory "ftdetect"
inside it. Example for Unix: > inside it. Example for Unix: >
:!mkdir ~/.vim :!mkdir -p ~/.config/nvim/ftdetect
:!mkdir ~/.vim/ftdetect
< <
2. Create a file that contains an autocommand to detect the file type. 2. Create a file that contains an autocommand to detect the file type.
Example: > Example: >
@@ -173,7 +172,7 @@ A. If you want to overrule all default file type checks.
check the contents of the file to recognize it. check the contents of the file to recognize it.
Write this file as "mine.vim" in the "ftdetect" directory in your user Write this file as "mine.vim" in the "ftdetect" directory in your user
runtime directory. For example, for Unix: > runtime directory. For example, for Unix: >
:w ~/.vim/ftdetect/mine.vim :w ~/.config/nvim/ftdetect/mine.vim
< 3. To use the new filetype detection you must restart Vim. < 3. To use the new filetype detection you must restart Vim.
@@ -196,7 +195,7 @@ B. If you want to detect your file after the default file type checks.
C. If your file type can be detected by the file name. C. If your file type can be detected by the file name.
1. Create your user runtime directory. You would normally use the first 1. Create your user runtime directory. You would normally use the first
item of the 'runtimepath' option. Example for Unix: > item of the 'runtimepath' option. Example for Unix: >
:!mkdir ~/.vim :!mkdir -p ~/.config/nvim
< <
2. Create a file that contains autocommands to detect the file type. 2. Create a file that contains autocommands to detect the file type.
Example: > Example: >
@@ -210,7 +209,7 @@ C. If your file type can be detected by the file name.
augroup END augroup END
< Write this file as "filetype.vim" in your user runtime directory. For < Write this file as "filetype.vim" in your user runtime directory. For
example, for Unix: > example, for Unix: >
:w ~/.vim/filetype.vim :w ~/.config/nvim/filetype.vim
< 3. To use the new filetype detection you must restart Vim. < 3. To use the new filetype detection you must restart Vim.
@@ -224,7 +223,7 @@ D. If your filetype can only be detected by inspecting the contents of the
1. Create your user runtime directory. You would normally use the first 1. Create your user runtime directory. You would normally use the first
item of the 'runtimepath' option. Example for Unix: > item of the 'runtimepath' option. Example for Unix: >
:!mkdir ~/.vim :!mkdir -p ~/.config/nvim
< <
2. Create a vim script file for doing this. Example: > 2. Create a vim script file for doing this. Example: >
if did_filetype() " filetype already set.. if did_filetype() " filetype already set..
@@ -238,7 +237,7 @@ D. If your filetype can only be detected by inspecting the contents of the
< See $VIMRUNTIME/scripts.vim for more examples. < See $VIMRUNTIME/scripts.vim for more examples.
Write this file as "scripts.vim" in your user runtime directory. For Write this file as "scripts.vim" in your user runtime directory. For
example, for Unix: > example, for Unix: >
:w ~/.vim/scripts.vim :w ~/.config/nvim/scripts.vim
< <
3. The detection will work right away, no need to restart Vim. 3. The detection will work right away, no need to restart Vim.
@@ -268,12 +267,12 @@ all loaded. For example, if this command: >
produces this output: produces this output:
runtimepath=/etc/vim,~/.vim,/usr/local/share/vim/vim60 ~ runtimepath=/etc/vim,~/.config/nvim,/usr/local/share/vim/vim60 ~
then Vim will load all plugins in these directories and below: then Vim will load all plugins in these directories and below:
/etc/vim/plugin/ ~ /etc/vim/plugin/ ~
~/.vim/plugin/ ~ ~/.config/nvim/plugin/ ~
/usr/local/share/vim/vim60/plugin/ ~ /usr/local/share/vim/vim60/plugin/ ~
Note that the last one is the value of $VIMRUNTIME which has been expanded. Note that the last one is the value of $VIMRUNTIME which has been expanded.
@@ -329,7 +328,7 @@ ways to change this:
1. Add a few settings. 1. Add a few settings.
You must create a new filetype plugin in a directory early in You must create a new filetype plugin in a directory early in
'runtimepath'. For Unix, for example you could use this file: > 'runtimepath'. For Unix, for example you could use this file: >
vim ~/.vim/ftplugin/fortran.vim vim ~/.config/nvim/ftplugin/fortran.vim
< You can set those settings and mappings that you would like to add. Note < You can set those settings and mappings that you would like to add. Note
that the global plugin will be loaded after this, it may overrule the that the global plugin will be loaded after this, it may overrule the
settings that you do here. If this is the case, you need to use one of the settings that you do here. If this is the case, you need to use one of the
@@ -338,7 +337,7 @@ ways to change this:
2. Make a copy of the plugin and change it. 2. Make a copy of the plugin and change it.
You must put the copy in a directory early in 'runtimepath'. For Unix, for You must put the copy in a directory early in 'runtimepath'. For Unix, for
example, you could do this: > example, you could do this: >
cp $VIMRUNTIME/ftplugin/fortran.vim ~/.vim/ftplugin/fortran.vim cp $VIMRUNTIME/ftplugin/fortran.vim ~/.config/nvim/ftplugin/fortran.vim
< Then you can edit the copied file to your liking. Since the b:did_ftplugin < Then you can edit the copied file to your liking. Since the b:did_ftplugin
variable will be set, the global plugin will not be loaded. variable will be set, the global plugin will not be loaded.
A disadvantage of this method is that when the distributed plugin gets A disadvantage of this method is that when the distributed plugin gets
@@ -347,7 +346,7 @@ ways to change this:
3. Overrule the settings after loading the global plugin. 3. Overrule the settings after loading the global plugin.
You must create a new filetype plugin in a directory from the end of You must create a new filetype plugin in a directory from the end of
'runtimepath'. For Unix, for example, you could use this file: > 'runtimepath'. For Unix, for example, you could use this file: >
vim ~/.vim/after/ftplugin/fortran.vim vim ~/.config/nvim/after/ftplugin/fortran.vim
< In this file you can change just those settings that you want to change. < In this file you can change just those settings that you want to change.
============================================================================== ==============================================================================
@@ -376,7 +375,7 @@ Global mappings:
NOTE: The global mappings are accessed by sourcing the NOTE: The global mappings are accessed by sourcing the
ftplugin/changelog.vim file first, e.g. with > ftplugin/changelog.vim file first, e.g. with >
runtime ftplugin/changelog.vim runtime ftplugin/changelog.vim
< in your |.vimrc|. < in your |init.vim|.
<Leader>o Switches to the ChangeLog buffer opened for the <Leader>o Switches to the ChangeLog buffer opened for the
current directory, or opens it in a new buffer if it current directory, or opens it in a new buffer if it
exists in the current directory. Then it does the exists in the current directory. Then it does the
@@ -478,7 +477,7 @@ FORTRAN *ft-fortran-plugin*
Options: Options:
'expandtab' is switched on to avoid tabs as required by the Fortran 'expandtab' is switched on to avoid tabs as required by the Fortran
standards unless the user has set fortran_have_tabs in .vimrc. standards unless the user has set fortran_have_tabs in vimrc.
'textwidth' is set to 72 for fixed source format as required by the 'textwidth' is set to 72 for fixed source format as required by the
Fortran standards and to 80 for free source format. Fortran standards and to 80 for free source format.
'formatoptions' is set to break code and comment lines and to preserve long 'formatoptions' is set to break code and comment lines and to preserve long

View File

@@ -58,7 +58,7 @@ To disable them use ":unlet". Example:
You can just use ":" and type these into the command line to set these You can just use ":" and type these into the command line to set these
temporarily before loading an Ada file. You can make these option settings temporarily before loading an Ada file. You can make these option settings
permanent by adding the "let" command(s), without a colon, to your "~/.vimrc" permanent by adding the "let" command(s), without a colon, to your |init.vim|
file. file.
Even on a slow (90Mhz) PC this mode works quickly, but if you find the Even on a slow (90Mhz) PC this mode works quickly, but if you find the

View File

@@ -149,7 +149,7 @@ The above will also handle these cases: >
); );
By default, the ftplugin only searches for CREATE statements. You can also By default, the ftplugin only searches for CREATE statements. You can also
override this via your |vimrc| with the following: > override this via your |init.vim| with the following: >
let g:ftplugin_sql_statements = 'create,alter' let g:ftplugin_sql_statements = 'create,alter'
The filetype plugin defines three types of comments: > The filetype plugin defines three types of comments: >
@@ -227,7 +227,7 @@ you must either create:
3. Manual steps / commands 3. Manual steps / commands
The majority of people work with only one vendor's database product, it would The majority of people work with only one vendor's database product, it would
be nice to specify a default in your |vimrc|. be nice to specify a default in your |init.vim|.
2.1 SQLSetType *sqlsettype* *SQLSetType* 2.1 SQLSetType *sqlsettype* *SQLSetType*
@@ -273,12 +273,12 @@ This will echo: >
----------------------- -----------------------
As mentioned earlier, the default syntax rules for Vim is based on Oracle As mentioned earlier, the default syntax rules for Vim is based on Oracle
(PL/SQL). You can override this default by placing one of the following in (PL/SQL). You can override this default by placing one of the following in
your |vimrc|: > your |init.vim|: >
let g:sql_type_default = 'sqlanywhere' let g:sql_type_default = 'sqlanywhere'
let g:sql_type_default = 'sqlinformix' let g:sql_type_default = 'sqlinformix'
let g:sql_type_default = 'mysql' let g:sql_type_default = 'mysql'
If you added the following to your |vimrc|: > If you added the following to your |init.vim|: >
let g:sql_type_default = 'sqlinformix' let g:sql_type_default = 'sqlinformix'
The next time edit a SQL file the following scripts will be automatically The next time edit a SQL file the following scripts will be automatically
@@ -304,11 +304,8 @@ To help identify these scripts, try to create the files with a "sql" prefix.
If you decide you wish to create customizations for the SQLite database, you If you decide you wish to create customizations for the SQLite database, you
can create any of the following: > can create any of the following: >
Unix Unix
~/.vim/syntax/sqlite.vim ~/.config/nvim/syntax/sqlite.vim
~/.vim/indent/sqlite.vim ~/.config/nvim/indent/sqlite.vim
Windows
$VIM/vimfiles/syntax/sqlite.vim
$VIM/vimfiles/indent/sqlite.vim
No changes are necessary to the SQLSetType function. It will automatically No changes are necessary to the SQLSetType function. It will automatically
pickup the new SQL files and load them when you issue the SQLSetType command. pickup the new SQL files and load them when you issue the SQLSetType command.
@@ -341,8 +338,8 @@ The defaults static maps are: >
imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O> imap <buffer> <C-C>T <C-\><C-O>:call sqlcomplete#Map('sqlType')<CR><C-X><C-O>
imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O> imap <buffer> <C-C>s <C-\><C-O>:call sqlcomplete#Map('sqlStatement')<CR><C-X><C-O>
The use of "<C-C>" can be user chosen by using the following in your |.vimrc| as it The use of "<C-C>" can be user chosen by using the following in your
may not work properly on all platforms: > |init.vim| as it may not work properly on all platforms: >
let g:ftplugin_sql_omni_key = '<C-C>' let g:ftplugin_sql_omni_key = '<C-C>'
> >
The static maps (which are based on the syntax highlight groups) follow this The static maps (which are based on the syntax highlight groups) follow this
@@ -440,7 +437,7 @@ the space bar):
- This allows you to quickly drill down into a - This allows you to quickly drill down into a
table to view its columns and back again. table to view its columns and back again.
- <Right> and <Left> can be also be chosen via - <Right> and <Left> can be also be chosen via
your |.vimrc| > your |init.vim| >
let g:ftplugin_sql_omni_key_right = '<Right>' let g:ftplugin_sql_omni_key_right = '<Right>'
let g:ftplugin_sql_omni_key_left = '<Left>' let g:ftplugin_sql_omni_key_left = '<Left>'
@@ -604,7 +601,7 @@ database.
---------------------------- ----------------------------
The SQL completion plugin can be customized through various options set in The SQL completion plugin can be customized through various options set in
your |vimrc|: > your |init.vim|: >
omni_sql_no_default_maps omni_sql_no_default_maps
< - Default: This variable is not defined < - Default: This variable is not defined
- If this variable is defined, no maps are created for OMNI - If this variable is defined, no maps are created for OMNI
@@ -723,7 +720,7 @@ will be specifying different syntax highlight groups.
If you do not wish the default maps created or the key choices do not work on If you do not wish the default maps created or the key choices do not work on
your platform (often a case on *nix) you define the following variable in your platform (often a case on *nix) you define the following variable in
your |vimrc|: > your |init.vim|: >
let g:omni_sql_no_default_maps = 1 let g:omni_sql_no_default_maps = 1
Do no edit ftplugin/sql.vim directly! If you change this file your changes Do no edit ftplugin/sql.vim directly! If you change this file your changes

View File

@@ -26,10 +26,10 @@ How to start the GUI depends on the system used. Mostly you can run the
GUI version of Vim with: GUI version of Vim with:
gvim [options] [files...] gvim [options] [files...]
*gui-init* *gvimrc* *.gvimrc* *_gvimrc* *$MYGVIMRC* *ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
The gvimrc file is where GUI-specific startup commands should be placed. It The gvimrc file is where GUI-specific startup commands should be placed. It
is always sourced after the |vimrc| file. If you have one then the $MYGVIMRC is always sourced after the |init.vim| file. If you have one then the
environment variable has its name. $MYGVIMRC environment variable has its name.
When the GUI starts up initializations are carried out, in this order: When the GUI starts up initializations are carried out, in this order:
- The 'term' option is set to "builtin_gui" and terminal options are reset to - The 'term' option is set to "builtin_gui" and terminal options are reset to
@@ -39,7 +39,7 @@ When the GUI starts up initializations are carried out, in this order:
see |$VIMRUNTIME|. To skip loading the system menu include 'M' in see |$VIMRUNTIME|. To skip loading the system menu include 'M' in
'guioptions'. *buffers-menu* *no_buffers_menu* 'guioptions'. *buffers-menu* *no_buffers_menu*
The system menu file includes a "Buffers" menu. If you don't want this, set The system menu file includes a "Buffers" menu. If you don't want this, set
the "no_buffers_menu" variable in your .vimrc (not .gvimrc!): > the "no_buffers_menu" variable in your init.vim (not ginit.vim!): >
:let no_buffers_menu = 1 :let no_buffers_menu = 1
< NOTE: Switching on syntax highlighting also loads the menu file, thus < NOTE: Switching on syntax highlighting also loads the menu file, thus
disabling the Buffers menu must be done before ":syntax on". disabling the Buffers menu must be done before ":syntax on".
@@ -51,29 +51,26 @@ When the GUI starts up initializations are carried out, in this order:
initializations are skipped. When {gvimrc} is "NONE" no file will be read initializations are skipped. When {gvimrc} is "NONE" no file will be read
for initializations. for initializations.
- For Unix and MS-Windows, if the system gvimrc exists, it is sourced. The - For Unix and MS-Windows, if the system gvimrc exists, it is sourced. The
name of this file is normally "$VIM/gvimrc". You can check this with name of this file is normally "$VIM/ginit.vim". You can check this with
":version". Also see |$VIM|. ":version". Also see |$VIM|.
- The following are tried, and only the first one that exists is used: - The following are tried, and only the first one that exists is used:
- If the GVIMINIT environment variable exists and is not empty, it is - If the GVIMINIT environment variable exists and is not empty, it is
executed as an Ex command. executed as an Ex command.
- If the user gvimrc file exists, it is sourced. The name of this file is - If the user gvimrc file exists, it is sourced. The name of this file is
normally "$HOME/.gvimrc". You can check this with ":version". normally "$XDG_CONFIG_HOME/nvim/ginit.vim" ($XDG_CONFIG_HOME defaults to
- For Win32, when $HOME is not set, "$VIM\_gvimrc" is used. ~/.config).
- When a "_gvimrc" file is not found, ".gvimrc" is tried too. And vice
versa.
The name of the first file found is stored in $MYGVIMRC, unless it was The name of the first file found is stored in $MYGVIMRC, unless it was
already set. already set.
- If the 'exrc' option is set (which is NOT the default) the file ./.gvimrc - If the 'exrc' option is set (which is NOT the default) the file ./.ngvimrc
is sourced, if it exists and isn't the same file as the system or user is sourced, if it exists and isn't the same file as the system or user
gvimrc file. If this file is not owned by you, some security restrictions gvimrc file. If this file is not owned by you, some security restrictions
apply. When ".gvimrc" is not found, "_gvimrc" is tried too. For Macintosh apply. When ".ngvimrc" is not found, "_ngvimrc" is tried too.
and DOS/Win32 "_gvimrc" is tried first.
NOTE: All but the first one are not carried out if Vim was started with NOTE: All but the first one are not carried out if Vim was started with
"-u NONE" and no "-U" argument was given, or when started with "-U NONE". "-u NONE" and no "-U" argument was given, or when started with "-U NONE".
All this happens AFTER the normal Vim initializations, like reading your All this happens AFTER the normal Vim initializations, like reading your
.vimrc file. See |initialization|. vimrc file. See |initialization|.
But the GUI window is only opened after all the initializations have been But the GUI window is only opened after all the initializations have been
carried out. If you want some commands to be executed just after opening the carried out. If you want some commands to be executed just after opening the
GUI window, use the |GUIEnter| autocommand event. Example: > GUI window, use the |GUIEnter| autocommand event. Example: >
@@ -84,9 +81,8 @@ and initialize other things that you may want to set up differently from the
terminal version. terminal version.
Recommended place for your personal GUI initializations: Recommended place for your personal GUI initializations:
Unix $HOME/.gvimrc or $HOME/.vim/gvimrc Unix $XDG_CONFIG_HOME/.config/nvim/ginit.vim
MS-DOS and Win32 $HOME/_gvimrc, $HOME/vimfiles/gvimrc (default for $XDG_CONFIG_HOME is ~/.config)
or $VIM/_gvimrc
The personal initialization files are searched in the order specified above The personal initialization files are searched in the order specified above
and only the first one that is found is read. and only the first one that is found is read.
@@ -464,7 +460,7 @@ The default menus are read from the file "$VIMRUNTIME/menu.vim". See
Starting off with the default set is a good idea. You can add more items, or, Starting off with the default set is a good idea. You can add more items, or,
if you don't like the defaults at all, start with removing all menus if you don't like the defaults at all, start with removing all menus
|:unmenu-all|. You can also avoid the default menus being loaded by adding |:unmenu-all|. You can also avoid the default menus being loaded by adding
this line to your .vimrc file (NOT your .gvimrc file!): > this line to your vimrc file (NOT your gvimrc file!): >
:let did_install_default_menus = 1 :let did_install_default_menus = 1
If you also want to avoid the Syntax menu: > If you also want to avoid the Syntax menu: >
:let did_install_syntax_menu = 1 :let did_install_syntax_menu = 1
@@ -479,7 +475,7 @@ Although this documentation is in the GUI section, you can actually use menus
in console mode too. You will have to load |menu.vim| explicitly then, it is in console mode too. You will have to load |menu.vim| explicitly then, it is
not done by default. You can use the |:emenu| command and command-line not done by default. You can use the |:emenu| command and command-line
completion with 'wildmenu' to access the menu entries almost like a real menu completion with 'wildmenu' to access the menu entries almost like a real menu
system. To do this, put these commands in your .vimrc file: > system. To do this, put these commands in your vimrc file: >
:source $VIMRUNTIME/menu.vim :source $VIMRUNTIME/menu.vim
:set wildmenu :set wildmenu
:set cpo-=< :set cpo-=<

View File

@@ -316,7 +316,7 @@ When referring to a Vim option in the help file, place the option name between
two single quotes, eg. 'statusline' two single quotes, eg. 'statusline'
When referring to any other technical term, such as a filename or function When referring to any other technical term, such as a filename or function
parameter, surround it in backticks (`), eg. `~/.path/to/nvimrc`. parameter, surround it in backticks (`), eg. `~/.path/to/init.vim`.
HIGHLIGHTING HIGHLIGHTING

View File

@@ -241,8 +241,8 @@ through your tags file(s).
3. Cscope options *cscope-options* 3. Cscope options *cscope-options*
Use the |:set| command to set all cscope options. Ideally, you would do Use the |:set| command to set all cscope options. Ideally, you would do
this in one of your startup files (e.g., .vimrc). Some cscope related this in one of your startup files (e.g., vimrc). Some cscope related
variables are only valid within |.vimrc|. Setting them after vim has variables are only valid within |init.vim|. Setting them after vim has
started will have no effect! started will have no effect!
*cscopeprg* *csprg* *cscopeprg* *csprg*
@@ -292,10 +292,10 @@ Examples: >
*cscopeverbose* *csverb* *cscopeverbose* *csverb*
If 'cscopeverbose' is not set (the default), messages will not be printed If 'cscopeverbose' is not set (the default), messages will not be printed
indicating success or failure when adding a cscope database. Ideally, you indicating success or failure when adding a cscope database. Ideally, you
should reset this option in your |.vimrc| before adding any cscope databases, should reset this option in your |init.vim| before adding any cscope
and after adding them, set it. From then on, when you add more databases databases, and after adding them, set it. From then on, when you add more
within Vim, you will get a (hopefully) useful message should the database fail databases within Vim, you will get a (hopefully) useful message should the
to be added. Examples: > database fail to be added. Examples: >
:set csverb :set csverb
:set nocsverb :set nocsverb
< <
@@ -317,7 +317,7 @@ refer to the cscope man page for more details.
Assuming you have a cscope database, you need to "add" the database to Vim. Assuming you have a cscope database, you need to "add" the database to Vim.
This establishes a cscope "connection" and makes it available for Vim to use. This establishes a cscope "connection" and makes it available for Vim to use.
You can do this in your .vimrc file, or you can do it manually after starting You can do this in your vimrc file, or you can do it manually after starting
vim. For example, to add the cscope database "cscope.out", you would do: vim. For example, to add the cscope database "cscope.out", you would do:
:cs add cscope.out :cs add cscope.out
@@ -366,7 +366,7 @@ is not configurable (e.g., you can't do a tselect instead).
============================================================================== ==============================================================================
6. Suggested usage *cscope-suggestions* 6. Suggested usage *cscope-suggestions*
Put these entries in your .vimrc (adjust the pathname accordingly to your Put these entries in your vimrc (adjust the pathname accordingly to your
setup): > setup): >
if has("cscope") if has("cscope")

View File

@@ -718,7 +718,7 @@ also left unindented because continue statements are also used for purposes
other than ending a do loop. Programs such as Tidy can convert structured other than ending a do loop. Programs such as Tidy can convert structured
do/continue loops to the do/enddo form. Do loops of the do/enddo variety can do/continue loops to the do/enddo form. Do loops of the do/enddo variety can
be indented. If you use only structured loops of the do/enddo form, you should be indented. If you use only structured loops of the do/enddo form, you should
declare this by setting the fortran_do_enddo variable in your .vimrc as declare this by setting the fortran_do_enddo variable in your vimrc as
follows > follows >
let fortran_do_enddo=1 let fortran_do_enddo=1
@@ -737,7 +737,7 @@ The indenting of program units (subroutines, functions, modules, and program
blocks) is enabled by default but can be suppressed if a lighter, screen-width blocks) is enabled by default but can be suppressed if a lighter, screen-width
preserving indent style is desired. To suppress the indenting of program preserving indent style is desired. To suppress the indenting of program
units for all fortran files set the global fortran_indent_less variable in units for all fortran files set the global fortran_indent_less variable in
your .vimrc as follows > your vimrc as follows >
let fortran_indent_less=1 let fortran_indent_less=1
@@ -969,7 +969,7 @@ VERILOG *ft-verilog-indent*
General block statements such as if, for, case, always, initial, function, General block statements such as if, for, case, always, initial, function,
specify and begin, etc., are indented. The module block statements (first specify and begin, etc., are indented. The module block statements (first
level blocks) are not indented by default. you can turn on the indent with level blocks) are not indented by default. you can turn on the indent with
setting a variable in the .vimrc as follows: > setting a variable in the vimrc as follows: >
let b:verilog_indent_modules = 1 let b:verilog_indent_modules = 1
@@ -1017,7 +1017,7 @@ To turn this off, add >
let g:vhdl_indent_genportmap = 0 let g:vhdl_indent_genportmap = 0
to the .vimrc file, which causes the previous alignment example to change: > to the vimrc file, which causes the previous alignment example to change: >
ENTITY sync IS ENTITY sync IS
PORT ( PORT (
@@ -1041,7 +1041,7 @@ To turn this off, add >
let g:vhdl_indent_rhsassign = 0 let g:vhdl_indent_rhsassign = 0
to the .vimrc file, which causes the previous alignment example to change: > to the vimrc file, which causes the previous alignment example to change: >
sig_out <= (bus_a(1) AND sig_out <= (bus_a(1) AND
(sig_b OR sig_c)) OR (sig_b OR sig_c)) OR

View File

@@ -1257,9 +1257,9 @@ A compiled .exe for MS-Windows can be found at:
If you want to complete system functions you can do something like this. Use If you want to complete system functions you can do something like this. Use
ctags to generate a tags file for all the system header files: > ctags to generate a tags file for all the system header files: >
% ctags -R -f ~/.vim/systags /usr/include /usr/local/include % ctags -R -f ~/.config/nvim/systags /usr/include /usr/local/include
In your vimrc file add this tags file to the 'tags' option: > In your vimrc file add this tags file to the 'tags' option: >
set tags+=~/.vim/systags set tags+=~/.config/nvim/systags
When using CTRL-X CTRL-O after a name without any "." or "->" it is completed When using CTRL-X CTRL-O after a name without any "." or "->" it is completed
from the tags file directly. This works for any identifier, also function from the tags file directly. This works for any identifier, also function
@@ -1459,7 +1459,7 @@ minimal language-sensitive completion.
To enable syntax code completion you can run: > To enable syntax code completion you can run: >
setlocal omnifunc=syntaxcomplete#Complete setlocal omnifunc=syntaxcomplete#Complete
You can automate this by placing the following in your |.vimrc| (after any You can automate this by placing the following in your |init.vim| (after any
":filetype" command): > ":filetype" command): >
if has("autocmd") && exists("+omnifunc") if has("autocmd") && exists("+omnifunc")
autocmd Filetype * autocmd Filetype *

View File

@@ -435,7 +435,7 @@ last defined. Example: >
:verbose map <C-W>* :verbose map <C-W>*
n <C-W>* * <C-W><C-S>* n <C-W>* * <C-W><C-S>*
Last set from /home/abcd/.vimrc Last set from ~/.config/nvim/init.vim
See |:verbose-cmd| for more information. See |:verbose-cmd| for more information.
@@ -1046,7 +1046,7 @@ You type: ab esc ^V^V^V^V^V^[
You see: ab esc ^V^V^[ You see: ab esc ^V^V^[
The command-line contains two actual ^Vs before the ^[. This is The command-line contains two actual ^Vs before the ^[. This is
how it should appear in your .exrc file, if you choose to go that how it should appear in your vimrc file, if you choose to go that
route. The first ^V is there to quote the second ^V; the :ab route. The first ^V is there to quote the second ^V; the :ab
command uses ^V as its own quote character, so you can include quoted command uses ^V as its own quote character, so you can include quoted
whitespace or the | character in the abbreviation. The :ab command whitespace or the | character in the abbreviation. The :ab command

View File

@@ -222,7 +222,7 @@ To use a locale in Vim only, use the |:language| command: >
:language ko :language ko
Put this in your ~/.vimrc file to use it always. Put this in your |init.vim| file to use it always.
Or specify $LANG when starting Vim: Or specify $LANG when starting Vim:
@@ -684,7 +684,7 @@ that works well you can use this command to see its name: >
:set guifont :set guifont
Then add a command to your |gvimrc| file to set 'guifont': > Then add a command to your |ginit.vim| file to set 'guifont': >
:set guifont=courier_new:h12 :set guifont=courier_new:h12
@@ -928,7 +928,7 @@ Cursor color when IME or XIM is on *CursorIM*
This works in the same way when using XIM. This works in the same way when using XIM.
You can select cursor color when status is on by using highlight group You can select cursor color when status is on by using highlight group
CursorIM. For example, add these lines to your |gvimrc|: > CursorIM. For example, add these lines to your |ginit.vim|: >
if has('multi_byte_ime') if has('multi_byte_ime')
highlight Cursor guifg=NONE guibg=Green highlight Cursor guifg=NONE guibg=Green

View File

@@ -216,7 +216,7 @@ there is no different error message for that.
Command not allowed from exrc/vimrc in current dir or tag search Command not allowed from exrc/vimrc in current dir or tag search
Some commands are not allowed for security reasons. These commands mostly 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 come from a .exrc or .nvimrc file in the current directory, or from a tags
file. Also see 'secure'. file. Also see 'secure'.
*E74* > *E74* >

View File

@@ -149,7 +149,7 @@ If you find a menu translation file for your language with a different name,
create a file in your own runtime directory to load that one. The name of create a file in your own runtime directory to load that one. The name of
that file could be: > that file could be: >
~/.vim/lang/menu_<v:lang>.vim ~/.config/nvim/lang/menu_<v:lang>.vim
Check the 'runtimepath' option for directories which are searched. In that Check the 'runtimepath' option for directories which are searched. In that
file put a command to load the menu file with the other name: > file put a command to load the menu file with the other name: >

View File

@@ -12,8 +12,9 @@ good.
To start the transition, link your previous configuration so Nvim can use To start the transition, link your previous configuration so Nvim can use
it: it:
> >
ln -s ~/.vimrc ~/.nvimrc mkdir -p ${XDG_CONFIG_HOME:=$HOME/.config}
ln -s ~/.vim ~/.nvim ln -s ~/.vim $XDG_CONFIG_HOME/nvim
ln -s ~/.vimrc $XDG_CONFIG_HOME/nvim/init.vim
< <
See |nvim-intro|, especially |nvim-python| and |nvim-clipboard|, for See |nvim-intro|, especially |nvim-python| and |nvim-clipboard|, for
additional software you might need to install to use all of Nvim's features. additional software you might need to install to use all of Nvim's features.

View File

@@ -775,12 +775,12 @@ A jump table for the options with a short description can be found at |Q_op|.
in other cases Vim might not be able to guess the right value. in other cases Vim might not be able to guess the right value.
When starting the GUI, the default value for 'background' will be When starting the GUI, the default value for 'background' will be
"light". When the value is not set in the .gvimrc, and Vim detects "light". When the value is not set in the gvimrc, and Vim detects
that the background is actually quite dark, 'background' is set to that the background is actually quite dark, 'background' is set to
"dark". But this happens only AFTER the .gvimrc file has been read "dark". But this happens only AFTER the gvimrc file has been read
(because the window needs to be opened to find the actual background (because the window needs to be opened to find the actual background
color). To get around this, force the GUI window to be opened by color). To get around this, force the GUI window to be opened by
putting a ":gui" command in the .gvimrc file, before where the value putting a ":gui" command in the gvimrc file, before where the value
of 'background' is used (e.g., before ":syntax on"). of 'background' is used (e.g., before ":syntax on").
For MS-DOS and Windows the default is "dark". For MS-DOS and Windows the default is "dark".
@@ -788,7 +788,7 @@ A jump table for the options with a short description can be found at |Q_op|.
"screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark "screen.linux", "cygwin" or "putty", or $COLORFGBG suggests a dark
background. Otherwise the default is "light". background. Otherwise the default is "light".
Normally this option would be set in the .vimrc file. Possibly Normally this option would be set in the vimrc file. Possibly
depending on the terminal name. Example: > depending on the terminal name. Example: >
:if &term == "pcterm" :if &term == "pcterm"
: set background=dark : set background=dark
@@ -901,8 +901,7 @@ A jump table for the options with a short description can be found at |Q_op|.
again not rename the file. again not rename the file.
*'backupdir'* *'bdir'* *'backupdir'* *'bdir'*
'backupdir' 'bdir' string (default for MS-DOS and Win32: ".,$TEMP,c:/tmp,c:/temp", 'backupdir' 'bdir' string (default "$XDG_DATA_HOME/nvim/backup")
for Unix: ".,~/tmp,~/")
global global
List of directories for the backup file, separated with commas. List of directories for the backup file, separated with commas.
- The backup file will be created in the first directory in the list - The backup file will be created in the first directory in the list
@@ -1479,7 +1478,7 @@ A jump table for the options with a short description can be found at |Q_op|.
initialization and does not have to be set by hand. initialization and does not have to be set by hand.
When Vim is running in the GUI or in a resizable window, setting this When Vim is running in the GUI or in a resizable window, setting this
option will cause the window size to be changed. When you only want option will cause the window size to be changed. When you only want
to use the size for the GUI, put the command in your |gvimrc| file. to use the size for the GUI, put the command in your |ginit.vim| file.
When you set this option and Vim is unable to change the physical When you set this option and Vim is unable to change the physical
number of columns of the display, the display may be messed up. For number of columns of the display, the display may be messed up. For
the GUI it is always possible and Vim limits the number of columns to the GUI it is always possible and Vim limits the number of columns to
@@ -2130,12 +2129,12 @@ A jump table for the options with a short description can be found at |Q_op|.
{char2}. See |digraphs|. {char2}. See |digraphs|.
*'directory'* *'dir'* *'directory'* *'dir'*
'directory' 'dir' string (default for MS-DOS and Win32: ".,$TEMP,c:\tmp,c:\temp", 'directory' 'dir' string (default "$XDG_DATA_HOME/nvim/swap//")
for Unix: ".,~/tmp,/var/tmp,/tmp")
global global
List of directory names for the swap file, separated with commas. List of directory names for the swap file, separated with commas.
- The swap file will be created in the first directory where this is - The swap file will be created in the first directory where this is
possible. possible. If it is not possible in any directory, but last
directory listed in the option does not exist, it is created.
- Empty means that no swap file will be used (recovery is - Empty means that no swap file will be used (recovery is
impossible!). impossible!).
- A directory "." means to put the swap file in the same directory as - A directory "." means to put the swap file in the same directory as
@@ -2351,11 +2350,11 @@ A jump table for the options with a short description can be found at |Q_op|.
*'exrc'* *'ex'* *'noexrc'* *'noex'* *'exrc'* *'ex'* *'noexrc'* *'noex'*
'exrc' 'ex' boolean (default off) 'exrc' 'ex' boolean (default off)
global global
Enables the reading of .vimrc, .exrc and .gvimrc in the current Enables the reading of .nvimrc, .exrc and .ngvimrc in the current
directory. If you switch this option on you should also consider directory. If you switch this option on you should also consider
setting the 'secure' option (see |initialization|). Using a local setting the 'secure' option (see |initialization|). Using a local
.exrc, .vimrc or .gvimrc is a potential security leak, use with care! .exrc, .nvimrc or .ngvimrc is a potential security leak, use with care!
also see |.vimrc| and |gui-init|. also see |init.vim| and |gui-init|.
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
@@ -2531,7 +2530,7 @@ A jump table for the options with a short description can be found at |Q_op|.
When 'binary' is set, the value of 'fileformats' is not used. When 'binary' is set, the value of 'fileformats' is not used.
Note that when Vim starts up with an empty buffer this option is not Note that when Vim starts up with an empty buffer this option is not
used. Set 'fileformat' in your .vimrc instead. used. Set 'fileformat' in your vimrc instead.
For systems with a Dos-like <EOL> (<CR><NL>), when reading files that For systems with a Dos-like <EOL> (<CR><NL>), when reading files that
are ":source"ed and for vimrc files, automatic <EOL> detection may be are ":source"ed and for vimrc files, automatic <EOL> detection may be
@@ -3211,7 +3210,7 @@ A jump table for the options with a short description can be found at |Q_op|.
'm' Menu bar is present. 'm' Menu bar is present.
*'go-M'* *'go-M'*
'M' The system menu "$VIMRUNTIME/menu.vim" is not sourced. Note 'M' The system menu "$VIMRUNTIME/menu.vim" is not sourced. Note
that this flag must be added in the .vimrc file, before that this flag must be added in the vimrc file, before
switching on syntax or filetype recognition (when the |gvimrc| switching on syntax or filetype recognition (when the |gvimrc|
file is sourced the system menu has already been loaded; the file is sourced the system menu has already been loaded; the
":syntax on" and ":filetype on" commands load the menu too). ":syntax on" and ":filetype on" commands load the menu too).
@@ -3835,8 +3834,8 @@ A jump table for the options with a short description can be found at |Q_op|.
option. option.
Careful: If you change this option, it might break expanding Careful: If you change this option, it might break expanding
environment variables. E.g., when '/' is included and Vim tries to environment variables. E.g., when '/' is included and Vim tries to
expand "$HOME/.nvim/shada/main.shada". Maybe you should change expand "$HOME/.local/share/nvim/shada/main.shada". Maybe you should
'iskeyword' instead. change 'iskeyword' instead.
*'iskeyword'* *'isk'* *'iskeyword'* *'isk'*
'iskeyword' 'isk' string (Vim default for 'iskeyword' 'isk' string (Vim default for
@@ -4670,7 +4669,7 @@ A jump table for the options with a short description can be found at |Q_op|.
being set. The same is true for a terminal where Vim handles the being set. The same is true for a terminal where Vim handles the
mouse clicks itself. mouse clicks itself.
This option is reset when starting the GUI. Thus if you set it in This option is reset when starting the GUI. Thus if you set it in
your .vimrc it will work in a terminal, but not in the GUI. Setting your vimrc it will work in a terminal, but not in the GUI. Setting
'paste' in the GUI has side effects: e.g., the Paste toolbar button 'paste' in the GUI has side effects: e.g., the Paste toolbar button
will no longer work in Insert mode, because it uses a mapping. will no longer work in Insert mode, because it uses a mapping.
When the 'paste' option is switched on (also when it was already on): When the 'paste' option is switched on (also when it was already on):
@@ -5010,7 +5009,7 @@ A jump table for the options with a short description can be found at |Q_op|.
happens when executing external commands. happens when executing external commands.
For non-Windows Vim: You can set or reset the 't_ti' and 't_te' For non-Windows Vim: You can set or reset the 't_ti' and 't_te'
options in your .vimrc. To disable restoring: options in your vimrc. To disable restoring:
set t_ti= t_te= set t_ti= t_te=
To enable restoring (for an xterm): To enable restoring (for an xterm):
set t_ti=^[7^[[r^[[?47h t_te=^[[?47l^[8 set t_ti=^[7^[[r^[[?47h t_te=^[[?47l^[8
@@ -5090,14 +5089,23 @@ A jump table for the options with a short description can be found at |Q_op|.
< <
*'runtimepath'* *'rtp'* *vimfiles* *'runtimepath'* *'rtp'* *vimfiles*
'runtimepath' 'rtp' string (default: 'runtimepath' 'rtp' string (default:
Unix: "$HOME/.vim, Unix: "$XDG_CONFIG_HOME/nvim,
$VIM/vimfiles, $XDG_CONFIG_DIRS[1]/nvim,
$VIMRUNTIME, $XDG_CONFIG_DIRS[2]/nvim,
$VIM/vimfiles/after,
$HOME/.vim/after" $XDG_DATA_HOME/nvim,
Macintosh: "$VIM:vimfiles, $XDG_DATA_DIRS[1]/nvim/site,
$VIMRUNTIME, $XDG_DATA_DIRS[2]/nvim/site,
$VIM:vimfiles:after")
$VIMRUNTIME,
$XDG_DATA_DIRS[2]/nvim/site/after,
$XDG_DATA_DIRS[1]/nvim/site/after,
$XDG_DATA_HOME/nvim/after,
$XDG_CONFIG_DIRS[2]/nvim/after,
$XDG_CONFIG_DIRS[1]/nvim/after,
$XDG_CONFIG_HOME/nvim/after")
global global
This is a list of directories which will be searched for runtime This is a list of directories which will be searched for runtime
files: files:
@@ -5120,18 +5128,23 @@ A jump table for the options with a short description can be found at |Q_op|.
And any other file searched for with the |:runtime| command. And any other file searched for with the |:runtime| command.
The defaults for most systems are setup to search five locations: The defaults for most systems are setup to search these locations:
1. In your home directory, for your personal preferences. 1. In your home directory (XDG_CONFIG_HOME defaults to $HOME/.config),
2. In a system-wide Vim directory, for preferences from the system for your personal preferences.
administrator. 2. In directories which must contain configuration files according to
3. In $VIMRUNTIME, for files distributed with Vim. XDG ($XDG_CONFIG_DIRS). This also contains preferences from system
administrator (XDG_CONFIG_DIRS defaults to /etc/xdg).
3. In data home directory, for plugins installed by user.
4. In nvim/site subdirectories for each directory in $XDG_DATA_DIRS.
This is for plugins which were installed by system administrator,
but are not part of the Neovim distribution. XDG_DATA_DIRS defaults
to /usr/local/share/:/usr/share/, so system administrators are
expected to install site plugins to /usr/share/nvim/site.
5. In $VIMRUNTIME, for files distributed with Neovim.
*after-directory* *after-directory*
4. In the "after" directory in the system-wide Vim directory. This is 6, 7, 8, 9. In after/ subdirectories of 1, 2, 3 and 4, with reverse
for the system administrator to overrule or add to the distributed ordering. This is for preferences to overrule or add to the
defaults (rarely needed) distributed defaults or system-wide settings (rarely needed).
5. In the "after" directory in your home directory. This is for
personal preferences to overrule or add to the distributed defaults
or system-wide settings (rarely needed).
Note that, unlike 'path', no wildcards like "**" are allowed. Normal Note that, unlike 'path', no wildcards like "**" are allowed. Normal
wildcards are allowed, but can significantly slow down searching for wildcards are allowed, but can significantly slow down searching for
@@ -5240,12 +5253,12 @@ A jump table for the options with a short description can be found at |Q_op|.
'secure' boolean (default off) 'secure' boolean (default off)
global global
When on, ":autocmd", shell and write commands are not allowed in When on, ":autocmd", shell and write commands are not allowed in
".vimrc" and ".exrc" in the current directory and map commands are ".nvimrc" and ".exrc" in the current directory and map commands are
displayed. Switch it off only if you know that you will not run into displayed. Switch it off only if you know that you will not run into
problems, or when the 'exrc' option is off. On Unix this option is problems, or when the 'exrc' option is off. On Unix this option is
only used if the ".vimrc" or ".exrc" is not owned by you. This can be only used if the ".nvimrc" or ".exrc" is not owned by you. This can be
dangerous if the systems allows users to do a "chown". You better set dangerous if the systems allows users to do a "chown". You better set
'secure' at the end of your ~/.vimrc then. 'secure' at the end of your |init.vim| then.
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
@@ -5502,7 +5515,7 @@ A jump table for the options with a short description can be found at |Q_op|.
default becomes "2>&1| tee". This means that stderr is also included. default becomes "2>&1| tee". This means that stderr is also included.
Before using the 'shell' option a path is removed, thus "/bin/sh" uses Before using the 'shell' option a path is removed, thus "/bin/sh" uses
"sh". "sh".
The initialization of this option is done after reading the ".vimrc" The initialization of this option is done after reading the vimrc
and the other initializations, so that when the 'shell' option is set and the other initializations, so that when the 'shell' option is set
there, the 'shellpipe' option changes automatically, unless it was there, the 'shellpipe' option changes automatically, unless it was
explicitly set before. explicitly set before.
@@ -5548,7 +5561,7 @@ A jump table for the options with a short description can be found at |Q_op|.
For Win32, the Unix checks are done and additionally "cmd" is checked For Win32, the Unix checks are done and additionally "cmd" is checked
for, which makes the default ">%s 2>&1". Also, the same names with for, which makes the default ">%s 2>&1". Also, the same names with
".exe" appended are checked for. ".exe" appended are checked for.
The initialization of this option is done after reading the ".vimrc" The initialization of this option is done after reading the vimrc
and the other initializations, so that when the 'shell' option is set and the other initializations, so that when the 'shell' option is set
there, the 'shellredir' option changes automatically unless it was there, the 'shellredir' option changes automatically unless it was
explicitly set before. explicitly set before.
@@ -6023,7 +6036,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Only one of "best", "double" or "fast" may be used. The others may Only one of "best", "double" or "fast" may be used. The others may
appear several times in any order. Example: > appear several times in any order. Example: >
:set sps=file:~/.vim/sugg,best,expr:MySuggest() :set sps=file:~/.config/nvim/sugg,best,expr:MySuggest()
< <
This option cannot be set from a |modeline| or in the |sandbox|, for This option cannot be set from a |modeline| or in the |sandbox|, for
security reasons. security reasons.
@@ -6198,7 +6211,7 @@ A jump table for the options with a short description can be found at |Q_op|.
Watch out for errors in expressions. They may render Vim unusable! Watch out for errors in expressions. They may render Vim unusable!
If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and If you are stuck, hold down ':' or 'Q' to get a prompt, then quit and
edit your .vimrc or whatever with "vim -u NONE" to get it right. edit your vimrc or whatever with "vim -u NONE" to get it right.
Examples: Examples:
Emulate standard status line with 'ruler' set > Emulate standard status line with 'ruler' set >
@@ -6804,8 +6817,7 @@ A jump table for the options with a short description can be found at |Q_op|.
displayed when 'verbosefile' is set. displayed when 'verbosefile' is set.
*'viewdir'* *'vdir'* *'viewdir'* *'vdir'*
'viewdir' 'vdir' string (default for MS-DOS and Win32: "$VIM/vimfiles/view", 'viewdir' 'vdir' string (default: "$XDG_DATA_HOME/nvim/view")
for Unix: "~/.vim/view")
global global
{not available when compiled without the |+mksession| {not available when compiled without the |+mksession|
feature} feature}

View File

@@ -40,7 +40,7 @@ Setting a map *spec-setting-a-map*
As you should know, you can easily set a map to access any Vim command (or As you should know, you can easily set a map to access any Vim command (or
anything, for that matter). If you don't like the default map of anything, for that matter). If you don't like the default map of
<LocalLeader>c, you may just set up your own key. The following line <LocalLeader>c, you may just set up your own key. The following line
shows you how you could do this in your .vimrc file, mapping the plugin to shows you how you could do this in your vimrc file, mapping the plugin to
the <F5> key: the <F5> key:
au FileType spec map <buffer> <F5> <Plug>SpecChangelog au FileType spec map <buffer> <F5> <Plug>SpecChangelog
@@ -58,7 +58,7 @@ The format string *spec_chglog_format*
----------------- -----------------
You can easily customize how your spec file entry will look like. To do You can easily customize how your spec file entry will look like. To do
this just set the variable "spec_chglog_format" in your .vimrc file like this just set the variable "spec_chglog_format" in your vimrc file like
this: > this: >
let spec_chglog_format = "%a %b %d %Y My Name <my@email.com>" let spec_chglog_format = "%a %b %d %Y My Name <my@email.com>"
@@ -92,7 +92,7 @@ that it may control if the release has been updated after the last
change in the package or not. If you have not updated the package change in the package or not. If you have not updated the package
version or release, it will ask you if it should update the package version or release, it will ask you if it should update the package
release for you. To turn this feature on, just insert the following release for you. To turn this feature on, just insert the following
code in your .vimrc: > code in your vimrc: >
let spec_chglog_release_info = 1 let spec_chglog_release_info = 1

View File

@@ -133,15 +133,17 @@ If there is no error, return zero or an empty string.
The default for non MS-Windows systems is to simply use "lpr" to print the The default for non MS-Windows systems is to simply use "lpr" to print the
file: > file: >
system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice) system(['lpr']
. ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error + (empty(&printdevice)?[]:['-P', &printdevice])
+ [v:fname_in])
. delete(v:fname_in)
+ v:shell_error
On MS-Dos and MS-Windows machines the default is to copy the file to the On MS-Dos and MS-Windows machines the default is to copy the file to the
currently specified printdevice: > currently specified printdevice: >
system('copy' . ' ' . v:fname_in . (&printdevice == '' system(['copy', v:fname_in, empty(&printdevice)?'LPT1':&printdevice])
? ' LPT1:' : (' \"' . &printdevice . '\"'))) . delete(v:fname_in)
. delete(v:fname_in)
If you change this option, using a function is an easy way to avoid having to If you change this option, using a function is an easy way to avoid having to
escape all the spaces. Example: > escape all the spaces. Example: >

View File

@@ -1277,7 +1277,7 @@ Jikes(TM), a source-to-bytecode Java compiler published by IBM Research,
produces simple multi-line error messages. produces simple multi-line error messages.
An 'errorformat' string matching the produced messages is shown below. An 'errorformat' string matching the produced messages is shown below.
The following lines can be placed in the user's |vimrc| to overwrite Vim's The following lines can be placed in the user's |init.vim| to overwrite Vim's
recognized default formats, or see |:set+=| how to install this format recognized default formats, or see |:set+=| how to install this format
additionally to the default. > additionally to the default. >

View File

@@ -548,7 +548,7 @@ In Insert or Command-line mode:
settings to [file] (default: ".exrc"; settings to [file] (default: ".exrc";
use ! to overwrite) use ! to overwrite)
|:mkvimrc| :mkv[imrc][!] [file] |:mkvimrc| :mkv[imrc][!] [file]
same as ":mkexrc", but with default ".vimrc" same as :mkexrc, but with default ".nvimrc"
|:mksession| :mks[ession][!] [file] |:mksession| :mks[ession][!] [file]
like ":mkvimrc", but store current files, like ":mkvimrc", but store current files,
windows, etc. too, to be able to continue windows, etc. too, to be able to continue
@@ -681,7 +681,7 @@ Short explanation of each option: *option-list*
'esckeys' 'ek' recognize function keys in Insert mode 'esckeys' 'ek' recognize function keys in Insert mode
'eventignore' 'ei' autocommand events that are ignored 'eventignore' 'ei' autocommand events that are ignored
'expandtab' 'et' use spaces when <Tab> is inserted 'expandtab' 'et' use spaces when <Tab> is inserted
'exrc' 'ex' read .vimrc and .exrc in the current directory 'exrc' 'ex' read .nvimrc and .exrc in the current directory
'fileencoding' 'fenc' file encoding for multi-byte text 'fileencoding' 'fenc' file encoding for multi-byte text
'fileencodings' 'fencs' automatically detected character encodings 'fileencodings' 'fencs' automatically detected character encodings
'fileformat' 'ff' file format used for file I/O 'fileformat' 'ff' file format used for file I/O

View File

@@ -204,7 +204,7 @@ Colon, USA)
VIM is a joy to use, it is so well thought and practical that I wonder why VIM is a joy to use, it is so well thought and practical that I wonder why
anybody would use visual development tools. VIM is powerful and elegant, it anybody would use visual development tools. VIM is powerful and elegant, it
looks deceptively simple but is almost as complex as a 747 (especially when I looks deceptively simple but is almost as complex as a 747 (especially when I
look at my growing .vimrc), keep up that wonderful job, VIM is a centerpiece look at my growing vimrc), keep up that wonderful job, VIM is a centerpiece
of the free software world. (Louis-David Mitterand, USA) of the free software world. (Louis-David Mitterand, USA)
I cannot believe how great it is to use VIM. I think the guys at work are I cannot believe how great it is to use VIM. I think the guys at work are

View File

@@ -58,7 +58,7 @@ Disadvantages:
message. message.
If you want to put swap files in a fixed place, put a command resembling the If you want to put swap files in a fixed place, put a command resembling the
following ones in your .vimrc: following ones in your vimrc:
:set dir=~/tmp (for Unix) :set dir=~/tmp (for Unix)
:set dir=c:\\tmp (for MS-DOS and Win32) :set dir=c:\\tmp (for MS-DOS and Win32)
This is also very handy when editing files on floppy. Of course you will have This is also very handy when editing files on floppy. Of course you will have

View File

@@ -93,8 +93,9 @@ approach with |rpcnotify()|, meaning return values or exceptions raised in the
handler function are ignored. handler function are ignored.
To test the above plugin, it must be saved in "rplugin/python" in a To test the above plugin, it must be saved in "rplugin/python" in a
'runtimepath' directory (~/.nvim/rplugin/python/limit.py for example). Then, 'runtimepath' directory (~/.config/nvim/rplugin/python/limit.py for example).
the remote plugin manifest must be generated with `:UpdateRemotePlugins`. Then, the remote plugin manifest must be generated with
`:UpdateRemotePlugins`.
============================================================================== ==============================================================================
4. Remote plugin manifest *remote-plugin-manifest* 4. Remote plugin manifest *remote-plugin-manifest*

View File

@@ -274,8 +274,8 @@ nested as deep as the number of files that can be opened at one time (about
You can use the "<sfile>" string (literally, this is not a special key) inside You can use the "<sfile>" string (literally, this is not a special key) inside
of the sourced file, in places where a file name is expected. It will be of the sourced file, in places where a file name is expected. It will be
replaced by the file name of the sourced file. For example, if you have a replaced by the file name of the sourced file. For example, if you have a
"other.vimrc" file in the same directory as your ".vimrc" file, you can source "other.vimrc" file in the same directory as your |init.vim| file, you can
it from your ".vimrc" file with this command: > source it from your |init.vim| file with this command: >
:source <sfile>:h/other.vimrc :source <sfile>:h/other.vimrc
In script files terminal-dependent key codes are represented by In script files terminal-dependent key codes are represented by
@@ -482,7 +482,7 @@ DEFINING BREAKPOINTS
:breaka[dd] file [lnum] {name} :breaka[dd] file [lnum] {name}
Set a breakpoint in a sourced file. Example: > Set a breakpoint in a sourced file. Example: >
:breakadd file 43 .vimrc :breakadd file 43 init.vim
:breaka[dd] here :breaka[dd] here
Set a breakpoint in the current line of the current file. Set a breakpoint in the current line of the current file.

View File

@@ -307,26 +307,26 @@ Exceptions:
spell file is used. spell file is used.
For example, with these values: For example, with these values:
'runtimepath' is "~/.vim,/usr/share/vim70,~/.vim/after" 'runtimepath' is "~/.config/nvim,/usr/share/vim70,~/.config/nvim/after"
'encoding' is "iso-8859-2" 'encoding' is "iso-8859-2"
'spelllang' is "pl" 'spelllang' is "pl"
Vim will look for: Vim will look for:
1. ~/.vim/spell/pl.iso-8859-2.spl 1. ~/.config/nvim/spell/pl.iso-8859-2.spl
2. /usr/share/vim70/spell/pl.iso-8859-2.spl 2. /usr/share/vim70/spell/pl.iso-8859-2.spl
3. ~/.vim/spell/pl.iso-8859-2.add.spl 3. ~/.config/nvim/spell/pl.iso-8859-2.add.spl
4. /usr/share/vim70/spell/pl.iso-8859-2.add.spl 4. /usr/share/vim70/spell/pl.iso-8859-2.add.spl
5. ~/.vim/after/spell/pl.iso-8859-2.add.spl 5. ~/.config/nvim/after/spell/pl.iso-8859-2.add.spl
This assumes 1. is not found and 2. is found. This assumes 1. is not found and 2. is found.
If 'encoding' is "latin1" Vim will look for: If 'encoding' is "latin1" Vim will look for:
1. ~/.vim/spell/pl.latin1.spl 1. ~/.config/nvim/spell/pl.latin1.spl
2. /usr/share/vim70/spell/pl.latin1.spl 2. /usr/share/vim70/spell/pl.latin1.spl
3. ~/.vim/after/spell/pl.latin1.spl 3. ~/.config/nvim/after/spell/pl.latin1.spl
4. ~/.vim/spell/pl.ascii.spl 4. ~/.config/nvim/spell/pl.ascii.spl
5. /usr/share/vim70/spell/pl.ascii.spl 5. /usr/share/vim70/spell/pl.ascii.spl
6. ~/.vim/after/spell/pl.ascii.spl 6. ~/.config/nvim/after/spell/pl.ascii.spl
This assumes none of them are found (Polish doesn't make sense when leaving This assumes none of them are found (Polish doesn't make sense when leaving
out the non-ASCII characters). out the non-ASCII characters).

View File

@@ -106,7 +106,7 @@ argument.
--startuptime {fname} *--startuptime* --startuptime {fname} *--startuptime*
During startup write timing messages to the file {fname}. During startup write timing messages to the file {fname}.
This can be used to find out where time is spent while loading This can be used to find out where time is spent while loading
your .vimrc, plugins and opening the first file. your |init.vim|, plugins and opening the first file.
When {fname} already exists new messages are appended. When {fname} already exists new messages are appended.
(Only available when compiled with the |+startuptime| (Only available when compiled with the |+startuptime|
feature). feature).
@@ -232,8 +232,8 @@ argument.
-b Binary mode. File I/O will only recognize <NL> to separate -b Binary mode. File I/O will only recognize <NL> to separate
lines. The 'expandtab' option will be reset. The 'textwidth' lines. The 'expandtab' option will be reset. The 'textwidth'
option is set to 0. 'modeline' is reset. The 'binary' option option is set to 0. 'modeline' is reset. The 'binary' option
is set. This is done after reading the vimrc/exrc files but is set. This is done after reading the init.vim/exrc files
before reading any file in the arglist. See also but before reading any file in the arglist. See also
|edit-binary|. |edit-binary|.
*-l* *-l*
@@ -312,11 +312,11 @@ argument.
be used to start Vim in a special mode, with special be used to start Vim in a special mode, with special
mappings and settings. A shell alias can be used to make mappings and settings. A shell alias can be used to make
this easy to use. For example: > this easy to use. For example: >
alias vimc vim -u ~/.c_vimrc !* alias vimc vim -u ~/.config/nvim/c_init.vim !*
< Also consider using autocommands; see |autocommand|. < Also consider using autocommands; see |autocommand|.
When {vimrc} is equal to "NONE" (all uppercase), all When {vimrc} is equal to "NONE" (all uppercase), all
initializations from files and environment variables are initializations from files and environment variables are
skipped, including reading the |gvimrc| file when the GUI skipped, including reading the |ginit.vim| file when the GUI
starts. Loading plugins is also skipped. starts. Loading plugins is also skipped.
When {vimrc} is equal to "NORC" (all uppercase), this has the When {vimrc} is equal to "NORC" (all uppercase), this has the
same effect as "NONE", but loading plugins is not skipped. same effect as "NONE", but loading plugins is not skipped.
@@ -373,24 +373,24 @@ accordingly. Vim proceeds in this order:
3. Execute Ex commands, from environment variables and/or files 3. Execute Ex commands, from environment variables and/or files
An environment variable is read as one Ex command line, where multiple An environment variable is read as one Ex command line, where multiple
commands must be separated with '|' or "<NL>". commands must be separated with '|' or "<NL>".
*vimrc* *exrc* *init.vim* *vimrc* *exrc*
A file that contains initialization commands is called a "vimrc" file. A file that contains initialization commands is called a "vimrc" file.
Each line in a vimrc file is executed as an Ex command line. It is Each line in a vimrc file is executed as an Ex command line. It is
sometimes also referred to as "exrc" file. They are the same type of sometimes also referred to as "exrc" file. They are the same type of
file, but "exrc" is what Vi always used, "vimrc" is a Vim specific file, but "exrc" is what Vi always used, "vimrc" is a Vim specific
name. Also see |vimrc-intro|. name, "init.vim" is Neovim specific location for vimrc file. Also see
|vimrc-intro|.
Places for your personal initializations: Places for your personal initializations:
Unix $HOME/.vimrc or $HOME/.vim/vimrc Unix $XDG_CONFIG_HOME/nvim/init.vim
MS-Windows $HOME/_vimrc, $HOME/vimfiles/vimrc (default for $XDG_CONFIG_HOME is ~/.config)
or $VIM/_vimrc
The files are searched in the order specified above and only the first The files are searched in the order specified above and only the first
one that is found is read. one that is found is read.
RECOMMENDATION: Put all your Vim configuration stuff in the RECOMMENDATION: Put all your Vim configuration stuff in the
$HOME/.vim/ directory ($HOME/vimfiles/ for MS-Windows). That makes it $HOME/.config/nvim/ directory. That makes it easy to copy it to
easy to copy it to another system. another system.
If Vim was started with "-u filename", the file "filename" is used. If Vim was started with "-u filename", the file "filename" is used.
All following initializations until 4. are skipped. $MYVIMRC is not All following initializations until 4. are skipped. $MYVIMRC is not
@@ -407,39 +407,26 @@ accordingly. Vim proceeds in this order:
":version" command. Mostly it's "$VIM/vimrc". ":version" command. Mostly it's "$VIM/vimrc".
For the Macintosh the $VIMRUNTIME/macmap.vim is read. For the Macintosh the $VIMRUNTIME/macmap.vim is read.
*VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc* *$MYVIMRC* *VIMINIT* *EXINIT* *$MYVIMRC*
b. Four places are searched for initializations. The first that exists b. Four places are searched for initializations. The first that exists
is used, the others are ignored. The $MYVIMRC environment variable is is used, the others are ignored. The $MYVIMRC environment variable is
set to the file that was first found, unless $MYVIMRC was already set set to the file that was first found, unless $MYVIMRC was already set
and when using VIMINIT. and when using VIMINIT.
- The environment variable VIMINIT - The environment variable VIMINIT
The value of $VIMINIT is used as an Ex command line. The value of $VIMINIT is used as an Ex command line.
- The user vimrc file(s): - The user vimrc file: $XDG_CONFIG_HOME/nvim/init.vim.
"$HOME/.vimrc" (for Unix) - Other vimrc file: {xdg_config_dir}/nvim/init.vim where
"$HOME/.vim/vimrc" (for Unix) {xdg_config_dir} is one of the directories in $XDG_CONFIG_DIRS.
"$HOME/_vimrc" (for Win32)
"$HOME/vimfiles/vimrc" (for Win32)
"$VIM/_vimrc" (for Win32)
Note: For Unix, when ".vimrc" does not exist,
"_vimrc" is also tried, in case an MS-DOS compatible file
system is used. For MS-DOS and Win32 ".vimrc" is checked
after "_vimrc", in case long file names are used.
Note: For MS-DOS and Win32, "$HOME" is checked first. If no
"_vimrc" or ".vimrc" is found there, "$VIM" is tried.
See |$VIM| for when $VIM is not set.
- The environment variable EXINIT. - The environment variable EXINIT.
The value of $EXINIT is used as an Ex command line. The value of $EXINIT is used as an Ex command line.
- The user exrc file(s). Same as for the user vimrc file, but with
"vimrc" replaced by "exrc". But only one of ".exrc" and "_exrc" is
used, depending on the system.
c. If the 'exrc' option is on (which is not the default), the current c. If the 'exrc' option is on (which is not the default), the current
directory is searched for three files. The first that exists is used, directory is searched for three files. The first that exists is used,
the others are ignored. the others are ignored.
- The file ".vimrc" (for Unix) - The file ".nvimrc" (for Unix)
"_vimrc" (for Win32) "_nvimrc" (for Win32)
- The file "_vimrc" (for Unix) - The file "_nvimrc" (for Unix)
".vimrc" (for Win32) ".nvimrc" (for Win32)
- The file ".exrc" (for Unix) - The file ".exrc" (for Unix)
"_exrc" (for Win32) "_exrc" (for Win32)
@@ -504,12 +491,12 @@ Some hints on using initializations:
Standard setup: Standard setup:
Create a vimrc file to set the default settings and mappings for all your edit Create a vimrc file to set the default settings and mappings for all your edit
sessions. Put it in a place so that it will be found by 3b: sessions. Put it in a place so that it will be found by 3b:
~/.vimrc (Unix) ~/.config/nvim/init.vim (Unix)
$VIM\_vimrc (MS-DOS and Win32) ~/AppData/Local/nvim/init.vim (Win32)
Local setup: Local setup:
Put all commands that you need for editing a specific directory only into a Put all commands that you need for editing a specific directory only into a
vimrc file and place it in that directory under the name ".vimrc" ("_vimrc" vimrc file and place it in that directory under the name ".nvimrc" ("_nvimrc"
for MS-DOS and Win32). NOTE: To make Vim look for these special files you for MS-DOS and Win32). NOTE: To make Vim look for these special files you
have to turn on the option 'exrc'. See |trojan-horse| too. have to turn on the option 'exrc'. See |trojan-horse| too.
@@ -517,7 +504,9 @@ System setup:
This only applies if you are managing a Unix system with several users and This only applies if you are managing a Unix system with several users and
want to set the defaults for all users. Create a vimrc file with commands want to set the defaults for all users. Create a vimrc file with commands
for default settings and mappings and put it in the place that is given with for default settings and mappings and put it in the place that is given with
the ":version" command. the ":version" command. NOTE: System vimrc file needs specific compilation
options (one needs to define SYS_VIMRC_FILE macros). If :version command does
not show anything like this, consider contacting the nvim package maintainer.
Saving the current state of Vim to a file: Saving the current state of Vim to a file:
Whenever you have changed values of options or when you have created a Whenever you have changed values of options or when you have created a
@@ -526,7 +515,8 @@ mapping, then you may want to save them in a vimrc file for later use. See
Avoiding setup problems for Vi users: Avoiding setup problems for Vi users:
Vi uses the variable EXINIT and the file "~/.exrc". So if you do not want to Vi uses the variable EXINIT and the file "~/.exrc". So if you do not want to
interfere with Vi, then use the variable VIMINIT and the file "vimrc" instead. interfere with Vi, then use the variable VIMINIT and the file init.vim
instead.
MS-DOS line separators: MS-DOS line separators:
On MS-DOS-like systems (MS-DOS itself and Win32), Vim assumes that all On MS-DOS-like systems (MS-DOS itself and Win32), Vim assumes that all
@@ -538,7 +528,7 @@ The $MYVIMRC or $MYGVIMRC file will be set to the first found vimrc and/or
gvimrc file. gvimrc file.
Avoiding trojan horses: *trojan-horse* Avoiding trojan horses: *trojan-horse*
While reading the "vimrc" or the "exrc" file in the current directory, some 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. 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 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 would be possible that you accidentally use a vimrc or tags file that somebody
@@ -547,8 +537,8 @@ 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. 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 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 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 in the global exrc or vimrc file. This is not possible in vimrc or
"exrc" in the current directory, for obvious reasons. exrc in the current directory, for obvious reasons.
On Unix systems, this only happens if you are not the owner of the 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 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 file, it will be owned by you. You won't have the security protection. Check
@@ -603,7 +593,7 @@ though.
4. $VIM and $VIMRUNTIME 4. $VIM and $VIMRUNTIME
*$VIM* *$VIM*
The environment variable "$VIM" is used to locate various user files for Vim, The environment variable "$VIM" is used to locate various user files for Vim,
such as the user startup script ".vimrc". This depends on the system, see such as the user startup script |init.vim|. This depends on the system, see
|startup|. |startup|.
To avoid the need for every user to set the $VIM environment variable, Vim To avoid the need for every user to set the $VIM environment variable, Vim
@@ -712,7 +702,7 @@ vimrc file.
directory). directory).
*:mkv* *:mkvimrc* *:mkv* *:mkvimrc*
:mkv[imrc][!] [file] Like ":mkexrc", but the default is ".vimrc" in the :mkv[imrc][!] [file] Like ":mkexrc", but the default is ".nvimrc" in the
current directory. The ":version" command is also current directory. The ":version" command is also
written to the file. written to the file.
@@ -731,13 +721,13 @@ can be used with different terminals.
Only global mappings are stored, not mappings local to a buffer. Only global mappings are stored, not mappings local to a buffer.
A common method is to use a default ".vimrc" file, make some modifications A common method is to use a default |init.vim| file, make some modifications
with ":map" and ":set" commands and write the modified file. First read the 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 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 the settings and then save them in the current directory with ":mkvimrc!". If
you want to make this file your default .vimrc, move it to your home directory you want to make this file your default |init.vim|, move it to
(on Unix) or $VIM directory (MS-DOS). You could also use $XDG_CONFIG_HOME/nvim. You could also use autocommands |autocommand| and/or
autocommands |autocommand| and/or modelines |modeline|. modelines |modeline|.
*vimrc-option-example* *vimrc-option-example*
If you only want to add a single option setting to your vimrc, you can use If you only want to add a single option setting to your vimrc, you can use
@@ -1057,10 +1047,8 @@ even if other entries (with known name/type/etc) are merged. |shada-merging|
SHADA FILE NAME *shada-file-name* SHADA FILE NAME *shada-file-name*
- The default name of the ShaDa file is "$HOME/.nvim/shada/main.shada" for - The default name of the ShaDa file is "$XDG_DATA_HOME/nvim/shada/main.shada"
Unix, "$HOME\_nvim\shada\main.shada" for MS-DOS and Win32. For the last for Unix. Default for $XDG_DATA_HOME is ~/.local/share.
two, when $HOME is not set, "$VIM\_nvim\shada\main.shada" is used. When
$VIM is also not set, "c:\_nvim\shada\main.shada" is used.
- The 'n' flag in the 'shada' option can be used to specify another ShaDa - The 'n' flag in the 'shada' option can be used to specify another ShaDa
file name |'shada'|. file name |'shada'|.
- The "-i" Vim argument can be used to set another file name, |-i|. When the - The "-i" Vim argument can be used to set another file name, |-i|. When the
@@ -1103,7 +1091,7 @@ 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 "~/.my.shada" which could contain certain settings that you always want when
you first start Neovim. For example, you can preload registers with you first start Neovim. For example, you can preload registers with
particular data, or put certain commands in the command line history. A line particular data, or put certain commands in the command line history. A line
in your .nvimrc file like > in your |init.vim| file like >
:rshada! ~/.my.shada :rshada! ~/.my.shada
can be used to load this information. You could even have different 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 files for different types of files (e.g., C code) and load them based on the
@@ -1167,7 +1155,8 @@ running) you have additional options:
empty, marks for up to 100 files will be written. empty, marks for up to 100 files will be written.
When you get error "E138: All .tmp.X files exist, When you get error "E138: All .tmp.X files exist,
cannot write ShaDa file!" check that no old temp files cannot write ShaDa file!" check that no old temp files
were left behind (e.g. ~/.nvim/shada/main.shada.tmp*). were left behind (e.g.
~/.local/share/nvim/shada/main.shada.tmp*).
Note: Executing :wshada will reset all |'quote| marks. Note: Executing :wshada will reset all |'quote| marks.

View File

@@ -143,14 +143,14 @@ automatically with ":syntax enable", do this:
1. Create your user runtime directory. You would normally use the first item 1. Create your user runtime directory. You would normally use the first item
of the 'runtimepath' option. Example for Unix: > of the 'runtimepath' option. Example for Unix: >
mkdir ~/.vim mkdir ~/.config/nvim
2. Create a directory in there called "syntax". For Unix: > 2. Create a directory in there called "syntax". For Unix: >
mkdir ~/.vim/syntax mkdir ~/.config/nvim/syntax
3. Write the Vim syntax file. Or download one from the internet. Then write 3. Write the Vim syntax file. Or download one from the internet. Then write
it in your syntax directory. For example, for the "mine" syntax: > it in your syntax directory. For example, for the "mine" syntax: >
:w ~/.vim/syntax/mine.vim :w ~/.config/nvim/syntax/mine.vim
Now you can start using your syntax file manually: > Now you can start using your syntax file manually: >
:set syntax=mine :set syntax=mine
@@ -170,8 +170,8 @@ add a few items or change the highlighting, follow these steps:
1. Create your user directory from 'runtimepath', see above. 1. Create your user directory from 'runtimepath', see above.
2. Create a directory in there called "after/syntax". For Unix: > 2. Create a directory in there called "after/syntax". For Unix: >
mkdir ~/.vim/after mkdir ~/.config/nvim/after
mkdir ~/.vim/after/syntax mkdir ~/.config/nvim/after/syntax
3. Write a Vim script that contains the commands you want to use. For 3. Write a Vim script that contains the commands you want to use. For
example, to change the colors for the C syntax: > example, to change the colors for the C syntax: >
@@ -179,15 +179,15 @@ add a few items or change the highlighting, follow these steps:
4. Write that file in the "after/syntax" directory. Use the name of the 4. Write that file in the "after/syntax" directory. Use the name of the
syntax, with ".vim" added. For our C syntax: > syntax, with ".vim" added. For our C syntax: >
:w ~/.vim/after/syntax/c.vim :w ~/.config/nvim/after/syntax/c.vim
That's it. The next time you edit a C file the Comment color will be That's it. The next time you edit a C file the Comment color will be
different. You don't even have to restart Vim. different. You don't even have to restart Vim.
If you have multiple files, you can use the filetype as the directory name. If you have multiple files, you can use the filetype as the directory name.
All the "*.vim" files in this directory will be used, for example: All the "*.vim" files in this directory will be used, for example:
~/.vim/after/syntax/c/one.vim ~/.config/nvim/after/syntax/c/one.vim
~/.vim/after/syntax/c/two.vim ~/.config/nvim/after/syntax/c/two.vim
REPLACING AN EXISTING SYNTAX FILE *mysyntaxfile-replace* REPLACING AN EXISTING SYNTAX FILE *mysyntaxfile-replace*
@@ -471,7 +471,7 @@ moves through the buffer, switches windows, and the like: >
vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c vim -E -s -c "let g:html_no_progress=1" -c "syntax on" -c "set ft=c" -c "runtime syntax/2html.vim" -cwqa myfile.c
< <
Note that the -s flag prevents loading your .vimrc and any plugins, so you Note that the -s flag prevents loading your vimrc and any plugins, so you
need to explicitly source/enable anything that will affect the HTML need to explicitly source/enable anything that will affect the HTML
conversion. See |-E| and |-s-ex| for details. It is probably best to create a conversion. See |-E| and |-s-ex| for details. It is probably best to create a
script to replace all the -c commands and use it with the -u flag instead of script to replace all the -c commands and use it with the -u flag instead of
@@ -874,13 +874,13 @@ for both 3 GL and 4 GL programming. Large number of standard defines/constants
are supported. are supported.
Some special violation of coding standards will be signalled when one specify Some special violation of coding standards will be signalled when one specify
in ones |.vimrc|: > in ones |init.vim|: >
let baan_code_stds=1 let baan_code_stds=1
*baan-folding* *baan-folding*
Syntax folding can be enabled at various levels through the variables Syntax folding can be enabled at various levels through the variables
mentioned below (Set those in your |.vimrc|). The more complex folding on mentioned below (Set those in your |init.vim|). The more complex folding on
source blocks and SQL can be CPU intensive. source blocks and SQL can be CPU intensive.
To allow any folding and enable folding at function level use: > To allow any folding and enable folding at function level use: >
@@ -894,8 +894,8 @@ SELECTEMPTY, ... The indentation preceding the begin/end keywords has to
match (spaces are not considered equal to a tab). > match (spaces are not considered equal to a tab). >
let baan_fold_sql=1 let baan_fold_sql=1
Note: Block folding can result in many small folds. It is suggested to |:set| Note: Block folding can result in many small folds. It is suggested to |:set|
the options 'foldminlines' and 'foldnestmax' in |.vimrc| or use |:setlocal| in the options 'foldminlines' and 'foldnestmax' in |init.vim| or use |:setlocal|
.../after/syntax/baan.vim (see |after-directory|). Eg: > in .../after/syntax/baan.vim (see |after-directory|). Eg: >
set foldminlines=5 set foldminlines=5
set foldnestmax=6 set foldnestmax=6
@@ -977,7 +977,7 @@ highlighting for cErrInParen and cErrInBracket.
If you want to use folding in your C files, you can add these lines in a file If you want to use folding in your C files, you can add these lines in a file
in the "after" directory in 'runtimepath'. For Unix this would be in the "after" directory in 'runtimepath'. For Unix this would be
~/.vim/after/syntax/c.vim. > ~/.config/nvim/after/syntax/c.vim. >
syn sync fromstart syn sync fromstart
set foldmethod=syntax set foldmethod=syntax
@@ -1004,7 +1004,7 @@ chill_minlines like c_minlines
CHANGELOG *changelog.vim* *ft-changelog-syntax* CHANGELOG *changelog.vim* *ft-changelog-syntax*
ChangeLog supports highlighting spaces at the start of a line. ChangeLog supports highlighting spaces at the start of a line.
If you do not like this, add following line to your .vimrc: > If you do not like this, add following line to your vimrc: >
let g:changelog_spacing_errors = 0 let g:changelog_spacing_errors = 0
This works the next time you edit a changelog file. You can also use This works the next time you edit a changelog file. You can also use
"b:changelog_spacing_errors" to set this per buffer (before loading the syntax "b:changelog_spacing_errors" to set this per buffer (before loading the syntax
@@ -1037,7 +1037,7 @@ COBOL *cobol.vim* *ft-cobol-syntax*
COBOL highlighting has different needs for legacy code than it does for fresh COBOL highlighting has different needs for legacy code than it does for fresh
development. This is due to differences in what is being done (maintenance development. This is due to differences in what is being done (maintenance
versus development) and other factors. To enable legacy code highlighting, versus development) and other factors. To enable legacy code highlighting,
add this line to your .vimrc: > add this line to your vimrc: >
:let cobol_legacy_code = 1 :let cobol_legacy_code = 1
To disable it again, use this: > To disable it again, use this: >
:unlet cobol_legacy_code :unlet cobol_legacy_code
@@ -1090,7 +1090,7 @@ Cynlib files are C++ files that use the Cynlib class library to enable
hardware modelling and simulation using C++. Typically Cynlib files have a .cc hardware modelling and simulation using C++. Typically Cynlib files have a .cc
or a .cpp extension, which makes it very difficult to distinguish them from a or a .cpp extension, which makes it very difficult to distinguish them from a
normal C++ file. Thus, to enable Cynlib highlighting for .cc files, add this normal C++ file. Thus, to enable Cynlib highlighting for .cc files, add this
line to your .vimrc file: > line to your vimrc file: >
:let cynlib_cyntax_for_cc=1 :let cynlib_cyntax_for_cc=1
@@ -1202,7 +1202,7 @@ or >
It can also be done automatically for C, C++, C#, IDL and PHP files by setting It can also be done automatically for C, C++, C#, IDL and PHP files by setting
the global or buffer-local variable load_doxygen_syntax. This is done by the global or buffer-local variable load_doxygen_syntax. This is done by
adding the following to your .vimrc. > adding the following to your vimrc. >
:let g:load_doxygen_syntax=1 :let g:load_doxygen_syntax=1
There are a couple of variables that have an effect on syntax highlighting, and There are a couple of variables that have an effect on syntax highlighting, and
@@ -1355,7 +1355,7 @@ start of a new paragraph, so the ftplugin sets 'tw'=0 (unlimited line length),
and so on. It also includes some keymaps that are disabled by default. and so on. It also includes some keymaps that are disabled by default.
If you want to enable the keymaps that make "j" and "k" and the cursor keys If you want to enable the keymaps that make "j" and "k" and the cursor keys
move up and down by display lines, add this to your .vimrc: > move up and down by display lines, add this to your vimrc: >
:let flexwiki_maps = 1 :let flexwiki_maps = 1
@@ -1407,10 +1407,10 @@ syntax highlighting will not be correct if the form is incorrectly set.
When you create a new fortran file, the syntax script assumes fixed source When you create a new fortran file, the syntax script assumes fixed source
form. If you always use free source form, then > form. If you always use free source form, then >
:let fortran_free_source=1 :let fortran_free_source=1
in your .vimrc prior to the :syntax on command. If you always use fixed source in your vimrc prior to the :syntax on command. If you always use fixed source
form, then > form, then >
:let fortran_fixed_source=1 :let fortran_fixed_source=1
in your .vimrc prior to the :syntax on command. in your vimrc prior to the :syntax on command.
If the form of the source code depends upon the file extension, then it is If the form of the source code depends upon the file extension, then it is
most convenient to set fortran_free_source in a ftplugin file. For more most convenient to set fortran_free_source in a ftplugin file. For more
@@ -1426,7 +1426,7 @@ rest in fixed source form, add the following code to your ftplugin file >
unlet! fortran_free_source unlet! fortran_free_source
endif endif
Note that this will work only if the "filetype plugin indent on" command Note that this will work only if the "filetype plugin indent on" command
precedes the "syntax on" command in your .vimrc file. precedes the "syntax on" command in your vimrc file.
When you edit an existing fortran file, the syntax script will assume free When you edit an existing fortran file, the syntax script will assume free
source form if the fortran_free_source variable has been set, and assumes source form if the fortran_free_source variable has been set, and assumes
@@ -1446,7 +1446,7 @@ Tabs are not recognized by the Fortran standards. Tabs are not a good idea in
fixed format fortran source code which requires fixed column boundaries. fixed format fortran source code which requires fixed column boundaries.
Therefore, tabs are marked as errors. Nevertheless, some programmers like Therefore, tabs are marked as errors. Nevertheless, some programmers like
using tabs. If your fortran files contain tabs, then you should set the using tabs. If your fortran files contain tabs, then you should set the
variable fortran_have_tabs in your .vimrc with a command such as > variable fortran_have_tabs in your vimrc with a command such as >
:let fortran_have_tabs=1 :let fortran_have_tabs=1
placed prior to the :syntax on command. Unfortunately, the use of tabs will placed prior to the :syntax on command. Unfortunately, the use of tabs will
mean that the syntax file will not be able to detect incorrect margins. mean that the syntax file will not be able to detect incorrect margins.
@@ -1492,7 +1492,7 @@ other legacy features excluded from F will be highlighted as todo items and
that free source form will be assumed. that free source form will be assumed.
The dialect can be selected in various ways. If all your fortran files use The dialect can be selected in various ways. If all your fortran files use
the same dialect, set the global variable fortran_dialect in your .vimrc prior the same dialect, set the global variable fortran_dialect in your vimrc prior
to your syntax on statement. The case-sensitive, permissible values of to your syntax on statement. The case-sensitive, permissible values of
fortran_dialect are "f08" or "F". Invalid values of fortran_dialect are fortran_dialect are "f08" or "F". Invalid values of fortran_dialect are
ignored. ignored.
@@ -1509,7 +1509,7 @@ contain the code >
unlet! b:fortran_dialect unlet! b:fortran_dialect
endif endif
Note that this will work only if the "filetype plugin indent on" command Note that this will work only if the "filetype plugin indent on" command
precedes the "syntax on" command in your .vimrc file. precedes the "syntax on" command in your vimrc file.
Finer control is necessary if the file extension does not uniquely identify Finer control is necessary if the file extension does not uniquely identify
the dialect. You can override the default dialect, on a file-by-file basis, the dialect. You can override the default dialect, on a file-by-file basis,
@@ -1561,7 +1561,7 @@ in /usr/X11/lib/X11/, you should add the line >
:let rgb_file = "/usr/X11/lib/X11/rgb.txt" :let rgb_file = "/usr/X11/lib/X11/rgb.txt"
to your .vimrc file. to your vimrc file.
GSP *gsp.vim* *ft-gsp-syntax* GSP *gsp.vim* *ft-gsp-syntax*
@@ -1603,7 +1603,7 @@ Haskell code, the latter in both Bird style and TeX style. The Haskell
syntax highlighting will also highlight C preprocessor directives. syntax highlighting will also highlight C preprocessor directives.
If you want to highlight delimiter characters (useful if you have a If you want to highlight delimiter characters (useful if you have a
light-coloured background), add to your .vimrc: > light-coloured background), add to your vimrc: >
:let hs_highlight_delimiters = 1 :let hs_highlight_delimiters = 1
To treat True and False as keywords as opposed to ordinary identifiers, To treat True and False as keywords as opposed to ordinary identifiers,
add: > add: >
@@ -1613,21 +1613,21 @@ To also treat the names of primitive types as keywords: >
And to treat the names of even more relatively common types as keywords: > And to treat the names of even more relatively common types as keywords: >
:let hs_highlight_more_types = 1 :let hs_highlight_more_types = 1
If you want to highlight the names of debugging functions, put in If you want to highlight the names of debugging functions, put in
your .vimrc: > your vimrc: >
:let hs_highlight_debug = 1 :let hs_highlight_debug = 1
The Haskell syntax highlighting also highlights C preprocessor The Haskell syntax highlighting also highlights C preprocessor
directives, and flags lines that start with # but are not valid directives, and flags lines that start with # but are not valid
directives as erroneous. This interferes with Haskell's syntax for directives as erroneous. This interferes with Haskell's syntax for
operators, as they may start with #. If you want to highlight those operators, as they may start with #. If you want to highlight those
as operators as opposed to errors, put in your .vimrc: > as operators as opposed to errors, put in your vimrc: >
:let hs_allow_hash_operator = 1 :let hs_allow_hash_operator = 1
The syntax highlighting for literate Haskell code will try to The syntax highlighting for literate Haskell code will try to
automatically guess whether your literate Haskell code contains automatically guess whether your literate Haskell code contains
TeX markup or not, and correspondingly highlight TeX constructs TeX markup or not, and correspondingly highlight TeX constructs
or nothing at all. You can override this globally by putting or nothing at all. You can override this globally by putting
in your .vimrc > in your vimrc >
:let lhs_markup = none :let lhs_markup = none
for no highlighting at all, or > for no highlighting at all, or >
:let lhs_markup = tex :let lhs_markup = tex
@@ -1720,7 +1720,7 @@ The coloring scheme for HTML/OS works as follows:
Functions and variable names are the same color by default, because VIM Functions and variable names are the same color by default, because VIM
doesn't specify different colors for Functions and Identifiers. To change doesn't specify different colors for Functions and Identifiers. To change
this (which is recommended if you want function names to be recognizable in a this (which is recommended if you want function names to be recognizable in a
different color) you need to add the following line to either your ~/.vimrc: > different color) you need to add the following line to your vimrc: >
:hi Function term=underline cterm=bold ctermfg=LightGray :hi Function term=underline cterm=bold ctermfg=LightGray
Of course, the ctermfg can be a different color if you choose. Of course, the ctermfg can be a different color if you choose.
@@ -1739,7 +1739,7 @@ IA64 *ia64.vim* *intel-itanium* *ft-ia64-syntax*
Highlighting for the Intel Itanium 64 assembly language. See |asm.vim| for Highlighting for the Intel Itanium 64 assembly language. See |asm.vim| for
how to recognize this filetype. how to recognize this filetype.
To have *.inc files be recognized as IA64, add this to your .vimrc file: > To have *.inc files be recognized as IA64, add this to your vimrc file: >
:let g:filetype_inc = "ia64" :let g:filetype_inc = "ia64"
@@ -1901,7 +1901,7 @@ difficulties (such as may happen with large lex files).
LIFELINES *lifelines.vim* *ft-lifelines-syntax* LIFELINES *lifelines.vim* *ft-lifelines-syntax*
To highlight deprecated functions as errors, add in your .vimrc: > To highlight deprecated functions as errors, add in your vimrc: >
:let g:lifelines_deprecated = 1 :let g:lifelines_deprecated = 1
< <
@@ -1944,7 +1944,7 @@ LPC *lpc.vim* *ft-lpc-syntax*
LPC stands for a simple, memory-efficient language: Lars Pensj| C. The LPC stands for a simple, memory-efficient language: Lars Pensj| C. The
file name of LPC is usually *.c. Recognizing these files as LPC would bother file name of LPC is usually *.c. Recognizing these files as LPC would bother
users writing only C programs. If you want to use LPC syntax in Vim, you users writing only C programs. If you want to use LPC syntax in Vim, you
should set a variable in your .vimrc file: > should set a variable in your vimrc file: >
:let lpc_syntax_for_c = 1 :let lpc_syntax_for_c = 1
@@ -2023,13 +2023,13 @@ MAPLE *maple.vim* *ft-maple-syntax*
Maple V, by Waterloo Maple Inc, supports symbolic algebra. The language Maple V, by Waterloo Maple Inc, supports symbolic algebra. The language
supports many packages of functions which are selectively loaded by the user. supports many packages of functions which are selectively loaded by the user.
The standard set of packages' functions as supplied in Maple V release 4 may be The standard set of packages' functions as supplied in Maple V release 4 may be
highlighted at the user's discretion. Users may place in their .vimrc file: > highlighted at the user's discretion. Users may place in their vimrc file: >
:let mvpkg_all= 1 :let mvpkg_all= 1
to get all package functions highlighted, or users may select any subset by to get all package functions highlighted, or users may select any subset by
choosing a variable/package from the table below and setting that variable to choosing a variable/package from the table below and setting that variable to
1, also in their .vimrc file (prior to sourcing 1, also in their vimrc file (prior to sourcing
$VIMRUNTIME/syntax/syntax.vim). $VIMRUNTIME/syntax/syntax.vim).
Table of Maple V Package Function Selectors > Table of Maple V Package Function Selectors >
@@ -2046,7 +2046,7 @@ $VIMRUNTIME/syntax/syntax.vim).
MATHEMATICA *mma.vim* *ft-mma-syntax* *ft-mathematica-syntax* MATHEMATICA *mma.vim* *ft-mma-syntax* *ft-mathematica-syntax*
Empty *.m files will automatically be presumed to be Matlab files unless you Empty *.m files will automatically be presumed to be Matlab files unless you
have the following in your .vimrc: > have the following in your vimrc: >
let filetype_m = "mma" let filetype_m = "mma"
@@ -2172,7 +2172,7 @@ highlighting definition for the syntax groups "nroffDefinition" and
\ gui=reverse,bold \ gui=reverse,bold
If you want to navigate preprocessor entries in your source file as easily as If you want to navigate preprocessor entries in your source file as easily as
with section markers, you can activate the following option in your .vimrc with section markers, you can activate the following option in your vimrc
file: > file: >
let b:preprocs_as_sections = 1 let b:preprocs_as_sections = 1
@@ -2625,7 +2625,7 @@ number is that redrawing can become slow.
Vim tries to guess what type a ".r" file is. If it can't be detected (from Vim tries to guess what type a ".r" file is. If it can't be detected (from
comment lines), the default is "r". To make the default rexx add this line to comment lines), the default is "r". To make the default rexx add this line to
your .vimrc: *g:filetype_r* your vimrc: *g:filetype_r*
> >
:let g:filetype_r = "r" :let g:filetype_r = "r"
@@ -2808,7 +2808,7 @@ be shell files but the type is not apparent. Furthermore, on many systems
sh is symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh" (Posix). sh is symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh" (Posix).
One may specify a global default by instantiating one of the following three One may specify a global default by instantiating one of the following three
variables in your <.vimrc>: variables in your vimrc:
ksh: > ksh: >
let g:is_kornshell = 1 let g:is_kornshell = 1
@@ -2823,7 +2823,7 @@ If there's no "#! ..." line, and the user hasn't availed himself/herself of a
default sh.vim syntax setting as just shown, then syntax/sh.vim will assume default sh.vim syntax setting as just shown, then syntax/sh.vim will assume
the Bourne shell syntax. No need to quote RFCs or market penetration the Bourne shell syntax. No need to quote RFCs or market penetration
statistics in error reports, please -- just select the default version of the statistics in error reports, please -- just select the default version of the
sh your system uses in your <.vimrc>. sh your system uses in your vimrc.
The syntax/sh.vim file provides several levels of syntax-based folding: > The syntax/sh.vim file provides several levels of syntax-based folding: >
@@ -2869,7 +2869,7 @@ this behavior with: >
You may wish to embed languages into sh. I'll give an example courtesy of You may wish to embed languages into sh. I'll give an example courtesy of
Lorance Stinson on how to do this with awk as an example. Put the following Lorance Stinson on how to do this with awk as an example. Put the following
file into $HOME/.vim/after/syntax/sh/awkembed.vim: > file into $HOME/.config/nvim/after/syntax/sh/awkembed.vim: >
" AWK Embedding: {{{1 " AWK Embedding: {{{1
" ============== " ==============
@@ -2945,7 +2945,7 @@ for how the filetype is detected.
Tcsh does not allow \" in strings unless the "backslash_quote" shell variable Tcsh does not allow \" in strings unless the "backslash_quote" shell variable
is set. If you want VIM to assume that no backslash quote constructs exist add is set. If you want VIM to assume that no backslash quote constructs exist add
this line to your .vimrc: > this line to your vimrc: >
:let tcsh_backslash_quote = 0 :let tcsh_backslash_quote = 0
@@ -2986,7 +2986,7 @@ TEX *tex.vim* *ft-tex-syntax* *latex-syntax*
As of version 28 of <syntax/tex.vim>, syntax-based folding of parts, chapters, As of version 28 of <syntax/tex.vim>, syntax-based folding of parts, chapters,
sections, subsections, etc are supported. Put > sections, subsections, etc are supported. Put >
let g:tex_fold_enabled=1 let g:tex_fold_enabled=1
in your <.vimrc>, and :set fdm=syntax. I suggest doing the latter via a in your vimrc, and :set fdm=syntax. I suggest doing the latter via a
modeline at the end of your LaTeX file: > modeline at the end of your LaTeX file: >
% vim: fdm=syntax % vim: fdm=syntax
If your system becomes too slow, then you might wish to look into > If your system becomes too slow, then you might wish to look into >
@@ -2997,7 +2997,7 @@ If your system becomes too slow, then you might wish to look into >
If you don't want spell checking anywhere in your LaTeX document, put > If you don't want spell checking anywhere in your LaTeX document, put >
let g:tex_nospell=1 let g:tex_nospell=1
into your .vimrc. If you merely wish to suppress spell checking inside into your vimrc. If you merely wish to suppress spell checking inside
comments only, see |g:tex_comment_nospell|. comments only, see |g:tex_comment_nospell|.
*tex-nospell* *g:tex_comment_nospell* *tex-nospell* *g:tex_comment_nospell*
@@ -3005,7 +3005,7 @@ comments only, see |g:tex_comment_nospell|.
Some folks like to include things like source code in comments and so would Some folks like to include things like source code in comments and so would
prefer that spell checking be disabled in comments in LaTeX files. To do prefer that spell checking be disabled in comments in LaTeX files. To do
this, put the following in your <.vimrc>: > this, put the following in your vimrc: >
let g:tex_comment_nospell= 1 let g:tex_comment_nospell= 1
If you want to suppress spell checking everywhere inside your LaTeX document, If you want to suppress spell checking everywhere inside your LaTeX document,
see |g:tex_nospell|. see |g:tex_nospell|.
@@ -3015,7 +3015,7 @@ see |g:tex_nospell|.
Often verbatim regions are used for things like source code; seldom does Often verbatim regions are used for things like source code; seldom does
one want source code spell-checked. However, for those of you who do one want source code spell-checked. However, for those of you who do
want your verbatim zones spell-checked, put the following in your <.vimrc>: > want your verbatim zones spell-checked, put the following in your vimrc: >
let g:tex_verbspell= 1 let g:tex_verbspell= 1
< <
*tex-runon* *tex-stopzone* *tex-runon* *tex-stopzone*
@@ -3050,7 +3050,7 @@ Finally, if syntax highlighting is still too slow, you may set >
:let g:tex_fast= "" :let g:tex_fast= ""
in your .vimrc. Used this way, the g:tex_fast variable causes the syntax in your vimrc. Used this way, the g:tex_fast variable causes the syntax
highlighting script to avoid defining any regions and associated highlighting script to avoid defining any regions and associated
synchronization. The result will be much faster syntax highlighting; the synchronization. The result will be much faster syntax highlighting; the
price: you will no longer have as much highlighting or any syntax-based price: you will no longer have as much highlighting or any syntax-based
@@ -3092,7 +3092,7 @@ http://vim.sf.net/.
The <tex.vim> supports lexical error checking of various sorts. Thus, The <tex.vim> supports lexical error checking of various sorts. Thus,
although the error checking is ofttimes very useful, it can indicate although the error checking is ofttimes very useful, it can indicate
errors where none actually are. If this proves to be a problem for you, errors where none actually are. If this proves to be a problem for you,
you may put in your <.vimrc> the following statement: > you may put in your vimrc the following statement: >
let g:tex_no_error=1 let g:tex_no_error=1
and all error checking by <syntax/tex.vim> will be suppressed. and all error checking by <syntax/tex.vim> will be suppressed.
@@ -3122,7 +3122,7 @@ such use of @ as an error. To solve this: >
:let b:tex_stylish = 1 :let b:tex_stylish = 1
:set ft=tex :set ft=tex
Putting "let g:tex_stylish=1" into your <.vimrc> will make <syntax/tex.vim> Putting "let g:tex_stylish=1" into your vimrc will make <syntax/tex.vim>
always accept such use of @. always accept such use of @.
*tex-cchar* *tex-cole* *tex-conceal* *tex-cchar* *tex-cole* *tex-conceal*
@@ -3142,7 +3142,7 @@ with |'conceallevel'| at 0 and the other at 2; and both using |'scrollbind'|.
Tex: Selective Conceal Mode~ Tex: Selective Conceal Mode~
You may selectively use conceal mode by setting g:tex_conceal in your You may selectively use conceal mode by setting g:tex_conceal in your
<.vimrc>. By default, g:tex_conceal is set to "admgs" to enable concealment vimrc. By default, g:tex_conceal is set to "admgs" to enable concealment
for the following sets of characters: > for the following sets of characters: >
a = accents/ligatures a = accents/ligatures
@@ -3193,8 +3193,8 @@ syntax highlighting script handles this with the following logic:
For example, I use Luxi Mono Bold; it doesn't support subscript For example, I use Luxi Mono Bold; it doesn't support subscript
characters for "hklmnpst", so I put > characters for "hklmnpst", so I put >
let g:tex_subscripts= "[0-9aeijoruvx,+-/().]" let g:tex_subscripts= "[0-9aeijoruvx,+-/().]"
< in ~/.vim/ftplugin/tex/tex.vim in order to avoid having inscrutable < in ~/.config/nvim/ftplugin/tex/tex.vim in order to avoid having
utf-8 glyphs appear. inscrutable utf-8 glyphs appear.
TF *tf.vim* *ft-tf-syntax* TF *tf.vim* *ft-tf-syntax*
@@ -3252,7 +3252,7 @@ The syntax of XF86Config file differs in XFree86 v3.x and v4.x. Both
variants are supported. Automatic detection is used, but is far from perfect. variants are supported. Automatic detection is used, but is far from perfect.
You may need to specify the version manually. Set the variable You may need to specify the version manually. Set the variable
xf86conf_xfree86_version to 3 or 4 according to your XFree86 version in xf86conf_xfree86_version to 3 or 4 according to your XFree86 version in
your .vimrc. Example: > your vimrc. Example: >
:let xf86conf_xfree86_version=3 :let xf86conf_xfree86_version=3
When using a mix of versions, set the b:xf86conf_xfree86_version variable. When using a mix of versions, set the b:xf86conf_xfree86_version variable.
@@ -4646,7 +4646,7 @@ ctermbg={color-nr} *highlight-ctermbg*
When you have set "ctermfg" or "ctermbg" for the Normal group, Vim When you have set "ctermfg" or "ctermbg" for the Normal group, Vim
needs to reset the color when exiting. This is done with the "op" needs to reset the color when exiting. This is done with the "op"
termcap entry |t_op|. If this doesn't work correctly, try setting the termcap entry |t_op|. If this doesn't work correctly, try setting the
't_op' option in your .vimrc. 't_op' option in your vimrc.
*E419* *E420* *E419* *E420*
When Vim knows the normal foreground and background colors, "fg" and When Vim knows the normal foreground and background colors, "fg" and
"bg" can be used as color names. This only works after setting the "bg" can be used as color names. This only works after setting the
@@ -4979,7 +4979,8 @@ script file to set these colors. Put this file in a directory in
the default colors. This way these colors will be used after the ":syntax the default colors. This way these colors will be used after the ":syntax
reset" command. reset" command.
For Unix you can use the file ~/.vim/after/syntax/syncolor.vim. Example: > For Unix you can use the file ~/.config/nvim/after/syntax/syncolor.vim.
Example: >
if &background == "light" if &background == "light"
highlight comment ctermfg=darkgreen guifg=darkgreen highlight comment ctermfg=darkgreen guifg=darkgreen
@@ -5036,7 +5037,7 @@ types.vim: *.[ch]
awk 'BEGIN{printf("syntax keyword Type\t")}\ awk 'BEGIN{printf("syntax keyword Type\t")}\
{printf("%s ", $$1)}END{print ""}' > $@ {printf("%s ", $$1)}END{print ""}' > $@
And put these lines in your .vimrc: > And put these lines in your vimrc: >
" load the types.vim highlighting file, if it exists " load the types.vim highlighting file, if it exists
autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim' autocmd BufRead,BufNewFile *.[ch] let fname = expand('<afile>:p:h') . '/types.vim'
@@ -5078,7 +5079,7 @@ When splitting the window, the new window will use the original syntax.
17. Color xterms *xterm-color* *color-xterm* 17. Color xterms *xterm-color* *color-xterm*
Most color xterms have only eight colors. If you don't get colors with the Most color xterms have only eight colors. If you don't get colors with the
default setup, it should work with these lines in your .vimrc: > default setup, it should work with these lines in your vimrc: >
:if &term =~ "xterm" :if &term =~ "xterm"
: if has("terminfo") : if has("terminfo")
: set t_Co=8 : set t_Co=8
@@ -5125,7 +5126,7 @@ supports. >
If you only get 8 colors, check the xterm compilation settings. If you only get 8 colors, check the xterm compilation settings.
(Also see |UTF8-xterm| for using this xterm with UTF-8 character encoding). (Also see |UTF8-xterm| for using this xterm with UTF-8 character encoding).
This xterm should work with these lines in your .vimrc (for 16 colors): > This xterm should work with these lines in your vimrc (for 16 colors): >
:if has("terminfo") :if has("terminfo")
: set t_Co=16 : set t_Co=16
: set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm : set t_AB=<Esc>[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm

View File

@@ -37,7 +37,7 @@ used. Also see |xterm-screens|.
Settings depending on terminal *term-dependent-settings* Settings depending on terminal *term-dependent-settings*
If you want to set options or mappings, depending on the terminal name, you If you want to set options or mappings, depending on the terminal name, you
can do this best in your .vimrc. Example: > can do this best in your vimrc. Example: >
if &term == "xterm" if &term == "xterm"
... xterm maps and settings ... ... xterm maps and settings ...

View File

@@ -98,7 +98,7 @@ What you need:
- An identifier database file called "ID" in the current directory. You can - An identifier database file called "ID" in the current directory. You can
create it with the shell command "mkid file1 file2 ..". create it with the shell command "mkid file1 file2 ..".
Put this in your .vimrc: > Put this in your |init.vim|: >
map _u :call ID_search()<Bar>execute "/\\<" . g:word . "\\>"<CR> map _u :call ID_search()<Bar>execute "/\\<" . g:word . "\\>"<CR>
map _n :n<Bar>execute "/\\<" . g:word . "\\>"<CR> map _n :n<Bar>execute "/\\<" . g:word . "\\>"<CR>
@@ -404,7 +404,7 @@ See section |23.4| of the user manual.
If one has a particular extension that one uses for binary files (such as exe, If one has a particular extension that one uses for binary files (such as exe,
bin, etc), you may find it helpful to automate the process with the following bin, etc), you may find it helpful to automate the process with the following
bit of autocmds for your <.vimrc>. Change that "*.bin" to whatever bit of autocmds for your |init.vim|. Change that "*.bin" to whatever
comma-separated list of extension(s) you find yourself wanting to edit: > comma-separated list of extension(s) you find yourself wanting to edit: >
" vim -b : edit binary using xxd-format! " vim -b : edit binary using xxd-format!

View File

@@ -60,10 +60,7 @@ make them visible with: >
It's not required for this tutorial, but we provide an example vimrc you may It's not required for this tutorial, but we provide an example vimrc you may
use: use:
Unix: > :!cp -i $VIMRUNTIME/vimrc_example.vim ~/.config/nvim/init.vim
:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.vimrc
MS-DOS, MS-Windows: >
:!copy $VIMRUNTIME/vimrc_example.vim $VIM/_vimrc
If the file already exists you probably want to keep it. If the file already exists you probably want to keep it.

View File

@@ -470,7 +470,7 @@ If you like one of the options mentioned before, and set it each time you use
Vim, you can put the command in your Vim startup file. Edit the file, for Vim, you can put the command in your Vim startup file. Edit the file, for
example with: > example with: >
:edit ~/.vimrc :edit ~/.config/nvim/init.vim
Then add a line with the command to set the option, just like you typed it in Then add a line with the command to set the option, just like you typed it in
Vim. Example: > Vim. Example: >

View File

@@ -22,30 +22,24 @@ Vim's capabilities. Or define your own macros.
Table of contents: |usr_toc.txt| Table of contents: |usr_toc.txt|
============================================================================== ==============================================================================
*05.1* The vimrc file *vimrc-intro* *05.1* The vimrc file *vimrc-intro*
You probably got tired of typing commands that you use very often. To start You probably got tired of typing commands that you use very often. To start
Vim with all your favorite option settings and mappings, you write them in Vim with all your favorite option settings and mappings, you write them in
what is called the vimrc file. Vim executes the commands in this file when it what is called the init.vim file. Vim executes the commands in this file when
starts up. it starts up.
If you already have a vimrc file (e.g., when your sysadmin has one setup for If you already have a init.vim file (e.g., when your sysadmin has one setup
you), you can edit it this way: > for you), you can edit it this way: >
:edit $MYVIMRC :edit $MYVIMRC
If you don't have a vimrc file yet, see |vimrc| to find out where you can If you don't have a vimrc file yet, see |init.vim| to find out where you can
create a vimrc file. Also, the ":version" command mentions the name of the create a vimrc file.
"user vimrc file" Vim looks for.
For Unix and Macintosh this file is always used and is recommended: For Unix and Macintosh this file is always used and is recommended:
~/.vimrc ~ ~/.config/nvim/init.vim ~
For MS-DOS and MS-Windows you can use one of these:
$HOME/_vimrc ~
$VIM/_vimrc ~
The vimrc file can contain all the commands that you type after a colon. The The vimrc file can contain all the commands that you type after a colon. The
most simple ones are for setting options. For example, if you want Vim to most simple ones are for setting options. For example, if you want Vim to
@@ -300,23 +294,20 @@ First read the text in the plugin itself to check for any special conditions.
Then copy the file to your plugin directory: Then copy the file to your plugin directory:
system plugin directory ~ system plugin directory ~
Unix ~/.vim/plugin/ Unix ~/.local/share/nvim/site/plugin
Macintosh $VIM:vimfiles:plugin
Mac OS X ~/.vim/plugin/
Example for Unix (assuming you didn't have a plugin directory yet): > Example for Unix (assuming you didn't have a plugin directory yet): >
mkdir ~/.vim mkdir -p ~/.local/share/nvim/site/plugin
mkdir ~/.vim/plugin cp /usr/local/share/vim/vim60/macros/justify.vim ~/.local/share/nvim/site/plugin
cp /usr/local/share/vim/vim60/macros/justify.vim ~/.vim/plugin
That's all! Now you can use the commands defined in this plugin to justify That's all! Now you can use the commands defined in this plugin to justify
text. text.
Instead of putting plugins directly into the plugin/ directory, you may Instead of putting plugins directly into the plugin/ directory, you may
better organize them by putting them into subdirectories under plugin/. better organize them by putting them into subdirectories under plugin/.
As an example, consider using "~/.vim/plugin/perl/*.vim" for all your Perl As an example, consider using "~/.local/share/nvim/site/plugin/perl/*.vim" for
plugins. all your Perl plugins.
FILETYPE PLUGINS *add-filetype-plugin* *ftplugins* FILETYPE PLUGINS *add-filetype-plugin* *ftplugins*
@@ -350,25 +341,19 @@ plugins, but the last part is "ftplugin". Suppose you have found a plugin for
the "stuff" filetype, and you are on Unix. Then you can move this file to the the "stuff" filetype, and you are on Unix. Then you can move this file to the
ftplugin directory: > ftplugin directory: >
mv thefile ~/.vim/ftplugin/stuff.vim mkdir -p ~/.local/share/nvim/site/ftplugin
mv thefile ~/.local/share/nvim/site/ftplugin/stuff.vim
If that file already exists you already have a plugin for "stuff". You might If that file already exists you already have a plugin for "stuff". You might
want to check if the existing plugin doesn't conflict with the one you are want to check if the existing plugin doesn't conflict with the one you are
adding. If it's OK, you can give the new one another name: > adding. If it's OK, you can give the new one another name: >
mv thefile ~/.vim/ftplugin/stuff_too.vim mv thefile ~/.local/share/nvim/site/ftplugin/stuff_too.vim
The underscore is used to separate the name of the filetype from the rest, The underscore is used to separate the name of the filetype from the rest,
which can be anything. If you use "otherstuff.vim" it wouldn't work, it would which can be anything. If you use "otherstuff.vim" it wouldn't work, it would
be loaded for the "otherstuff" filetype. be loaded for the "otherstuff" filetype.
On MS-DOS you cannot use long filenames. You would run into trouble if you
add a second plugin and the filetype has more than six characters. You can
use an extra directory to get around this: >
mkdir $VIM/vimfiles/ftplugin/fortran
copy thefile $VIM/vimfiles/ftplugin/fortran/too.vim
The generic names for the filetype plugins are: > The generic names for the filetype plugins are: >
ftplugin/<filetype>.vim ftplugin/<filetype>.vim
@@ -378,9 +363,9 @@ The generic names for the filetype plugins are: >
Here "<name>" can be any name that you prefer. Here "<name>" can be any name that you prefer.
Examples for the "stuff" filetype on Unix: > Examples for the "stuff" filetype on Unix: >
~/.vim/ftplugin/stuff.vim ~/.local/share/nvim/site/ftplugin/stuff.vim
~/.vim/ftplugin/stuff_def.vim ~/.local/share/nvim/site/ftplugin/stuff_def.vim
~/.vim/ftplugin/stuff/header.vim ~/.local/share/nvim/site/ftplugin/stuff/header.vim
The <filetype> part is the name of the filetype the plugin is to be used for. The <filetype> part is the name of the filetype the plugin is to be used for.
Only files of this filetype will use the settings from the plugin. The <name> Only files of this filetype will use the settings from the plugin. The <name>
@@ -410,16 +395,16 @@ non-standard place (it usually resides in a sub-folder called `doc/`).
First, create a "doc" directory in one of the directories in 'runtimepath': > First, create a "doc" directory in one of the directories in 'runtimepath': >
:!mkdir ~/.vim/doc :!mkdir -p ~/.local/share/nvim/site/doc
Now, copy the help file to the "doc" directory: > Now, copy the help file to the "doc" directory: >
:!cp my-plugin/my-plugin-doc.txt ~/.vim/doc :!cp my-plugin/my-plugin-doc.txt ~/.local/share/nvim/site/doc
Here comes the trick, which allows you to jump to the subjects in the new help Here comes the trick, which allows you to jump to the subjects in the new help
file. Generate the local tags file with the |:helptags| command: > file. Generate the local tags file with the |:helptags| command: >
:helptags ~/.vim/doc :helptags ~/.local/share/nvim/site/doc
You can see an entry for the local help file when you do: > You can see an entry for the local help file when you do: >

View File

@@ -35,17 +35,17 @@ easy to overview the file. After a while you will find that black&white text
slows you down! slows you down!
If you always want to use syntax highlighting, put the ":syntax enable" If you always want to use syntax highlighting, put the ":syntax enable"
command in your |vimrc| file. command in your |init.vim| file.
If you want syntax highlighting only when the terminal supports colors, you If you want syntax highlighting only when the terminal supports colors, you
can put this in your |vimrc| file: > can put this in your |init.vim| file: >
if &t_Co > 1 if &t_Co > 1
syntax enable syntax enable
endif endif
If you want syntax highlighting only in the GUI version, put the ":syntax If you want syntax highlighting only in the GUI version, put the ":syntax
enable" command in your |gvimrc| file. enable" command in your |ginit.vim| file.
============================================================================== ==============================================================================
*06.2* No or wrong colors? *06.2* No or wrong colors?
@@ -144,14 +144,14 @@ the GUI use the Edit/Color Scheme menu. You can also type the command: >
want to try out. Look in the directory $VIMRUNTIME/colors. want to try out. Look in the directory $VIMRUNTIME/colors.
When you found the color scheme that you like, add the ":colorscheme" command When you found the color scheme that you like, add the ":colorscheme" command
to your |vimrc| file. to your |init.vim| file.
You could also write your own color scheme. This is how you do it: You could also write your own color scheme. This is how you do it:
1. Select a color scheme that comes close. Copy this file to your own Vim 1. Select a color scheme that comes close. Copy this file to your own Vim
directory. For Unix, this should work: > directory. For Unix, this should work: >
!mkdir ~/.vim/colors !mkdir -p ~/.config/nvim/colors
!cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim !cp $VIMRUNTIME/colors/morning.vim ~/.vim/colors/mine.vim
< <
This is done from Vim, because it knows the value of $VIMRUNTIME. This is done from Vim, because it knows the value of $VIMRUNTIME.

View File

@@ -169,7 +169,7 @@ exiting Vim, there is a slightly more complicated way. You can see a list of
files by typing the command: > files by typing the command: >
:oldfiles :oldfiles
< 1: ~/.vimrc ~ < 1: ~/.config/nvim/init.vim ~
2: ~/text/resume.txt ~ 2: ~/text/resume.txt ~
3: /tmp/draft ~ 3: /tmp/draft ~
@@ -189,7 +189,7 @@ That #<123 thing is a bit complicated when you just want to edit a file.
Fortunately there is a simpler way: > Fortunately there is a simpler way: >
:browse oldfiles :browse oldfiles
< 1: ~/.vimrc ~ < 1: ~/.config/nvim/init.vim ~
2: ~/text/resume.txt ~ 2: ~/text/resume.txt ~
3: /tmp/draft ~ 3: /tmp/draft ~
-- More -- -- More --
@@ -276,13 +276,13 @@ example, use: >
SESSION HERE, SESSION THERE SESSION HERE, SESSION THERE
The obvious way to use sessions is when working on different projects. The obvious way to use sessions is when working on different projects.
Suppose you store your session files in the directory "~/.vim". You are Suppose you store your session files in the directory "~/.config/nvim". You
currently working on the "secret" project and have to switch to the "boring" are currently working on the "secret" project and have to switch to the
project: > "boring" project: >
:wall :wall
:mksession! ~/.vim/secret.vim :mksession! ~/.config/nvim/secret.vim
:source ~/.vim/boring.vim :source ~/.config/nvim/boring.vim
This first uses ":wall" to write all modified files. Then the current session This first uses ":wall" to write all modified files. Then the current session
is saved, using ":mksession!". This overwrites the previous session. The is saved, using ":mksession!". This overwrites the previous session. The
@@ -292,7 +292,7 @@ point. And finally you load the new "boring" session.
If you open help windows, split and close various windows, and generally mess If you open help windows, split and close various windows, and generally mess
up the window layout, you can go back to the last saved session: > up the window layout, you can go back to the last saved session: >
:source ~/.vim/boring.vim :source ~/.config/nvim/boring.vim
Thus you have complete control over whether you want to continue next time Thus you have complete control over whether you want to continue next time
where you are now, by saving the current setup in a session, or keep the where you are now, by saving the current setup in a session, or keep the
@@ -330,11 +330,11 @@ More about this in the next chapter.
You can resize the windows a bit to your liking. Then save the session with: You can resize the windows a bit to your liking. Then save the session with:
> >
:mksession ~/.vim/mine.vim :mksession ~/.config/nvim/mine.vim
Now you can start Vim with this layout: > Now you can start Vim with this layout: >
vim -S ~/.vim/mine.vim vim -S ~/.config/nvim/mine.vim
Hint: To open a file you see listed in the explorer window in the empty Hint: To open a file you see listed in the explorer window in the empty
window, move the cursor to the filename and press "O". Double clicking with window, move the cursor to the filename and press "O". Double clicking with
@@ -346,8 +346,8 @@ UNIX AND MS-WINDOWS
Some people have to do work on MS-Windows systems one day and on Unix another Some people have to do work on MS-Windows systems one day and on Unix another
day. If you are one of them, consider adding "slash" and "unix" to day. If you are one of them, consider adding "slash" and "unix" to
'sessionoptions'. The session files will then be written in a format that can 'sessionoptions'. The session files will then be written in a format that can
be used on both systems. This is the command to put in your vimrc file: > be used on both systems. This is the command to put in your |init.vim| file:
>
:set sessionoptions+=unix,slash :set sessionoptions+=unix,slash
Vim will use the Unix format then, because the MS-Windows Vim can read and Vim will use the Unix format then, because the MS-Windows Vim can read and
@@ -368,13 +368,13 @@ another session.
You might prefer to keep the info with the session. You will have to do You might prefer to keep the info with the session. You will have to do
this yourself then. Example: > this yourself then. Example: >
:mksession! ~/.vim/secret.vim :mksession! ~/.config/nvim/secret.vim
:wshada! ~/.vim/secret.shada :wshada! ~/.local/share/nvim/shada/secret.shada
And to restore this again: > And to restore this again: >
:source ~/.vim/secret.vim :source ~/.config/nvim/secret.vim
:rshada! ~/.vim/secret.shada :rshada! ~/.local/share/nvim/shada/secret.shada
============================================================================== ==============================================================================
*21.5* Views *21.5* Views
@@ -423,11 +423,11 @@ to quickly switch to editing another file, with all its options set as you
saved them. saved them.
For example, to save the view of the current file: > For example, to save the view of the current file: >
:mkview ~/.vim/main.vim :mkview ~/.config/nvim/main.vim
You can restore it with: > You can restore it with: >
:source ~/.vim/main.vim :source ~/.config/nvim/main.vim
============================================================================== ==============================================================================
*21.6* Modelines *21.6* Modelines

View File

@@ -324,11 +324,11 @@ the output of this command: >
Now use the first item, the name before the first comma. Thus if the output Now use the first item, the name before the first comma. Thus if the output
looks like this: looks like this:
runtimepath=~/.vim,/usr/local/share/vim/vim60/runtime,~/.vim/after ~ runtimepath=~/.config/nvim,/usr/local/share/vim/vim60/runtime,~/.config/nvim/after ~
You use "~/.vim" for {directory}. Then the resulting file name is: You use "~/.config/nvim" for {directory}. Then the resulting file name is:
~/.vim/indent/help.vim ~ ~/.config/nvim/indent/help.vim ~
Instead of switching the indenting off, you could write your own indent file. Instead of switching the indenting off, you could write your own indent file.
How to do that is explained here: |indent-expression|. How to do that is explained here: |indent-expression|.

View File

@@ -248,7 +248,7 @@ you can set the 'lines' option to set a different window size: >
You don't want to do this in a terminal, since its size is fixed (except for You don't want to do this in a terminal, since its size is fixed (except for
an xterm that supports resizing). an xterm that supports resizing).
The gvimrc file is searched for in the same locations as the vimrc file. The gvimrc file is searched for in the same locations as the vimrc file.
Normally its name is "~/.gvimrc" for Unix and "$VIM/_gvimrc" for MS-Windows. Normally its name is "~/.config/nvim/ginit.vim".
The $MYGVIMRC environment variable is set to it, thus you can use this command The $MYGVIMRC environment variable is set to it, thus you can use this command
to edit the file, if you have one: > to edit the file, if you have one: >

View File

@@ -478,7 +478,7 @@ for you. This triggers the Filetype event. Use this to do something when a
certain type of file is edited. For example, to load a list of abbreviations certain type of file is edited. For example, to load a list of abbreviations
for text files: > for text files: >
:autocmd Filetype text source ~/.vim/abbrevs.vim :autocmd Filetype text source ~/.config/nvim/abbrevs.vim
When starting to edit a new file, you could make Vim insert a skeleton: > When starting to edit a new file, you could make Vim insert a skeleton: >

View File

@@ -2051,8 +2051,8 @@ Example: >
Write this single-line file as "ftdetect/foofoo.vim" in the first directory Write this single-line file as "ftdetect/foofoo.vim" in the first directory
that appears in 'runtimepath'. For Unix that would be that appears in 'runtimepath'. For Unix that would be
"~/.vim/ftdetect/foofoo.vim". The convention is to use the name of the "~/.config/nvim/ftdetect/foofoo.vim". The convention is to use the name of
filetype for the script name. the filetype for the script name.
You can make more complicated checks if you like, for example to inspect the You can make more complicated checks if you like, for example to inspect the
contents of the file to recognize the language. Also see |new-filetype|. contents of the file to recognize the language. Also see |new-filetype|.
@@ -2122,8 +2122,8 @@ you can write the different setting in a script: >
Now write this in the "after" directory, so that it gets sourced after the Now write this in the "after" directory, so that it gets sourced after the
distributed "vim.vim" ftplugin |after-directory|. For Unix this would be distributed "vim.vim" ftplugin |after-directory|. For Unix this would be
"~/.vim/after/ftplugin/vim.vim". Note that the default plugin will have set "~/.config/nvim/after/ftplugin/vim.vim". Note that the default plugin will
"b:did_ftplugin", but it is ignored here. have set "b:did_ftplugin", but it is ignored here.
OPTIONS OPTIONS
@@ -2289,8 +2289,8 @@ a user to overrule or add to the default file. The default files start with: >
:let current_compiler = "mine" :let current_compiler = "mine"
When you write a compiler file and put it in your personal runtime directory When you write a compiler file and put it in your personal runtime directory
(e.g., ~/.vim/compiler for Unix), you set the "current_compiler" variable to (e.g., ~/.config/nvim/compiler for Unix), you set the "current_compiler"
make the default file skip the settings. variable to make the default file skip the settings.
*:CompilerSet* *:CompilerSet*
The second mechanism is to use ":set" for ":compiler!" and ":setlocal" for The second mechanism is to use ":set" for ":compiler!" and ":setlocal" for
":compiler". Vim defines the ":CompilerSet" user command for this. However, ":compiler". Vim defines the ":CompilerSet" user command for this. However,
@@ -2310,7 +2310,7 @@ runtime directory, use the mechanism mentioned above. When
When you write a compiler plugin to overrule settings from a default plugin, When you write a compiler plugin to overrule settings from a default plugin,
don't check "current_compiler". This plugin is supposed to be loaded don't check "current_compiler". This plugin is supposed to be loaded
last, thus it should be in a directory at the end of 'runtimepath'. For Unix last, thus it should be in a directory at the end of 'runtimepath'. For Unix
that could be ~/.vim/after/compiler. that could be ~/.config/nvim/after/compiler.
============================================================================== ==============================================================================
*41.14* Writing a plugin that loads quickly *write-plugin-quickload* *41.14* Writing a plugin that loads quickly *write-plugin-quickload*
@@ -2428,7 +2428,7 @@ want to use subdirectories. Example: >
For Unix the library script used for this could be: For Unix the library script used for this could be:
~/.vim/autoload/netlib/ftp.vim ~/.config/nvim/autoload/netlib/ftp.vim
Where the function is defined like this: > Where the function is defined like this: >

View File

@@ -311,7 +311,7 @@ with the name "Compile.bmp". For Unix XPM format is used, the file name is
"Compile.xpm". The size must be 18 by 18 pixels. On MS-Windows other sizes "Compile.xpm". The size must be 18 by 18 pixels. On MS-Windows other sizes
can be used as well, but it will look ugly. can be used as well, but it will look ugly.
Put the bitmap in the directory "bitmaps" in one of the directories from Put the bitmap in the directory "bitmaps" in one of the directories from
'runtimepath'. E.g., for Unix "~/.vim/bitmaps/Compile.xpm". 'runtimepath'. E.g., for Unix "~/.config/nvim/bitmaps/Compile.xpm".
You can define tooltips for the items in the toolbar. A tooltip is a short You can define tooltips for the items in the toolbar. A tooltip is a short
text that explains what a toolbar item will do. For example "Open file". It text that explains what a toolbar item will do. For example "Open file". It

View File

@@ -27,22 +27,21 @@ want to set the 'softtabstop' option to 4 and define a mapping to insert a
three-line comment. You do this with only two steps: three-line comment. You do this with only two steps:
*your-runtime-dir* *your-runtime-dir*
1. Create your own runtime directory. On Unix this usually is "~/.vim". In 1. Create your own runtime directory. On Unix this usually is
this directory create the "ftplugin" directory: > "~/.config/nvim". In this directory create the "ftplugin" directory: >
mkdir ~/.vim mkdir -p ~/.config/nvim/ftplugin
mkdir ~/.vim/ftplugin
< <
When you are not on Unix, check the value of the 'runtimepath' option to When you are not on Unix, check the value of the 'runtimepath' option to
see where Vim will look for the "ftplugin" directory: > see where Vim will look for the "ftplugin" directory: >
set runtimepath set runtimepath?
< You would normally use the first directory name (before the first comma). < You would normally use the first directory name (before the first comma).
You might want to prepend a directory name to the 'runtimepath' option in You might want to prepend a directory name to the 'runtimepath' option in
your |vimrc| file if you don't like the default value. your |init.vim| file if you don't like the default value.
2. Create the file "~/.vim/ftplugin/c.vim", with the contents: > 2. Create the file "~/.config/nvim/ftplugin/c.vim", with the contents: >
setlocal softtabstop=4 setlocal softtabstop=4
noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc> noremap <buffer> <LocalLeader>c o/**************<CR><CR>/<Esc>
@@ -102,26 +101,26 @@ However, if you now edit a file /usr/share/scripts/README.txt, this is not a
ruby file. The danger of a pattern ending in "*" is that it quickly matches ruby file. The danger of a pattern ending in "*" is that it quickly matches
too many files. To avoid trouble with this, put the filetype.vim file in too many files. To avoid trouble with this, put the filetype.vim file in
another directory, one that is at the end of 'runtimepath'. For Unix for another directory, one that is at the end of 'runtimepath'. For Unix for
example, you could use "~/.vim/after/filetype.vim". example, you could use "~/.config/nvim/after/filetype.vim".
You now put the detection of text files in ~/.vim/filetype.vim: > You now put the detection of text files in ~/.config/nvim/filetype.vim: >
augroup filetypedetect augroup filetypedetect
au BufNewFile,BufRead *.txt setf text au BufNewFile,BufRead *.txt setf text
augroup END augroup END
That file is found in 'runtimepath' first. Then use this in That file is found in 'runtimepath' first. Then use this in
~/.vim/after/filetype.vim, which is found last: > ~/.config/nvim/after/filetype.vim, which is found last: >
augroup filetypedetect augroup filetypedetect
au BufNewFile,BufRead /usr/share/scripts/* setf ruby au BufNewFile,BufRead /usr/share/scripts/* setf ruby
augroup END augroup END
What will happen now is that Vim searches for "filetype.vim" files in each What will happen now is that Vim searches for "filetype.vim" files in each
directory in 'runtimepath'. First ~/.vim/filetype.vim is found. The directory in 'runtimepath'. First ~/.config/nvim/filetype.vim is found. The
autocommand to catch *.txt files is defined there. Then Vim finds the autocommand to catch *.txt files is defined there. Then Vim finds the
filetype.vim file in $VIMRUNTIME, which is halfway 'runtimepath'. Finally filetype.vim file in $VIMRUNTIME, which is halfway 'runtimepath'. Finally
~/.vim/after/filetype.vim is found and the autocommand for detecting ruby ~/.config/nvim/after/filetype.vim is found and the autocommand for detecting
files in /usr/share/scripts is added. ruby files in /usr/share/scripts is added.
When you now edit /usr/share/scripts/README.txt, the autocommands are When you now edit /usr/share/scripts/README.txt, the autocommands are
checked in the order in which they were defined. The *.txt pattern matches, checked in the order in which they were defined. The *.txt pattern matches,
thus "setf text" is executed to set the filetype to "text". The pattern for thus "setf text" is executed to set the filetype to "text". The pattern for

View File

@@ -610,11 +610,11 @@ More about synchronizing in the reference manual: |:syn-sync|.
*44.11* Installing a syntax file *44.11* Installing a syntax file
When your new syntax file is ready to be used, drop it in a "syntax" directory When your new syntax file is ready to be used, drop it in a "syntax" directory
in 'runtimepath'. For Unix that would be "~/.vim/syntax". in 'runtimepath'. For Unix that would be "~/.config/nvim/syntax".
The name of the syntax file must be equal to the file type, with ".vim" The name of the syntax file must be equal to the file type, with ".vim"
added. Thus for the x language, the full path of the file would be: added. Thus for the x language, the full path of the file would be:
~/.vim/syntax/x.vim ~ ~/.config/nvim/syntax/x.vim ~
You must also make the file type be recognized. See |43.2|. You must also make the file type be recognized. See |43.2|.
@@ -640,7 +640,7 @@ Write the file with the same name as the original syntax file. In this case
"c.vim". Place it in a directory near the end of 'runtimepath'. This makes "c.vim". Place it in a directory near the end of 'runtimepath'. This makes
it loaded after the original syntax file. For Unix this would be: it loaded after the original syntax file. For Unix this would be:
~/.vim/after/syntax/c.vim ~ ~/.config/nvim/after/syntax/c.vim ~
============================================================================== ==============================================================================
*44.12* Portable syntax file layout *44.12* Portable syntax file layout

View File

@@ -129,7 +129,7 @@ this name, but with all letters made lowercase. Then copy the file to your
own runtime directory, as found early in 'runtimepath'. For example, for Unix own runtime directory, as found early in 'runtimepath'. For example, for Unix
you would do: > you would do: >
:!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.vim/lang/menu_nl_be.iso_8859-1.vim :!cp $VIMRUNTIME/lang/menu_ko_kr.euckr.vim ~/.config/nvim/lang/menu_nl_be.iso_8859-1.vim
You will find hints for the translation in "$VIMRUNTIME/lang/README.txt". You will find hints for the translation in "$VIMRUNTIME/lang/README.txt".
@@ -359,7 +359,7 @@ DO-IT-YOURSELF KEYMAPS
You can create your own keymap file. It's not very difficult. Start with You can create your own keymap file. It's not very difficult. Start with
a keymap file that is similar to the language you want to use. Copy it to the a keymap file that is similar to the language you want to use. Copy it to the
"keymap" directory in your runtime directory. For example, for Unix, you "keymap" directory in your runtime directory. For example, for Unix, you
would use the directory "~/.vim/keymap". would use the directory "~/.config/nvim/keymap".
The name of the keymap file must look like this: The name of the keymap file must look like this:
keymap/{name}.vim ~ keymap/{name}.vim ~

View File

@@ -33,7 +33,7 @@ CTRL-L Clear and redraw the screen. The redraw may happen
*N<Del>* *N<Del>*
<Del> When entering a number: Remove the last digit. <Del> When entering a number: Remove the last digit.
Note: if you like to use <BS> for this, add this Note: if you like to use <BS> for this, add this
mapping to your .vimrc: > mapping to your vimrc: >
:map CTRL-V <BS> CTRL-V <Del> :map CTRL-V <BS> CTRL-V <Del>
< <
:as[cii] or *ga* *:as* *:ascii* :as[cii] or *ga* *:as* *:ascii*

View File

@@ -21,10 +21,11 @@ these differences.
============================================================================== ==============================================================================
1. Configuration *nvim-configuration* 1. Configuration *nvim-configuration*
- Use `.nvimrc` instead of `.vimrc` for storing configuration. - Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for storing
- Use `.nvim` instead of `.vim` to store configuration files. configuration.
- Use `.nvim/shada/main.shada` instead of `.viminfo` for persistent session - Use `$XDG_CONFIG_HOME/nvim` instead of `.vim` to store configuration files.
information. - Use `$XDG_DATA_HOME/shada/main.shada` instead of `.viminfo` for persistent
session information.
============================================================================== ==============================================================================
2. Option defaults *nvim-option-defaults* 2. Option defaults *nvim-option-defaults*

View File

@@ -287,8 +287,8 @@ int main(int argc, char **argv)
* Set the default values for the options that use Rows and Columns. * Set the default values for the options that use Rows and Columns.
*/ */
win_init_size(); win_init_size();
/* Set the 'diff' option now, so that it can be checked for in a .vimrc // Set the 'diff' option now, so that it can be checked for in a vimrc
* file. There is no buffer yet though. */ // file. There is no buffer yet though.
if (params.diff_mode) if (params.diff_mode)
diff_win_options(firstwin, FALSE); diff_win_options(firstwin, FALSE);
@@ -345,7 +345,7 @@ int main(int argc, char **argv)
*/ */
load_plugins(); load_plugins();
/* Decide about window layout for diff mode after reading vimrc. */ // Decide about window layout for diff mode after reading vimrc.
set_window_layout(&params); set_window_layout(&params);
/* /*
@@ -358,10 +358,8 @@ int main(int argc, char **argv)
mch_exit(0); mch_exit(0);
} }
/* // Set a few option defaults after reading vimrc files:
* Set a few option defaults after reading .vimrc files: // 'title' and 'icon', Unix: 'shellpipe' and 'shellredir'.
* 'title' and 'icon', Unix: 'shellpipe' and 'shellredir'.
*/
set_init_3(); set_init_3();
TIME_MSG("inits 3"); TIME_MSG("inits 3");
@@ -1551,8 +1549,8 @@ static void create_windows(mparm_T *parmp)
if (parmp->window_count == 0) if (parmp->window_count == 0)
parmp->window_count = GARGCOUNT; parmp->window_count = GARGCOUNT;
if (parmp->window_count > 1) { if (parmp->window_count > 1) {
/* Don't change the windows if there was a command in .vimrc that // Don't change the windows if there was a command in vimrc that
* already split some windows */ // already split some windows
if (parmp->window_layout == 0) if (parmp->window_layout == 0)
parmp->window_layout = WIN_HOR; parmp->window_layout = WIN_HOR;
if (parmp->window_layout == WIN_TABS) { if (parmp->window_layout == WIN_TABS) {
@@ -1574,14 +1572,11 @@ static void create_windows(mparm_T *parmp)
getout(1); getout(1);
do_modelines(0); /* do modelines */ do_modelines(0); /* do modelines */
} else { } else {
/* // Open a buffer for windows that don't have one yet.
* Open a buffer for windows that don't have one yet. // Commands in the vimrc might have loaded a file or split the window.
* Commands in the .vimrc might have loaded a file or split the window. // Watch out for autocommands that delete a window.
* Watch out for autocommands that delete a window. //
*/ // Don't execute Win/Buf Enter/Leave autocommands here
/*
* Don't execute Win/Buf Enter/Leave autocommands here
*/
++autocmd_no_enter; ++autocmd_no_enter;
++autocmd_no_leave; ++autocmd_no_leave;
dorewind = TRUE; dorewind = TRUE;
@@ -1691,8 +1686,8 @@ static void edit_buffers(mparm_T *parmp)
} }
advance = TRUE; advance = TRUE;
/* Only open the file if there is no file in this window yet (that can // Only open the file if there is no file in this window yet (that can
* happen when .vimrc contains ":sall"). */ // happen when vimrc contains ":sall").
if (curbuf == firstwin->w_buffer || curbuf->b_ffname == NULL) { if (curbuf == firstwin->w_buffer || curbuf->b_ffname == NULL) {
curwin->w_arg_idx = arg_idx; curwin->w_arg_idx = arg_idx;
/* Edit file from arg list, if there is one. When "Quit" selected /* Edit file from arg list, if there is one. When "Quit" selected
@@ -1801,117 +1796,121 @@ static void exe_commands(mparm_T *parmp)
TIME_MSG("executing command arguments"); TIME_MSG("executing command arguments");
} }
/* /// Source vimrc or do other user initialization
* Source startup scripts. ///
*/ /// Does one of the following things, stops after whichever succeeds:
static void source_startup_scripts(mparm_T *parmp) ///
/// 1. Execution of VIMINIT environment variable.
/// 2. Sourcing user vimrc file ($XDG_CONFIG_HOME/nvim/init.vim).
/// 3. Sourcing other vimrc files ($XDG_CONFIG_DIRS[1]/nvim/init.vim, …).
/// 4. Execution of EXINIT environment variable.
///
/// @return True if it is needed to attempt to source exrc file according to
/// 'exrc' option definition.
static bool do_user_initialization(void)
FUNC_ATTR_WARN_UNUSED_RESULT
{ {
int i; bool do_exrc = p_exrc;
if (process_env("VIMINIT", true) == OK) {
return do_exrc;
}
char_u *user_vimrc = (char_u *)stdpaths_user_conf_subpath("init.vim");
if (do_source(user_vimrc, true, DOSO_VIMRC) != FAIL) {
if (do_exrc) {
do_exrc = (path_full_compare((char_u *)VIMRC_FILE, user_vimrc, false)
!= kEqualFiles);
}
xfree(user_vimrc);
return do_exrc;
}
xfree(user_vimrc);
char *const config_dirs = stdpaths_get_xdg_var(kXDGConfigDirs);
if (config_dirs != NULL) {
const void *iter = NULL;
do {
const char *dir;
size_t dir_len;
iter = vim_colon_env_iter(config_dirs, iter, &dir, &dir_len);
if (dir == NULL || dir_len == 0) {
break;
}
const char path_tail[] = { 'n', 'v', 'i', 'm', PATHSEP,
'i', 'n', 'i', 't', '.', 'v', 'i', 'm', NUL };
char *vimrc = xmalloc(dir_len + sizeof(path_tail) + 1);
memmove(vimrc, dir, dir_len);
vimrc[dir_len] = PATHSEP;
memmove(vimrc + dir_len + 1, path_tail, sizeof(path_tail));
if (do_source((char_u *) vimrc, true, DOSO_VIMRC) != FAIL) {
if (do_exrc) {
do_exrc = (path_full_compare((char_u *)VIMRC_FILE, (char_u *)vimrc,
false) != kEqualFiles);
}
xfree(vimrc);
xfree(config_dirs);
return do_exrc;
}
xfree(vimrc);
} while (iter != NULL);
xfree(config_dirs);
}
if (process_env("EXINIT", false) == OK) {
return do_exrc;
}
return do_exrc;
}
/* /// Source startup scripts
* If -u argument given, use only the initializations from that file and ///
* nothing else. /// @param[in]
*/ static void source_startup_scripts(const mparm_T *const parmp)
FUNC_ATTR_NONNULL_ALL
{
// If -u argument given, use only the initializations from that file and
// nothing else.
if (parmp->use_vimrc != NULL) { if (parmp->use_vimrc != NULL) {
if (strcmp(parmp->use_vimrc, "NONE") == 0 if (strcmp(parmp->use_vimrc, "NONE") == 0
|| strcmp(parmp->use_vimrc, "NORC") == 0) { || strcmp(parmp->use_vimrc, "NORC") == 0) {
if (parmp->use_vimrc[2] == 'N') if (parmp->use_vimrc[2] == 'N')
p_lpl = FALSE; // don't load plugins either p_lpl = false; // don't load plugins either
} else { } else {
if (do_source((char_u *)parmp->use_vimrc, FALSE, DOSO_NONE) != OK) if (do_source((char_u *)parmp->use_vimrc, FALSE, DOSO_NONE) != OK)
EMSG2(_("E282: Cannot read from \"%s\""), parmp->use_vimrc); EMSG2(_("E282: Cannot read from \"%s\""), parmp->use_vimrc);
} }
} else if (!silent_mode) { } else if (!silent_mode) {
/*
* Get system wide defaults, if the file name is defined.
*/
#ifdef SYS_VIMRC_FILE #ifdef SYS_VIMRC_FILE
(void)do_source((char_u *)SYS_VIMRC_FILE, FALSE, DOSO_NONE); // Get system wide defaults, if the file name is defined.
(void) do_source((char_u *)SYS_VIMRC_FILE, false, DOSO_NONE);
#endif #endif
/* if (do_user_initialization()) {
* Try to read initialization commands from the following places: // Read initialization commands from ".vimrc" or ".exrc" in current
* - environment variable VIMINIT // directory. This is only done if the 'exrc' option is set.
* - user vimrc file (~/.vimrc) // Because of security reasons we disallow shell and write commands
* - second user vimrc file ($VIM/.vimrc for Dos) // now, except for unix if the file is owned by the user or 'secure'
* - environment variable EXINIT // option has been reset in environment of global "exrc" or "vimrc".
* - user exrc file (~/.exrc) // Only do this if VIMRC_FILE is not the same as vimrc file sourced in
* - second user exrc file ($VIM/.exrc for Dos) // do_user_initialization.
* The first that exists is used, the rest is ignored.
*/
if (process_env("VIMINIT", true) != OK) {
if (do_source((char_u *)USR_VIMRC_FILE, TRUE, DOSO_VIMRC) == FAIL
#ifdef USR_VIMRC_FILE2
&& do_source((char_u *)USR_VIMRC_FILE2, TRUE,
DOSO_VIMRC) == FAIL
#endif
#ifdef USR_VIMRC_FILE3
&& do_source((char_u *)USR_VIMRC_FILE3, TRUE,
DOSO_VIMRC) == FAIL
#endif
&& process_env("EXINIT", FALSE) == FAIL
&& do_source((char_u *)USR_EXRC_FILE, FALSE, DOSO_NONE) == FAIL) {
#ifdef USR_EXRC_FILE2
(void)do_source((char_u *)USR_EXRC_FILE2, FALSE, DOSO_NONE);
#endif
}
}
/*
* Read initialization commands from ".vimrc" or ".exrc" in current
* directory. This is only done if the 'exrc' option is set.
* Because of security reasons we disallow shell and write commands
* now, except for unix if the file is owned by the user or 'secure'
* option has been reset in environment of global ".exrc" or ".vimrc".
* Only do this if VIMRC_FILE is not the same as USR_VIMRC_FILE or
* SYS_VIMRC_FILE.
*/
if (p_exrc) {
#if defined(UNIX) #if defined(UNIX)
/* If ".vimrc" file is not owned by user, set 'secure' mode. */ // If vimrc file is not owned by user, set 'secure' mode.
if (!file_owned(VIMRC_FILE)) if (!file_owned(VIMRC_FILE))
#endif #endif
secure = p_secure; secure = p_secure;
i = FAIL; if (do_source((char_u *)VIMRC_FILE, true, DOSO_VIMRC) == FAIL) {
if (path_full_compare((char_u *)USR_VIMRC_FILE,
(char_u *)VIMRC_FILE, FALSE) != kEqualFiles
#ifdef USR_VIMRC_FILE2
&& path_full_compare((char_u *)USR_VIMRC_FILE2,
(char_u *)VIMRC_FILE, FALSE) != kEqualFiles
#endif
#ifdef USR_VIMRC_FILE3
&& path_full_compare((char_u *)USR_VIMRC_FILE3,
(char_u *)VIMRC_FILE, FALSE) != kEqualFiles
#endif
#ifdef SYS_VIMRC_FILE
&& path_full_compare((char_u *)SYS_VIMRC_FILE,
(char_u *)VIMRC_FILE, FALSE) != kEqualFiles
#endif
)
i = do_source((char_u *)VIMRC_FILE, TRUE, DOSO_VIMRC);
if (i == FAIL) {
#if defined(UNIX) #if defined(UNIX)
/* if ".exrc" is not owned by user set 'secure' mode */ // if ".exrc" is not owned by user set 'secure' mode
if (!file_owned(EXRC_FILE)) if (!file_owned(EXRC_FILE)) {
secure = p_secure; secure = p_secure;
else } else {
secure = 0; secure = 0;
}
#endif #endif
if ( path_full_compare((char_u *)USR_EXRC_FILE, (void)do_source((char_u *)EXRC_FILE, false, DOSO_NONE);
(char_u *)EXRC_FILE, FALSE) != kEqualFiles
#ifdef USR_EXRC_FILE2
&& path_full_compare((char_u *)USR_EXRC_FILE2,
(char_u *)EXRC_FILE, FALSE) != kEqualFiles
#endif
)
(void)do_source((char_u *)EXRC_FILE, FALSE, DOSO_NONE);
} }
} }
if (secure == 2) if (secure == 2) {
need_wait_return = TRUE; need_wait_return = true;
}
secure = 0; secure = 0;
} }
did_source_startup_scripts = true; did_source_startup_scripts = true;
@@ -2042,7 +2041,7 @@ static void usage(void)
mch_msg(_(" -r, -L List swap files and exit\n")); mch_msg(_(" -r, -L List swap files and exit\n"));
mch_msg(_(" -r <file> Recover crashed session\n")); mch_msg(_(" -r <file> Recover crashed session\n"));
mch_msg(_(" -u <nvimrc> Use <nvimrc> instead of the default\n")); mch_msg(_(" -u <nvimrc> Use <nvimrc> instead of the default\n"));
mch_msg(_(" -i <shada> Use <shada> instead of the default " SHADA_FILE "\n")); // NOLINT(whitespace/line_length) mch_msg(_(" -i <shada> Use <shada> instead of the default\n"));
mch_msg(_(" --noplugin Don't load plugin scripts\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] Open N windows (default: one for each file)\n"));
mch_msg(_(" -O[N] Like -o but split vertically\n")); mch_msg(_(" -O[N] Like -o but split vertically\n"));

View File

@@ -406,10 +406,12 @@ void ml_setname(buf_T *buf)
* Try all directories in the 'directory' option. * Try all directories in the 'directory' option.
*/ */
dirp = p_dir; dirp = p_dir;
bool found_existing_dir = false;
for (;; ) { for (;; ) {
if (*dirp == NUL) /* tried all directories, fail */ if (*dirp == NUL) /* tried all directories, fail */
break; break;
fname = findswapname(buf, &dirp, mfp->mf_fname); fname = (char_u *)findswapname(buf, (char **)&dirp, (char *)mfp->mf_fname,
&found_existing_dir);
/* alloc's fname */ /* alloc's fname */
if (dirp == NULL) /* out of memory */ if (dirp == NULL) /* out of memory */
break; break;
@@ -504,13 +506,15 @@ void ml_open_file(buf_T *buf)
* Try all directories in 'directory' option. * Try all directories in 'directory' option.
*/ */
dirp = p_dir; dirp = p_dir;
bool found_existing_dir = false;
for (;; ) { for (;; ) {
if (*dirp == NUL) if (*dirp == NUL)
break; break;
/* There is a small chance that between choosing the swap file name // There is a small chance that between choosing the swap file name
* and creating it, another Vim creates the file. In that case the // and creating it, another Vim creates the file. In that case the
* creation will fail and we will use another directory. */ // creation will fail and we will use another directory.
fname = findswapname(buf, &dirp, NULL); /* allocates fname */ fname = (char_u *)findswapname(buf, (char **)&dirp, NULL,
&found_existing_dir);
if (dirp == NULL) if (dirp == NULL)
break; /* out of memory */ break; /* out of memory */
if (fname == NULL) if (fname == NULL)
@@ -3222,45 +3226,56 @@ static int do_swapexists(buf_T *buf, char_u *fname)
return 0; return 0;
} }
/* /// Find out what name to use for the swap file for buffer 'buf'.
* Find out what name to use for the swap file for buffer 'buf'. ///
* /// Several names are tried to find one that does not exist. Last directory in
* Several names are tried to find one that does not exist /// option is automatically created.
* Returns the name in allocated memory or NULL. ///
* When out of memory "dirp" is set to NULL. /// @note If BASENAMELEN is not correct, you will get error messages for
* /// not being able to open the swap or undo file.
* Note: If BASENAMELEN is not correct, you will get error messages for /// @note May trigger SwapExists autocmd, pointers may change!
* not being able to open the swap or undo file ///
* Note: May trigger SwapExists autocmd, pointers may change! /// @param[in] buf Buffer for which swap file names needs to be found.
*/ /// @param[in,out] dirp Pointer to a list of directories. When out of memory,
static char_u * /// is set to NULL. Is advanced to the next directory in
findswapname ( /// the list otherwise.
buf_T *buf, /// @param[in] old_fname Allowed existing swap file name. Except for this
char_u **dirp, /* pointer to list of directories */ /// case, name of the non-existing file is used.
char_u *old_fname /* don't give warning for this file name */ /// @param[in,out] found_existing_dir If points to true, then new directory
) /// for swap file is not created. At first
/// findswapname() call this argument must
/// point to false. This parameter may only
/// be set to true by this function, it is
/// never set to false.
///
/// @return [allocated] Name of the swap file.
static char *findswapname(buf_T *buf, char **dirp, char *old_fname,
bool *found_existing_dir)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ARG(1, 2, 4)
{ {
char_u *fname; char *fname;
int n; size_t n;
char_u *dir_name; char *dir_name;
char_u *buf_fname = buf->b_fname; char *buf_fname = (char *) buf->b_fname;
/* /*
* Isolate a directory name from *dirp and put it in dir_name. * Isolate a directory name from *dirp and put it in dir_name.
* First allocate some memory to put the directory name in. * First allocate some memory to put the directory name in.
*/ */
dir_name = xmalloc(STRLEN(*dirp) + 1); const size_t dir_len = strlen(*dirp);
(void)copy_option_part(dirp, dir_name, 31000, ","); dir_name = xmalloc(dir_len + 1);
(void)copy_option_part((char_u **) dirp, (char_u *) dir_name, dir_len, ",");
/* /*
* we try different names until we find one that does not exist yet * we try different names until we find one that does not exist yet
*/ */
fname = makeswapname(buf_fname, buf->b_ffname, buf, dir_name); fname = (char *)makeswapname((char_u *)buf_fname, buf->b_ffname, buf,
(char_u *)dir_name);
for (;; ) { for (;; ) {
if (fname == NULL) /* must be out of memory */ if (fname == NULL) /* must be out of memory */
break; break;
if ((n = (int)STRLEN(fname)) == 0) { /* safety check */ if ((n = strlen(fname)) == 0) { /* safety check */
xfree(fname); xfree(fname);
fname = NULL; fname = NULL;
break; break;
@@ -3269,7 +3284,7 @@ findswapname (
// Extra security check: When a swap file is a symbolic link, this // Extra security check: When a swap file is a symbolic link, this
// is most likely a symlink attack. // is most likely a symlink attack.
FileInfo file_info; FileInfo file_info;
bool file_or_link_found = os_fileinfo_link((char *)fname, &file_info); bool file_or_link_found = os_fileinfo_link(fname, &file_info);
if (!file_or_link_found) { if (!file_or_link_found) {
break; break;
} }
@@ -3300,7 +3315,7 @@ findswapname (
* Try to read block 0 from the swap file to get the original * Try to read block 0 from the swap file to get the original
* file name (and inode number). * file name (and inode number).
*/ */
fd = os_open((char *)fname, O_RDONLY, 0); fd = os_open(fname, O_RDONLY, 0);
if (fd >= 0) { if (fd >= 0) {
if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0)) { if (read_eintr(fd, &b0, sizeof(b0)) == sizeof(b0)) {
/* /*
@@ -3311,7 +3326,7 @@ findswapname (
if (b0.b0_flags & B0_SAME_DIR) { if (b0.b0_flags & B0_SAME_DIR) {
if (fnamecmp(path_tail(buf->b_ffname), if (fnamecmp(path_tail(buf->b_ffname),
path_tail(b0.b0_fname)) != 0 path_tail(b0.b0_fname)) != 0
|| !same_directory(fname, buf->b_ffname)) { || !same_directory((char_u *) fname, buf->b_ffname)) {
/* Symlinks may point to the same file even /* Symlinks may point to the same file even
* when the name differs, need to check the * when the name differs, need to check the
* inode too. */ * inode too. */
@@ -3351,12 +3366,12 @@ findswapname (
* user anyway. * user anyway.
*/ */
if (swap_exists_action != SEA_NONE if (swap_exists_action != SEA_NONE
&& has_autocmd(EVENT_SWAPEXISTS, buf_fname, buf)) && has_autocmd(EVENT_SWAPEXISTS, (char_u *) buf_fname, buf))
choice = do_swapexists(buf, fname); choice = do_swapexists(buf, (char_u *) fname);
if (choice == 0) { if (choice == 0) {
/* Show info about the existing swap file. */ /* Show info about the existing swap file. */
attention_message(buf, fname); attention_message(buf, (char_u *) fname);
/* We don't want a 'q' typed at the more-prompt /* We don't want a 'q' typed at the more-prompt
* interrupt loading a file. */ * interrupt loading a file. */
@@ -3364,20 +3379,21 @@ findswapname (
} }
if (swap_exists_action != SEA_NONE && choice == 0) { if (swap_exists_action != SEA_NONE && choice == 0) {
char_u *name; char *name;
name = xmalloc(STRLEN(fname) const size_t fname_len = strlen(fname);
+ STRLEN(_("Swap file \"")) name = xmalloc(fname_len
+ STRLEN(_("\" already exists!")) + 5); + strlen(_("Swap file \""))
+ strlen(_("\" already exists!")) + 5);
STRCPY(name, _("Swap file \"")); STRCPY(name, _("Swap file \""));
home_replace(NULL, fname, name + STRLEN(name), home_replace(NULL, (char_u *) fname, (char_u *)&name[strlen(name)],
1000, TRUE); fname_len, true);
STRCAT(name, _("\" already exists!")); STRCAT(name, _("\" already exists!"));
choice = do_dialog(VIM_WARNING, choice = do_dialog(VIM_WARNING,
(char_u *)_("VIM - ATTENTION"), (char_u *)_("VIM - ATTENTION"),
name == NULL (char_u *)(name == NULL
? (char_u *)_("Swap file already exists!") ? _("Swap file already exists!")
: name, : name),
# if defined(UNIX) # if defined(UNIX)
process_still_running process_still_running
? (char_u *)_( ? (char_u *)_(
@@ -3409,7 +3425,7 @@ findswapname (
swap_exists_action = SEA_RECOVER; swap_exists_action = SEA_RECOVER;
break; break;
case 4: case 4:
os_remove((char *)fname); os_remove(fname);
break; break;
case 5: case 5:
swap_exists_action = SEA_QUIT; swap_exists_action = SEA_QUIT;
@@ -3421,7 +3437,7 @@ findswapname (
} }
/* If the file was deleted this fname can be used. */ /* If the file was deleted this fname can be used. */
if (!os_file_exists(fname)) if (!os_file_exists((char_u *) fname))
break; break;
} else } else
{ {
@@ -3454,6 +3470,19 @@ findswapname (
--fname[n - 1]; /* ".swo", ".swn", etc. */ --fname[n - 1]; /* ".swo", ".swn", etc. */
} }
if (os_isdir((char_u *) dir_name)) {
*found_existing_dir = true;
} else if (!*found_existing_dir && **dirp == NUL) {
int ret;
char *failed_dir;
if ((ret = os_mkdir_recurse(dir_name, 0755, &failed_dir)) != 0) {
EMSG3(_("E303: Unable to create directory \"%s\" for swap file, "
"recovery impossible: %s"),
failed_dir, os_strerror(ret));
xfree(failed_dir);
}
}
xfree(dir_name); xfree(dir_name);
return fname; return fname;
} }

View File

@@ -301,6 +301,243 @@ static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview",
# include "option.c.generated.h" # include "option.c.generated.h"
#endif #endif
/// Append string with escaped commas
static char *strcpy_comma_escaped(char *dest, const char *src, const size_t len)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_WARN_UNUSED_RESULT
{
size_t shift = 0;
for (size_t i = 0; i < len; i++) {
if (src[i] == ',') {
dest[i + shift++] = '\\';
}
dest[i + shift] = src[i];
}
return &dest[len + shift];
}
/// Compute length of a colon-separated value, doubled and with some suffixes
///
/// @param[in] val Colon-separated array value.
/// @param[in] common_suf_len Length of the common suffix which is appended to
/// each item in the array, twice.
/// @param[in] single_suf_len Length of the suffix which is appended to each
/// item in the array once.
///
/// @return Length of the comma-separated string array that contains each item
/// in the original array twice with suffixes with given length
/// (common_suf is present after each new item, single_suf is present
/// after half of the new items) and with commas after each item, commas
/// inside the values are escaped.
static inline size_t compute_double_colon_len(const char *const val,
const size_t common_suf_len,
const size_t single_suf_len)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_PURE
{
if (val == NULL && *val) {
return 0;
}
size_t ret = 0;
const void *iter = NULL;
do {
size_t dir_len;
const char *dir;
iter = vim_colon_env_iter(val, iter, &dir, &dir_len);
if (dir != NULL && dir_len > 0) {
ret += ((dir_len + memcnt(dir, ',', dir_len) + common_suf_len
+ !after_pathsep(dir, dir + dir_len)) * 2
+ single_suf_len);
}
} while (iter != NULL);
return ret;
}
#define NVIM_SIZE (sizeof("nvim") - 1)
/// Add directories to a comma-separated array from a colon-separated one
///
/// Commas are escaped in process. To each item PATHSEP "nvim" is appended in
/// addition to suf1 and suf2.
///
/// @param[in,out] dest Destination comma-separated array.
/// @param[in] val Source colon-separated array.
/// @param[in] suf1 If not NULL, suffix appended to destination. Prior to it
/// directory separator is appended. Suffix must not contain
/// commas.
/// @param[in] len1 Length of the suf1.
/// @param[in] suf2 If not NULL, another suffix appended to destination. Again
/// with directory separator behind. Suffix must not contain
/// commas.
/// @param[in] len2 Length of the suf2.
/// @param[in] forward If true, iterate over val in forward direction.
/// Otherwise in reverse.
///
/// @return (dest + appended_characters_length)
static inline char *add_colon_dirs(char *dest, const char *const val,
const char *const suf1, const size_t len1,
const char *const suf2, const size_t len2,
const bool forward)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ARG(1)
{
if (val == NULL && *val) {
return dest;
}
const void *iter = NULL;
do {
size_t dir_len;
const char *dir;
iter = (forward ? vim_colon_env_iter : vim_colon_env_iter_rev)(
val, iter, &dir, &dir_len);
if (dir != NULL && dir_len > 0) {
dest = strcpy_comma_escaped(dest, dir, dir_len);
if (!after_pathsep(dest - 1, dest)) {
*dest++ = PATHSEP;
}
memmove(dest, "nvim", NVIM_SIZE);
dest += NVIM_SIZE;
if (suf1 != NULL) {
*dest++ = PATHSEP;
memmove(dest, suf1, len1);
dest += len1;
if (suf2 != NULL) {
*dest++ = PATHSEP;
memmove(dest, suf2, len2);
dest += len2;
}
}
*dest++ = ',';
}
} while (iter != NULL);
return dest;
}
/// Add directory to a comma-separated list of directories
///
/// In the added directory comma is escaped.
///
/// @param[in,out] dest Destination comma-separated array.
/// @param[in] dir Directory to append.
/// @param[in] append_nvim If true, append "nvim" as the very first suffix.
/// @param[in] suf1 If not NULL, suffix appended to destination. Prior to it
/// directory separator is appended. Suffix must not contain
/// commas.
/// @param[in] len1 Length of the suf1.
/// @param[in] suf2 If not NULL, another suffix appended to destination. Again
/// with directory separator behind. Suffix must not contain
/// commas.
/// @param[in] len2 Length of the suf2.
/// @param[in] forward If true, iterate over val in forward direction.
/// Otherwise in reverse.
///
/// @return (dest + appended_characters_length)
static inline char *add_dir(char *dest, const char *const dir,
const size_t dir_len, const bool append_nvim,
const char *const suf1, const size_t len1,
const char *const suf2, const size_t len2)
FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ARG(1) FUNC_ATTR_WARN_UNUSED_RESULT
{
if (dir == NULL && dir_len != 0) {
return dest;
}
dest = strcpy_comma_escaped(dest, dir, dir_len);
if (append_nvim) {
if (!after_pathsep(dest - 1, dest)) {
*dest++ = PATHSEP;
}
memmove(dest, "nvim", NVIM_SIZE);
dest += NVIM_SIZE;
if (suf1 != NULL) {
*dest++ = PATHSEP;
memmove(dest, suf1, len1);
dest += len1;
if (suf2 != NULL) {
*dest++ = PATHSEP;
memmove(dest, suf2, len2);
dest += len2;
}
}
}
*dest++ = ',';
return dest;
}
/// Set &runtimepath to default value
static void set_runtimepath_default(void)
{
size_t rtp_size = 0;
char *const data_home = stdpaths_get_xdg_var(kXDGDataHome);
char *const config_home = stdpaths_get_xdg_var(kXDGConfigHome);
char *const vimruntime = vim_getenv("VIMRUNTIME");
char *const data_dirs = stdpaths_get_xdg_var(kXDGDataDirs);
char *const config_dirs = stdpaths_get_xdg_var(kXDGConfigDirs);
#define SITE_SIZE (sizeof("site") - 1)
#define AFTER_SIZE (sizeof("after") - 1)
size_t data_len = 0;
size_t config_len = 0;
size_t vimruntime_len = 0;
if (data_home != NULL) {
data_len = strlen(data_home);
if (data_len != 0) {
rtp_size += ((data_len + memcnt(data_home, ',', data_len)
+ NVIM_SIZE + 1 + SITE_SIZE + 1
+ !after_pathsep(data_home, data_home + data_len)) * 2
+ AFTER_SIZE + 1);
}
}
if (config_home != NULL) {
config_len = strlen(config_home);
if (config_len != 0) {
rtp_size += ((config_len + memcnt(config_home, ',', config_len)
+ NVIM_SIZE + 1
+ !after_pathsep(config_home, config_home + config_len)) * 2
+ AFTER_SIZE + 1);
}
}
if (vimruntime != NULL) {
vimruntime_len = strlen(vimruntime);
if (vimruntime_len != 0) {
rtp_size += vimruntime_len + memcnt(vimruntime, ',', vimruntime_len) + 1;
}
}
rtp_size += compute_double_colon_len(data_dirs, NVIM_SIZE + 1 + SITE_SIZE + 1,
AFTER_SIZE + 1);
rtp_size += compute_double_colon_len(config_dirs, NVIM_SIZE + 1,
AFTER_SIZE + 1);
if (rtp_size == 0) {
return;
}
char *const rtp = xmalloc(rtp_size);
char *rtp_cur = rtp;
rtp_cur = add_dir(rtp_cur, config_home, config_len, true, NULL, 0, NULL, 0);
rtp_cur = add_colon_dirs(rtp_cur, config_dirs, NULL, 0, NULL, 0, true);
rtp_cur = add_dir(rtp_cur, data_home, data_len, true, "site", SITE_SIZE,
NULL, 0);
rtp_cur = add_colon_dirs(rtp_cur, data_dirs, "site", SITE_SIZE, NULL, 0,
true);
rtp_cur = add_dir(rtp_cur, vimruntime, vimruntime_len, false, NULL, 0,
NULL, 0);
rtp_cur = add_colon_dirs(rtp_cur, data_dirs, "site", SITE_SIZE,
"after", AFTER_SIZE, false);
rtp_cur = add_dir(rtp_cur, data_home, data_len, true, "site", SITE_SIZE,
"after", AFTER_SIZE);
rtp_cur = add_colon_dirs(rtp_cur, config_dirs, "after", AFTER_SIZE, NULL, 0,
false);
rtp_cur = add_dir(rtp_cur, config_home, config_len, true,
"after", AFTER_SIZE, NULL, 0);
// Strip trailing comma.
rtp_cur[-1] = NUL;
assert((size_t) (rtp_cur - rtp) == rtp_size);
#undef SITE_SIZE
#undef AFTER_SIZE
set_string_default("runtimepath", rtp, true);
xfree(data_dirs);
xfree(config_dirs);
xfree(data_home);
xfree(config_home);
xfree(vimruntime);
}
#undef NVIM_SIZE
/* /*
* Initialize the options, first part. * Initialize the options, first part.
* *
@@ -308,7 +545,6 @@ static char *(p_cot_values[]) = {"menu", "menuone", "longest", "preview",
*/ */
void set_init_1(void) void set_init_1(void)
{ {
char_u *p;
int opt_idx; int opt_idx;
langmap_init(); langmap_init();
@@ -320,8 +556,12 @@ void set_init_1(void)
* Find default value for 'shell' option. * Find default value for 'shell' option.
* Don't use it if it is empty. * Don't use it if it is empty.
*/ */
if ((p = (char_u *)os_getenv("SHELL")) != NULL) {
set_string_default("sh", p); const char *shell = os_getenv("SHELL");
if (shell != NULL) {
set_string_default("sh", (char *) shell, false);
}
}
/* /*
* Set the default for 'backupskip' to include environment variables for * Set the default for 'backupskip' to include environment variables for
@@ -339,17 +579,18 @@ void set_init_1(void)
ga_init(&ga, 1, 100); ga_init(&ga, 1, 100);
for (size_t n = 0; n < ARRAY_SIZE(names); ++n) { for (size_t n = 0; n < ARRAY_SIZE(names); ++n) {
bool mustfree = true; bool mustfree = true;
char *p;
# ifdef UNIX # ifdef UNIX
if (*names[n] == NUL) { if (*names[n] == NUL) {
p = (char_u *)"/tmp"; p = "/tmp";
mustfree = false; mustfree = false;
} }
else else
# endif # endif
p = (char_u *)vim_getenv(names[n]); p = vim_getenv(names[n]);
if (p != NULL && *p != NUL) { if (p != NULL && *p != NUL) {
// First time count the NUL, otherwise count the ','. // First time count the NUL, otherwise count the ','.
len = (int)STRLEN(p) + 3; len = (int)strlen(p) + 3;
ga_grow(&ga, len); ga_grow(&ga, len);
if (!GA_EMPTY(&ga)) if (!GA_EMPTY(&ga))
STRCAT(ga.ga_data, ","); STRCAT(ga.ga_data, ",");
@@ -363,8 +604,7 @@ void set_init_1(void)
} }
} }
if (ga.ga_data != NULL) { if (ga.ga_data != NULL) {
set_string_default("bsk", ga.ga_data); set_string_default("bsk", ga.ga_data, true);
xfree(ga.ga_data);
} }
} }
@@ -425,17 +665,34 @@ void set_init_1(void)
#if defined(MSWIN) || defined(MAC) #if defined(MSWIN) || defined(MAC)
/* Set print encoding on platforms that don't default to latin1 */ /* Set print encoding on platforms that don't default to latin1 */
set_string_default("penc", set_string_default("printencoding", "hp-roman8", false);
(char_u *)"hp-roman8"
);
#endif #endif
/* 'printexpr' must be allocated to be able to evaluate it. */ // 'printexpr' must be allocated to be able to evaluate it.
set_string_default( set_string_default("printexpr",
"pexpr", #ifdef UNIX
(char_u *) "system(['lpr'] "
"system('lpr' . (&printdevice == '' ? '' : ' -P' . &printdevice) . ' ' . v:fname_in) . delete(v:fname_in) + v:shell_error" "+ (empty(&printdevice)?[]:['-P', &printdevice]) "
); "+ [v:fname_in])"
". delete(v:fname_in)"
"+ v:shell_error",
#elif defined(MSWIN)
"system(['copy', v:fname_in, "
"empty(&printdevice)?'LPT1':&printdevice])"
". delete(v:fname_in)",
#else
"",
#endif
false);
set_string_default("viewdir", stdpaths_user_data_subpath("view", 0), true);
set_string_default("backupdir", stdpaths_user_data_subpath("backup", 0),
true);
set_string_default("directory", stdpaths_user_data_subpath("swap", 2), true);
set_string_default("undodir", stdpaths_user_data_subpath("undo", 0), true);
// Set default for &runtimepath. All necessary expansions are performed in
// this function.
set_runtimepath_default();
/* /*
* Set all the options (except the terminal options) to their default * Set all the options (except the terminal options) to their default
@@ -478,14 +735,16 @@ void set_init_1(void)
* default. * default.
*/ */
for (opt_idx = 0; options[opt_idx].fullname; opt_idx++) { for (opt_idx = 0; options[opt_idx].fullname; opt_idx++) {
char *p;
if ((options[opt_idx].flags & P_GETTEXT) if ((options[opt_idx].flags & P_GETTEXT)
&& options[opt_idx].var != NULL) && options[opt_idx].var != NULL) {
p = (char_u *)_(*(char **)options[opt_idx].var); p = _(*(char **)options[opt_idx].var);
else } else {
p = option_expand(opt_idx, NULL); p = (char *) option_expand(opt_idx, NULL);
}
if (p != NULL) { if (p != NULL) {
p = vim_strsave(p); p = xstrdup(p);
*(char_u **)options[opt_idx].var = p; *(char **)options[opt_idx].var = p;
/* VIMEXP /* VIMEXP
* Defaults for all expanded options are currently the same for Vi * Defaults for all expanded options are currently the same for Vi
* and Vim. When this changes, add some code here! Also need to * and Vim. When this changes, add some code here! Also need to
@@ -493,7 +752,7 @@ void set_init_1(void)
*/ */
if (options[opt_idx].flags & P_DEF_ALLOCED) if (options[opt_idx].flags & P_DEF_ALLOCED)
xfree(options[opt_idx].def_val[VI_DEFAULT]); xfree(options[opt_idx].def_val[VI_DEFAULT]);
options[opt_idx].def_val[VI_DEFAULT] = p; options[opt_idx].def_val[VI_DEFAULT] = (char_u *) p;
options[opt_idx].flags |= P_DEF_ALLOCED; options[opt_idx].flags |= P_DEF_ALLOCED;
} }
} }
@@ -522,14 +781,14 @@ void set_init_1(void)
(void)set_chars_option(&p_lcs); (void)set_chars_option(&p_lcs);
/* enc_locale() will try to find the encoding of the current locale. */ /* enc_locale() will try to find the encoding of the current locale. */
p = enc_locale(); char_u *p = enc_locale();
if (p != NULL) { if (p != NULL) {
char_u *save_enc; char_u *save_enc;
/* Try setting 'encoding' and check if the value is valid. /* Try setting 'encoding' and check if the value is valid.
* If not, go back to the default "utf-8". */ * If not, go back to the default "utf-8". */
save_enc = p_enc; save_enc = p_enc;
p_enc = p; p_enc = (char_u *) p;
if (STRCMP(p_enc, "gb18030") == 0) { if (STRCMP(p_enc, "gb18030") == 0) {
/* We don't support "gb18030", but "cp936" is a good substitute /* We don't support "gb18030", but "cp936" is a good substitute
* for practical purposes, thus use that. It's not an alias to * for practical purposes, thus use that. It's not an alias to
@@ -674,7 +933,9 @@ set_options_default (
/// ///
/// @param name The name of the option /// @param name The name of the option
/// @param val The value of the option /// @param val The value of the option
void set_string_default(const char *name, const char_u *val) /// @param allocated If true, do not copy default as it was already allocated.
static void set_string_default(const char *name, char *val, bool allocated)
FUNC_ATTR_NONNULL_ALL
{ {
int opt_idx = findoption((char_u *)name); int opt_idx = findoption((char_u *)name);
if (opt_idx >= 0) { if (opt_idx >= 0) {
@@ -682,7 +943,10 @@ void set_string_default(const char *name, const char_u *val)
xfree(options[opt_idx].def_val[VI_DEFAULT]); xfree(options[opt_idx].def_val[VI_DEFAULT]);
} }
options[opt_idx].def_val[VI_DEFAULT] = (char_u *) xstrdup((char *) val); options[opt_idx].def_val[VI_DEFAULT] = (char_u *) (
allocated
? (char_u *) val
: (char_u *) xstrdup(val));
options[opt_idx].flags |= P_DEF_ALLOCED; options[opt_idx].flags |= P_DEF_ALLOCED;
} }
} }
@@ -5948,7 +6212,7 @@ static void paste_option_changed(void)
old_p_paste = p_paste; old_p_paste = p_paste;
} }
/// vimrc_found() - Called when a ".vimrc" or "VIMINIT" has been found. /// vimrc_found() - Called when a vimrc or "VIMINIT" has been found.
/// ///
/// Set the values for options that didn't get set yet to the Vim defaults. /// Set the values for options that didn't get set yet to the Vim defaults.
/// When "fname" is not NULL, use it to set $"envname" when it wasn't set yet. /// When "fname" is not NULL, use it to set $"envname" when it wasn't set yet.

View File

@@ -176,7 +176,7 @@ return {
vi_def=true, vi_def=true,
expand=true, expand=true,
varname='p_bdir', varname='p_bdir',
defaults={if_true={vi=macros('DFLT_BDIR')}} defaults={if_true={vi=''}}
}, },
{ {
full_name='backupext', abbreviation='bex', full_name='backupext', abbreviation='bex',
@@ -627,7 +627,7 @@ return {
vi_def=true, vi_def=true,
expand=true, expand=true,
varname='p_dir', varname='p_dir',
defaults={if_true={vi=macros('DFLT_DIR')}} defaults={if_true={vi=''}}
}, },
{ {
full_name='display', abbreviation='dy', full_name='display', abbreviation='dy',
@@ -1916,7 +1916,7 @@ return {
vi_def=true, vi_def=true,
expand=true, expand=true,
varname='p_rtp', varname='p_rtp',
defaults={if_true={vi=macros('DFLT_RUNTIMEPATH')}} defaults={if_true={vi=''}}
}, },
{ {
full_name='scroll', abbreviation='scr', full_name='scroll', abbreviation='scr',
@@ -2524,7 +2524,7 @@ return {
vi_def=true, vi_def=true,
expand=true, expand=true,
varname='p_udir', varname='p_udir',
defaults={if_true={vi="."}} defaults={if_true={vi=''}}
}, },
{ {
full_name='undofile', abbreviation='udf', full_name='undofile', abbreviation='udf',
@@ -2585,7 +2585,7 @@ return {
vi_def=true, vi_def=true,
expand=true, expand=true,
varname='p_vdir', varname='p_vdir',
defaults={if_true={vi=macros('DFLT_VDIR')}} defaults={if_true={vi=''}}
}, },
{ {
full_name='viewoptions', abbreviation='vop', full_name='viewoptions', abbreviation='vop',

View File

@@ -415,6 +415,74 @@ static char *remove_tail(char *p, char *pend, char *name)
return pend; return pend;
} }
/// Iterate over colon-separated list
///
/// @note Environment variables must not be modified during iteration.
///
/// @param[in] val Value of the environment variable to iterate over.
/// @param[in] iter Pointer used for iteration. Must be NULL on first
/// iteration.
/// @param[out] dir Location where pointer to the start of the current
/// directory name should be saved. May be set to NULL.
/// @param[out] len Location where current directory length should be saved.
///
/// @return Next iter argument value or NULL when iteration should stop.
const void *vim_colon_env_iter(const char *const val,
const void *const iter,
const char **const dir,
size_t *const len)
FUNC_ATTR_NONNULL_ARG(1, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT
{
const char *varval = (const char *) iter;
if (varval == NULL) {
varval = val;
}
*dir = varval;
const char *const dirend = strchr(varval, ':');
if (dirend == NULL) {
*len = strlen(varval);
return NULL;
} else {
*len = (size_t) (dirend - varval);
return dirend + 1;
}
}
/// Iterate over colon-separated list in reverse order
///
/// @note Environment variables must not be modified during iteration.
///
/// @param[in] val Value of the environment variable to iterate over.
/// @param[in] iter Pointer used for iteration. Must be NULL on first
/// iteration.
/// @param[out] dir Location where pointer to the start of the current
/// directory name should be saved. May be set to NULL.
/// @param[out] len Location where current directory length should be saved.
///
/// @return Next iter argument value or NULL when iteration should stop.
const void *vim_colon_env_iter_rev(const char *const val,
const void *const iter,
const char **const dir,
size_t *const len)
FUNC_ATTR_NONNULL_ARG(1, 3, 4) FUNC_ATTR_WARN_UNUSED_RESULT
{
const char *varend = (const char *) iter;
if (varend == NULL) {
varend = val + strlen(val) - 1;
}
const size_t varlen = (size_t) (varend - val) + 1;
const char *const colon = xmemrchr(val, ':', varlen);
if (colon == NULL) {
*len = varlen;
*dir = val;
return NULL;
} else {
*dir = colon + 1;
*len = (size_t) (varend - colon);
return colon - 1;
}
}
/// Vim's version of getenv(). /// Vim's version of getenv().
/// Special handling of $HOME, $VIM and $VIMRUNTIME, allowing the user to /// Special handling of $HOME, $VIM and $VIMRUNTIME, allowing the user to
/// override the vim runtime directory at runtime. Also does ACP to 'enc' /// override the vim runtime directory at runtime. Also does ACP to 'enc'

View File

@@ -366,11 +366,17 @@ int os_mkdir_recurse(const char *const dir, int32_t mode,
} }
while (e != real_end) { while (e != real_end) {
if (e > past_head) { if (e > past_head) {
*e = '/'; *e = PATHSEP;
} else { } else {
*past_head = past_head_save; *past_head = past_head_save;
} }
e += strlen(e); const size_t component_len = strlen(e);
e += component_len;
if (e == real_end
&& memcnt(e - component_len, PATHSEP, component_len) == component_len) {
// Path ends with something like "////". Ignore this.
break;
}
int ret; int ret;
if ((ret = os_mkdir(curdir, mode)) != 0) { if ((ret = os_mkdir(curdir, mode)) != 0) {
*failed_dir = curdir; *failed_dir = curdir;

View File

@@ -5,6 +5,7 @@
#include <uv.h> #include <uv.h>
#include "nvim/os/fs_defs.h" #include "nvim/os/fs_defs.h"
#include "nvim/os/stdpaths_defs.h"
#include "nvim/vim.h" #include "nvim/vim.h"
#ifdef INCLUDE_GENERATED_DECLARATIONS #ifdef INCLUDE_GENERATED_DECLARATIONS
@@ -12,6 +13,7 @@
# include "os/mem.h.generated.h" # include "os/mem.h.generated.h"
# include "os/env.h.generated.h" # include "os/env.h.generated.h"
# include "os/users.h.generated.h" # include "os/users.h.generated.h"
# include "os/stdpaths.h.generated.h"
#endif #endif
#endif // NVIM_OS_OS_H #endif // NVIM_OS_OS_H

108
src/nvim/os/stdpaths.c Normal file
View File

@@ -0,0 +1,108 @@
#include <stdbool.h>
#include "nvim/os/stdpaths_defs.h"
#include "nvim/os/os.h"
#include "nvim/path.h"
#include "nvim/memory.h"
#include "nvim/ascii.h"
/// Names of the environment variables, mapped to XDGVarType values
static const char *xdg_env_vars[] = {
[kXDGConfigHome] = "XDG_CONFIG_HOME",
[kXDGDataHome] = "XDG_DATA_HOME",
[kXDGCacheHome] = "XDG_CACHE_HOME",
[kXDGRuntimeDir] = "XDG_RUNTIME_DIR",
[kXDGConfigDirs] = "XDG_CONFIG_DIRS",
[kXDGDataDirs] = "XDG_DATA_DIRS",
};
/// Defaults for XDGVarType values
///
/// Used in case environment variables contain nothing. Need to be expanded.
static const char *const xdg_defaults[] = {
#ifdef WIN32
// Windows
[kXDGConfigHome] = "$LOCALAPPDATA\\nvim\\config",
[kXDGDataHome] = "$LOCALAPPDATA\\nvim\\data",
[kXDGCacheHome] = "$LOCALAPPDATA\\nvim\\cache",
[kXDGRuntimeDir] = "",
[kXDGConfigDirs] = NULL,
[kXDGDataDirs] = NULL,
#else
// Linux, BSD, CYGWIN, Apple
[kXDGConfigHome] = "~/.config",
[kXDGDataHome] = "~/.local/share",
[kXDGCacheHome] = "~/.cache",
[kXDGRuntimeDir] = "",
[kXDGConfigDirs] = "/etc/xdg/",
[kXDGDataDirs] = "/usr/local/share/:/usr/share/",
#endif
};
/// Return XDG variable value
///
/// @param[in] idx XDG variable to use.
///
/// @return [allocated] variable value.
char *stdpaths_get_xdg_var(const XDGVarType idx)
FUNC_ATTR_WARN_UNUSED_RESULT
{
const char *const env = xdg_env_vars[idx];
const char *const fallback = xdg_defaults[idx];
const char *const env_val = os_getenv(env);
char *ret = NULL;
if (env_val != NULL) {
ret = xstrdup(env_val);
} else if (fallback) {
ret = (char *) expand_env_save((char_u *)fallback);
}
return ret;
}
/// Return nvim-specific XDG directory subpath
///
/// @param[in] idx XDG directory to use.
///
/// @return [allocated] `{xdg_directory}/nvim`
static char *get_xdg_home(const XDGVarType idx)
FUNC_ATTR_WARN_UNUSED_RESULT
{
char *dir = stdpaths_get_xdg_var(idx);
if (dir) {
dir = concat_fnames_realloc(dir, "nvim", true);
}
return dir;
}
/// Return subpath of $XDG_CONFIG_HOME
///
/// @param[in] fname New component of the path.
///
/// @return [allocated] `$XDG_CONFIG_HOME/nvim/{fname}`
char *stdpaths_user_conf_subpath(const char *fname)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
return concat_fnames_realloc(get_xdg_home(kXDGConfigHome), fname, true);
}
/// Return subpath of $XDG_DATA_HOME
///
/// @param[in] fname New component of the path.
/// @param[in] trailing_pathseps Amount of trailing path separators to add.
///
/// @return [allocated] `$XDG_DATA_HOME/nvim/{fname}`
char *stdpaths_user_data_subpath(const char *fname,
const size_t trailing_pathseps)
FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
{
char *ret = concat_fnames_realloc(get_xdg_home(kXDGDataHome), fname, true);
if (trailing_pathseps) {
const size_t len = strlen(ret);
ret = xrealloc(ret, len + trailing_pathseps + 1);
memset(ret + len, PATHSEP, trailing_pathseps);
ret[len + trailing_pathseps] = NUL;
}
return ret;
}

View File

@@ -0,0 +1,14 @@
#ifndef NVIM_OS_STDPATHS_DEFS_H
#define NVIM_OS_STDPATHS_DEFS_H
/// List of possible XDG variables
typedef enum {
kXDGConfigHome, ///< XDG_CONFIG_HOME
kXDGDataHome, ///< XDG_DATA_HOME
kXDGCacheHome, ///< XDG_CACHE_HOME
kXDGRuntimeDir, ///< XDG_RUNTIME_DIR
kXDGConfigDirs, ///< XDG_CONFIG_DIRS
kXDGDataDirs, ///< XDG_DATA_DIRS
} XDGVarType;
#endif // NVIM_OS_STDPATHS_DEFS_H

View File

@@ -20,7 +20,7 @@
// Unix system-dependent file names // Unix system-dependent file names
#ifndef SYS_VIMRC_FILE #ifndef SYS_VIMRC_FILE
# define SYS_VIMRC_FILE "$VIM/nvimrc" # define SYS_VIMRC_FILE "$VIM/sysinit.vim"
#endif #endif
#ifndef DFLT_HELPFILE #ifndef DFLT_HELPFILE
# define DFLT_HELPFILE "$VIMRUNTIME/doc/help.txt" # define DFLT_HELPFILE "$VIMRUNTIME/doc/help.txt"
@@ -28,46 +28,11 @@
#ifndef SYNTAX_FNAME #ifndef SYNTAX_FNAME
# define SYNTAX_FNAME "$VIMRUNTIME/syntax/%s.vim" # define SYNTAX_FNAME "$VIMRUNTIME/syntax/%s.vim"
#endif #endif
#ifndef USR_EXRC_FILE
# define USR_EXRC_FILE "~/.exrc"
#endif
#ifndef USR_VIMRC_FILE
# define USR_VIMRC_FILE "~/.nvimrc"
#endif
#ifndef USR_VIMRC_FILE2
# define USR_VIMRC_FILE2 "~/.nvim/nvimrc"
#endif
#ifndef EXRC_FILE #ifndef EXRC_FILE
# define EXRC_FILE ".exrc" # define EXRC_FILE ".exrc"
#endif #endif
#ifndef VIMRC_FILE #ifndef VIMRC_FILE
# define VIMRC_FILE ".nvimrc" # define VIMRC_FILE ".nvimrc"
#endif #endif
#ifndef SHADA_FILE
# define SHADA_FILE "~/.nvim/shada/main.shada"
#endif
// Default for 'backupdir'.
#ifndef DFLT_BDIR
# define DFLT_BDIR ".,~/tmp,~/"
#endif
// Default for 'directory'.
#ifndef DFLT_DIR
# define DFLT_DIR ".,~/tmp,/var/tmp,/tmp"
#endif
// Default for 'viewdir'.
#ifndef DFLT_VDIR
# define DFLT_VDIR "~/.nvim/view"
#endif
#ifdef RUNTIME_GLOBAL
# define DFLT_RUNTIMEPATH "~/.nvim," RUNTIME_GLOBAL ",$VIMRUNTIME," \
RUNTIME_GLOBAL "/after,~/.nvim/after"
#else
# define DFLT_RUNTIMEPATH \
"~/.nvim,$VIM/vimfiles,$VIMRUNTIME,$VIM/vimfiles/after,~/.nvim/after"
#endif
#endif // NVIM_OS_UNIX_DEFS_H #endif // NVIM_OS_UNIX_DEFS_H

View File

@@ -7,13 +7,9 @@
#define TEMP_FILE_PATH_MAXLEN _MAX_PATH #define TEMP_FILE_PATH_MAXLEN _MAX_PATH
// Defines needed to fix the build on Windows: // Defines needed to fix the build on Windows:
// - USR_EXRC_FILE
// - USR_VIMRC_FILE
// - SHADA_FILE
// - DFLT_DIR // - DFLT_DIR
// - DFLT_BDIR // - DFLT_BDIR
// - DFLT_VDIR // - DFLT_VDIR
// - DFLT_RUNTIMEPATH
// - EXRC_FILE // - EXRC_FILE
// - VIMRC_FILE // - VIMRC_FILE
// - SYNTAX_FNAME // - SYNTAX_FNAME

View File

@@ -329,6 +329,31 @@ int vim_fnamencmp(char_u *x, char_u *y, size_t len)
#endif #endif
} }
/// Append fname2 to fname1
///
/// @param[in] fname1 First fname to append to.
/// @param[in] len1 Length of fname1.
/// @param[in] fname2 Secord part of the file name.
/// @param[in] len2 Length of fname2.
/// @param[in] sep If true and fname1 does not end with a path separator,
/// add a path separator before fname2.
///
/// @return fname1
static inline char *do_concat_fnames(char *fname1, const size_t len1,
const char *fname2, const size_t len2,
const bool sep)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
if (sep && *fname1 && !after_pathsep(fname1, fname1 + len1)) {
fname1[len1] = PATHSEP;
memmove(fname1 + len1 + 1, fname2, len2 + 1);
} else {
memmove(fname1 + len1, fname2, len2 + 1);
}
return fname1;
}
/// Concatenate file names fname1 and fname2 into allocated memory. /// Concatenate file names fname1 and fname2 into allocated memory.
/// ///
/// Only add a '/' or '\\' when 'sep' is true and it is necessary. /// Only add a '/' or '\\' when 'sep' is true and it is necessary.
@@ -339,17 +364,33 @@ int vim_fnamencmp(char_u *x, char_u *y, size_t len)
/// if necessary /// if necessary
/// @return [allocated] Concatenation of fname1 and fname2. /// @return [allocated] Concatenation of fname1 and fname2.
char *concat_fnames(const char *fname1, const char *fname2, bool sep) char *concat_fnames(const char *fname1, const char *fname2, bool sep)
FUNC_ATTR_NONNULL_ARG(1, 2) FUNC_ATTR_NONNULL_RET FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{ {
char *dest = xmalloc(strlen(fname1) + strlen(fname2) + 3); const size_t len1 = strlen(fname1);
const size_t len2 = strlen(fname2);
char *dest = xmalloc(len1 + len2 + 3);
memmove(dest, fname1, len1 + 1);
return do_concat_fnames(dest, len1, fname2, len2, sep);
}
strcpy(dest, fname1); /// Concatenate file names fname1 and fname2
if (sep) { ///
add_pathsep(dest); /// Like concat_fnames(), but in place of allocating new memory it reallocates
} /// fname1. For this reason fname1 must be allocated with xmalloc, and can no
strcat(dest, fname2); /// longer be used after running concat_fnames_realloc.
///
return dest; /// @param fname1 is the first part of the path or filename
/// @param fname2 is the second half of the path or filename
/// @param sep is a flag to indicate a path separator should be added
/// if necessary
/// @return [allocated] Concatenation of fname1 and fname2.
char *concat_fnames_realloc(char *fname1, const char *fname2, bool sep)
FUNC_ATTR_NONNULL_ALL FUNC_ATTR_NONNULL_RET
{
const size_t len1 = strlen(fname1);
const size_t len2 = strlen(fname2);
return do_concat_fnames(xrealloc(fname1, len1 + len2 + 3), len1,
fname2, len2, sep);
} }
/* /*

View File

@@ -1583,6 +1583,20 @@ shada_read_main_cycle_end:
kh_dealloc(strset, &oldfiles_set); kh_dealloc(strset, &oldfiles_set);
} }
/// Default shada file location: cached path
static char *default_shada_file = NULL;
/// Get the default ShaDa file
static const char *shada_get_default_file(void)
FUNC_ATTR_WARN_UNUSED_RESULT
{
if (default_shada_file == NULL) {
char *shada_dir = stdpaths_user_data_subpath("shada", 0);
default_shada_file = concat_fnames_realloc(shada_dir, "main.shada", true);
}
return default_shada_file;
}
/// Get the ShaDa file name to use /// Get the ShaDa file name to use
/// ///
/// If "file" is given and not empty, use it (has already been expanded by /// If "file" is given and not empty, use it (has already been expanded by
@@ -1600,22 +1614,7 @@ static char *shada_filename(const char *file)
file = used_shada_file; file = used_shada_file;
} else { } else {
if ((file = find_shada_parameter('n')) == NULL || *file == NUL) { if ((file = find_shada_parameter('n')) == NULL || *file == NUL) {
#ifdef SHADA_FILE2 file = shada_get_default_file();
// don't use $HOME when not defined (turned into "c:/"!).
if (os_getenv((char_u *)"HOME") == NULL) {
// don't use $VIM when not available.
expand_env((char_u *)"$VIM", NameBuff, MAXPATHL);
if (STRCMP("$VIM", NameBuff) != 0) { // $VIM was expanded
file = SHADA_FILE2;
} else {
file = SHADA_FILE;
}
} else {
#endif
file = SHADA_FILE;
#ifdef SHADA_FILE2
}
#endif
} }
// XXX It used to be one level lower, so that whatever is in // XXX It used to be one level lower, so that whatever is in
// `used_shada_file` was expanded. I intentionally moved it here // `used_shada_file` was expanded. I intentionally moved it here

View File

@@ -4,3 +4,6 @@ set shell=sh
" Don't depend on system locale, always use utf-8 " Don't depend on system locale, always use utf-8
set encoding=utf-8 set encoding=utf-8
" Use safer defaults for various directories
set backupdir=. directory=. undodir=. viewdir=.

View File

@@ -1067,31 +1067,6 @@ void list_version(void)
version_msg(SYS_VIMRC_FILE); version_msg(SYS_VIMRC_FILE);
version_msg("\"\n"); version_msg("\"\n");
#endif // ifdef SYS_VIMRC_FILE #endif // ifdef SYS_VIMRC_FILE
#ifdef USR_VIMRC_FILE
version_msg(_(" user vimrc file: \""));
version_msg(USR_VIMRC_FILE);
version_msg("\"\n");
#endif // ifdef USR_VIMRC_FILE
#ifdef USR_VIMRC_FILE2
version_msg(_(" 2nd user vimrc file: \""));
version_msg(USR_VIMRC_FILE2);
version_msg("\"\n");
#endif // ifdef USR_VIMRC_FILE2
#ifdef USR_VIMRC_FILE3
version_msg(_(" 3rd user vimrc file: \""));
version_msg(USR_VIMRC_FILE3);
version_msg("\"\n");
#endif // ifdef USR_VIMRC_FILE3
#ifdef USR_EXRC_FILE
version_msg(_(" user exrc file: \""));
version_msg(USR_EXRC_FILE);
version_msg("\"\n");
#endif // ifdef USR_EXRC_FILE
#ifdef USR_EXRC_FILE2
version_msg(_(" 2nd user exrc file: \""));
version_msg(USR_EXRC_FILE2);
version_msg("\"\n");
#endif // ifdef USR_EXRC_FILE2
#ifdef HAVE_PATHDEF #ifdef HAVE_PATHDEF
if (*default_vim_dir != NUL) { if (*default_vim_dir != NUL) {

View File

@@ -118,7 +118,7 @@ describe('server -> client', function()
describe('when the client is a recursive vim instance', function() describe('when the client is a recursive vim instance', function()
before_each(function() before_each(function()
nvim('command', "let vim = rpcstart('"..nvim_prog.."', ['-u', 'NONE', '--embed'])") nvim('command', "let vim = rpcstart('"..nvim_prog.."', ['-u', 'NONE', '-i', 'NONE', '--cmd', 'set noswapfile', '--embed'])")
neq(0, eval('vim')) neq(0, eval('vim'))
end) end)

View File

@@ -29,9 +29,11 @@ describe(':preserve', function()
it("saves to custom 'directory' and (R)ecovers (issue #1836)", function() it("saves to custom 'directory' and (R)ecovers (issue #1836)", function()
local testfile = 'testfile_recover_spec' local testfile = 'testfile_recover_spec'
-- Note: `set swapfile` *must* go after `set directory`: otherwise it may
-- attempt to create a swapfile in different directory.
local init = [[ local init = [[
set swapfile fileformat=unix undolevels=-1
set directory^=]]..swapdir..[[// set directory^=]]..swapdir..[[//
set swapfile fileformat=unix undolevels=-1
]] ]]
source(init) source(init)
@@ -47,7 +49,7 @@ describe(':preserve', function()
--TODO(justinmk): this is an ugly hack to force `helpers` to support --TODO(justinmk): this is an ugly hack to force `helpers` to support
--multiple sessions. --multiple sessions.
local nvim2 = helpers.spawn({helpers.nvim_prog, '-u', 'NONE', '--embed'}, local nvim2 = helpers.spawn({helpers.nvim_prog, '-u', 'NONE', '-i', 'NONE', '--embed'},
true) true)
helpers.set_session(nvim2) helpers.set_session(nvim2)

View File

@@ -13,7 +13,7 @@ describe(':wshada', function()
end end
-- Override the default session because we need 'swapfile' for these tests. -- Override the default session because we need 'swapfile' for these tests.
local session = spawn({nvim_prog, '-u', 'NONE', '--embed', local session = spawn({nvim_prog, '-u', 'NONE', '-i', '/dev/null', '--embed',
'--cmd', 'set swapfile'}) '--cmd', 'set swapfile'})
set_session(session) set_session(session)

View File

@@ -7,7 +7,7 @@ local Session = require('nvim.session')
local nvim_prog = os.getenv('NVIM_PROG') or 'build/bin/nvim' local nvim_prog = os.getenv('NVIM_PROG') or 'build/bin/nvim'
local nvim_argv = {nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N', local nvim_argv = {nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N',
'--cmd', 'set shortmess+=I background=light noswapfile noautoindent laststatus=1 encoding=utf-8', '--cmd', 'set shortmess+=I background=light noswapfile noautoindent laststatus=1 encoding=utf-8 undodir=. directory=. viewdir=. backupdir=.',
'--embed'} '--embed'}
-- Formulate a path to the directory containing nvim. We use this to -- Formulate a path to the directory containing nvim. We use this to

View File

@@ -18,7 +18,7 @@ describe('72', function()
-- Test 'undofile': first a simple one-line change. -- Test 'undofile': first a simple one-line change.
execute('set visualbell') execute('set visualbell')
execute('set ul=100 undofile nomore') execute('set ul=100 undofile undodir=. nomore')
execute('e! Xtestfile') execute('e! Xtestfile')
feed('ggdGithis is one line<esc>:set ul=100<cr>') feed('ggdGithis is one line<esc>:set ul=100<cr>')
execute('s/one/ONE/') execute('s/one/ONE/')

View File

@@ -17,7 +17,7 @@ describe('78', function()
it('is working', function() it('is working', function()
source([=[ source([=[
set swapfile fileformat=unix undolevels=-1 set directory=. swapfile fileformat=unix undolevels=-1
e! Xtest e! Xtest
let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789" let text = "\tabcdefghijklmnoparstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnoparstuvwxyz0123456789"
let i = 1 let i = 1

View File

@@ -11,7 +11,7 @@ describe('tui', function()
before_each(function() before_each(function()
helpers.clear() helpers.clear()
screen = thelpers.screen_setup(0, '["'..helpers.nvim_prog..'", "-u", "NONE", "--cmd", "set noswapfile"]') screen = thelpers.screen_setup(0, '["'..helpers.nvim_prog..'", "-u", "NONE", "-i", "NONE", "--cmd", "set noswapfile"]')
screen.timeout = 30000 -- pasting can be really slow in the TUI screen.timeout = 30000 -- pasting can be really slow in the TUI
screen:expect([[ screen:expect([[
{1: } | {1: } |

View File

@@ -125,7 +125,7 @@ end
do do
local spawn, nvim_prog = helpers.spawn, helpers.nvim_prog local spawn, nvim_prog = helpers.spawn, helpers.nvim_prog
local session = spawn({nvim_prog, '-u', 'NONE', '-N', '--embed'}) local session = spawn({nvim_prog, '-u', 'NONE', '-i', 'NONE', '-N', '--embed'})
local status, rv = session:request('vim_get_color_map') local status, rv = session:request('vim_get_color_map')
if not status then if not status then
print('failed to get color map') print('failed to get color map')

View File

@@ -564,6 +564,28 @@ describe('fs function', function()
eq(false, os_isdir('unit-test-directory/new-dir-recurse')) eq(false, os_isdir('unit-test-directory/new-dir-recurse'))
end) end)
it('succeeds to create a directory ending with ///', function()
local mode = ffi.C.kS_IRUSR + ffi.C.kS_IWUSR + ffi.C.kS_IXUSR
local ret, failed_str = os_mkdir_recurse(
'unit-test-directory/new-dir-recurse///', mode)
eq(0, ret)
eq(nil, failed_str)
eq(true, os_isdir('unit-test-directory/new-dir-recurse'))
lfs.rmdir('unit-test-directory/new-dir-recurse')
eq(false, os_isdir('unit-test-directory/new-dir-recurse'))
end)
it('succeeds to create a directory ending with /', function()
local mode = ffi.C.kS_IRUSR + ffi.C.kS_IWUSR + ffi.C.kS_IXUSR
local ret, failed_str = os_mkdir_recurse(
'unit-test-directory/new-dir-recurse/', mode)
eq(0, ret)
eq(nil, failed_str)
eq(true, os_isdir('unit-test-directory/new-dir-recurse'))
lfs.rmdir('unit-test-directory/new-dir-recurse')
eq(false, os_isdir('unit-test-directory/new-dir-recurse'))
end)
it('succeeds to create a directory tree', function() it('succeeds to create a directory tree', function()
local mode = ffi.C.kS_IRUSR + ffi.C.kS_IWUSR + ffi.C.kS_IXUSR local mode = ffi.C.kS_IRUSR + ffi.C.kS_IWUSR + ffi.C.kS_IXUSR
local ret, failed_str = os_mkdir_recurse( local ret, failed_str = os_mkdir_recurse(