# HG changeset patch # User Christian Brabandt # Date 1469737805 -7200 # Node ID 284b4eb307fc0c62e3f35557395d2fbbb615e85b # Parent 7d1ab1664b75cb27f653fa823878a2eb5496b7b7 commit https://github.com/vim/vim/commit/8c08b5b569e2a9e9f63dea514591ecfa2d3bb392 Author: Bram Moolenaar Date: Thu Jul 28 22:24:15 2016 +0200 patch 7.4.2111 Problem: Defaults are very conservative. Solution: Move settings from vimrc_example.vim to defaults.vim. Load defaults.vim if no .vimrc was found. diff --git a/Filelist b/Filelist --- a/Filelist +++ b/Filelist @@ -526,8 +526,9 @@ RT_ALL = \ runtime/macros/urm/examples \ runtime/macros/urm/urm \ runtime/macros/urm/urm.vim \ + runtime/defaults.vim \ + runtime/evim.vim \ runtime/mswin.vim \ - runtime/evim.vim \ runtime/optwin.vim \ runtime/ftplugin.vim \ runtime/ftplugof.vim \ diff --git a/runtime/defaults.vim b/runtime/defaults.vim new file mode 100644 --- /dev/null +++ b/runtime/defaults.vim @@ -0,0 +1,109 @@ +" The default vimrc file. +" +" Maintainer: Bram Moolenaar +" Last change: 2016 Jul 28 +" +" This is loaded if no vimrc file was found. +" Except when Vim is run with "-u NONE" or "-C". +" Individual settings can be reverted with ":set option&". +" Other commands can be reverted as mentioned below. + +" When started as "evim", evim.vim will already have done these settings. +if v:progname =~? "evim" + finish +endif + +" Use Vim settings, rather than Vi settings (much better!). +" This must be first, because it changes other options as a side effect. +set nocompatible + +" Allow backspacing over everything in insert mode. +set backspace=indent,eol,start + +set history=200 " keep 200 lines of command line history +set ruler " show the cursor position all the time +set showcmd " display incomplete commands +set wildmenu " display completion matches in a status line + +" Do incremental searching when it's possible to timeout. +if has('reltime') + set incsearch +endif + +" Do not recognize octal numbers for Ctrl-A and Ctrl-X, most users find it +" confusing. +set nrformats-=octal + +" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries. +if has('win32') + set guioptions-=t +endif + +" Don't use Ex mode, use Q for formatting. +" Revert with ":unmap Q". +map Q gq + +" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, +" so that you can undo CTRL-U after inserting a line break. +" Revert with ":iunmap ". +inoremap u + +" In many terminal emulators the mouse works just fine. By enabling it you +" can position the cursor, Visually select and scroll with the mouse. +if has('mouse') + set mouse=a +endif + +" Switch syntax highlighting on when the terminal has colors or when using the +" GUI (which always has colors). +if &t_Co > 2 || has("gui_running") + " Revert with ":syntax off". + syntax on + + " I like highlighting strings inside C comments. + " Revert with ":unlet c_comment_strings". + let c_comment_strings=1 +endif + +" Only do this part when compiled with support for autocommands. +if has("autocmd") + + " Enable file type detection. + " Use the default filetype settings, so that mail gets 'tw' set to 72, + " 'cindent' is on in C files, etc. + " Also load indent files, to automatically do language-dependent indenting. + " Revert with ":filetype off". + filetype plugin indent on + + " Put these in an autocmd group, so that you can revert them with: + " ":augroup vimStartup | au! | augroup END" + augroup vimStartup + au! + + " When editing a file, always jump to the last known cursor position. + " Don't do it when the position is invalid or when inside an event handler + " (happens when dropping a file on gvim). + autocmd BufReadPost * + \ if line("'\"") >= 1 && line("'\"") <= line("$") | + \ exe "normal! g`\"" | + \ endif + + augroup END + +endif " has("autocmd") + +" Convenient command to see the difference between the current buffer and the +" file it was loaded from, thus the changes you made. +" Only define it when not defined already. +" Revert with: ":delcommand DiffOrig". +if !exists(":DiffOrig") + command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis + \ | wincmd p | diffthis +endif + +if has('langmap') && exists('+langnoremap') + " Prevent that the langmap option applies to characters that result from a + " mapping. If unset (default), this may break plugins (but it's backward + " compatible). + set langnoremap +endif diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 7.4. Last change: 2016 Jul 12 +*options.txt* For Vim version 7.4. Last change: 2016 Jul 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -887,7 +887,8 @@ A jump table for the options with a shor done with ":syntax on". *'backspace'* *'bs'* -'backspace' 'bs' string (default "") +'backspace' 'bs' string (default "", set to "indent,eol,start" + in |defaults.vim|) global {not in Vi} Influences the working of , , CTRL-W and CTRL-U in Insert @@ -1696,7 +1697,7 @@ A jump table for the options with a shor *'compatible'* *'cp'* *'nocompatible'* *'nocp'* 'compatible' 'cp' boolean (default on, off when a |vimrc| or |gvimrc| - file is found) + file is found, reset in |defaults.vim|) global {not in Vi} This option has the effect of making Vim either more Vi-compatible, or @@ -3725,8 +3726,10 @@ A jump table for the options with a shor screen. *'guioptions'* *'go'* -'guioptions' 'go' string (default "egmrLtT" (MS-Windows), - "aegimrLtT" (GTK, Motif and Athena)) +'guioptions' 'go' string (default "egmrLtT" (MS-Windows, "t" is + removed in |defaults.vim|), + "aegimrLtT" (GTK, Motif and Athena), + ) global {not in Vi} {only available when compiled with GUI enabled} @@ -4048,7 +4051,8 @@ A jump table for the options with a shor NOTE: This option is reset when 'compatible' is set. *'history'* *'hi'* -'history' 'hi' number (Vim default: 50, Vi default: 0) +'history' 'hi' number (Vim default: 50, Vi default: 0, + set to 200 in |defaults.vim|) global {not in Vi} A history of ":" commands, and a history of previous search patterns @@ -4300,7 +4304,8 @@ A jump table for the options with a shor evaluating 'includeexpr' |textlock|. *'incsearch'* *'is'* *'noincsearch'* *'nois'* -'incsearch' 'is' boolean (default off) +'incsearch' 'is' boolean (default off, set in |defaults.vim| if the + +reltime feature is supported) global {not in Vi} {not available when compiled without the @@ -4684,7 +4689,7 @@ A jump table for the options with a shor < Warning: This deletes all menus that you defined yourself! *'langnoremap'* *'lnr'* *'nolangnoremap'* *'nolnr'* -'langnoremap' 'lnr' boolean (default off) +'langnoremap' 'lnr' boolean (default off, set in |defaults.vim|) global {not in Vi} {only available when compiled with the |+langmap| @@ -5150,7 +5155,8 @@ A jump table for the options with a shor set and to the Vim default value when 'compatible' is reset. *'mouse'* *E538* -'mouse' string (default "", "a" for GUI, MS-DOS and Win32) +'mouse' string (default "", "a" for GUI, MS-DOS and Win32, + set to "a" in |defaults.vim|) global {not in Vi} Enable the use of the mouse. Only works for certain terminals @@ -5316,7 +5322,8 @@ A jump table for the options with a shor Negative or zero value means no thread scheduling. *'nrformats'* *'nf'* -'nrformats' 'nf' string (default "bin,octal,hex") +'nrformats' 'nf' string (default "bin,octal,hex", + set to "bin,hex" in |defaults.vim|) local to buffer {not in Vi} This defines what bases Vim will consider for numbers when using the @@ -5986,7 +5993,7 @@ A jump table for the options with a shor security reasons. *'ruler'* *'ru'* *'noruler'* *'noru'* -'ruler' 'ru' boolean (default off) +'ruler' 'ru' boolean (default off, set in |defaults.vim|) global {not in Vi} {not available when compiled without the @@ -6619,8 +6626,8 @@ A jump table for the options with a shor "n" flag to 'cpoptions'. *'showcmd'* *'sc'* *'noshowcmd'* *'nosc'* -'showcmd' 'sc' boolean (Vim default: on, off for Unix, Vi default: - off) +'showcmd' 'sc' boolean (Vim default: on, off for Unix, + Vi default: off, set in |defaults.vim|) global {not in Vi} {not available when compiled without the @@ -8377,7 +8384,7 @@ A jump table for the options with a shor *'wildmenu'* *'wmnu'* *'nowildmenu'* *'nowmnu'* -'wildmenu' 'wmnu' boolean (default off) +'wildmenu' 'wmnu' boolean (default off, set in |defaults.vim|) global {not in Vi} {not available if compiled without the |+wildmenu| diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt --- a/runtime/doc/starting.txt +++ b/runtime/doc/starting.txt @@ -1,4 +1,4 @@ -*starting.txt* For Vim version 7.4. Last change: 2016 Jul 03 +*starting.txt* For Vim version 7.4. Last change: 2016 Jul 28 VIM REFERENCE MANUAL by Bram Moolenaar @@ -806,13 +806,13 @@ 3. Execute Ex commands, from environment For the Macintosh the $VIMRUNTIME/macmap.vim is read. *VIMINIT* *.vimrc* *_vimrc* *EXINIT* *.exrc* *_exrc* *$MYVIMRC* - c. Four places are searched for initializations. The first that exists + c. Five places are searched for initializations. The first that exists is used, the others are ignored. The $MYVIMRC environment variable is set to the file that was first found, unless $MYVIMRC was already set and when using VIMINIT. - - The environment variable VIMINIT (see also |compatible-default|) (*) - The value of $VIMINIT is used as an Ex command line. - - The user vimrc file(s): + I The environment variable VIMINIT (see also |compatible-default|) (*) + The value of $VIMINIT is used as an Ex command line. + II The user vimrc file(s): "$HOME/.vimrc" (for Unix and OS/2) (*) "$HOME/.vim/vimrc" (for Unix and OS/2) (*) "s:.vimrc" (for Amiga) (*) @@ -829,13 +829,14 @@ 3. Execute Ex commands, from environment 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 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. And without the (*)! - - You would usually have "syntax on" and/or "filetype on" commands, - which trigger initializing filetype detection, see |syntax-loading|. + III The environment variable EXINIT. + The value of $EXINIT is used as an Ex command line. + IV 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. And without the (*)! + V The default vimrc file, $VIMRUNTIME/defaults.vim. This sets up + options values and has "syntax on" and "filetype on" commands, + which is what most new users will want. See |defaults.vim|. d. 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, @@ -912,6 +913,9 @@ 12. Execute startup commands The |v:vim_did_enter| variable is set to 1. The |VimEnter| autocommands are executed. +The $MYVIMRC or $MYGVIMRC file will be set to the first found vimrc and/or +gvimrc file. + Some hints on using initializations: Standard setup: @@ -958,16 +962,29 @@ problems if you have a file with only + source $VIMRUNTIME/defaults.vim +Then Vim works like before you had a .vimrc. Copying $VIMRUNTIME/vimrc_example +is way to do this. Alternatively, you can copy defaults.vim to your .vimrc +and modify it. + +If you don't like some of the defaults, you can still source defaults.vim and +revert individual settings. See the defaults.vim file for hints on how to +revert each item. + Avoiding trojan horses: *trojan-horse* While reading the "vimrc" or the "exrc" file in the current directory, some diff --git a/runtime/evim.vim b/runtime/evim.vim --- a/runtime/evim.vim +++ b/runtime/evim.vim @@ -1,6 +1,6 @@ " Vim script for Evim key bindings " Maintainer: Bram Moolenaar -" Last Change: 2006 Mar 29 +" Last Change: 2016 Jul 24 " Don't use Vi-compatible mode. set nocompatible @@ -63,4 +63,12 @@ if has("autocmd") endif " has("autocmd") +" Add optional packages. +" +" The matchit plugin makes the % command work better, but it is not backwards +" compatible. +if has('syntax') && has('eval') + packadd matchit +endif + " vim: set sw=2 : diff --git a/runtime/vimrc_example.vim b/runtime/vimrc_example.vim --- a/runtime/vimrc_example.vim +++ b/runtime/vimrc_example.vim @@ -1,7 +1,7 @@ " An example for a vimrc file. " " Maintainer: Bram Moolenaar -" Last change: 2016 Jun 21 +" Last change: 2016 Jul 28 " " To use it, copy it to " for Unix and OS/2: ~/.vimrc @@ -14,60 +14,26 @@ if v:progname =~? "evim" finish endif -" Use Vim settings, rather than Vi settings (much better!). -" This must be first, because it changes other options as a side effect. -set nocompatible - -" allow backspacing over everything in insert mode -set backspace=indent,eol,start +" Get the defaults that most users want. +source $VIMRUNTIME/defaults.vim if has("vms") set nobackup " do not keep a backup file, use versions instead else set backup " keep a backup file (restore to previous version) - set undofile " keep an undo file (undo changes after closing) -endif -set history=50 " keep 50 lines of command line history -set ruler " show the cursor position all the time -set showcmd " display incomplete commands -set incsearch " do incremental searching - -" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries -" let &guioptions = substitute(&guioptions, "t", "", "g") - -" Don't use Ex mode, use Q for formatting -map Q gq - -" CTRL-U in insert mode deletes a lot. Use CTRL-G u to first break undo, -" so that you can undo CTRL-U after inserting a line break. -inoremap u - -" In many terminal emulators the mouse works just fine, thus enable it. -if has('mouse') - set mouse=a + if has('persistent_undo') + set undofile " keep an undo file (undo changes after closing) + endif endif -" Switch syntax highlighting on when the terminal has colors or when using the -" GUI (which always has colors). if &t_Co > 2 || has("gui_running") - syntax on - - " Also switch on highlighting the last used search pattern. + " Switch on highlighting the last used search pattern. set hlsearch - - " I like highlighting strings inside C comments. - let c_comment_strings=1 endif " Only do this part when compiled with support for autocommands. if has("autocmd") - " Enable file type detection. - " Use the default filetype settings, so that mail gets 'tw' set to 72, - " 'cindent' is on in C files, etc. - " Also load indent files, to automatically do language-dependent indenting. - filetype plugin indent on - " Put these in an autocmd group, so that we can delete them easily. augroup vimrcEx au! @@ -75,14 +41,6 @@ if has("autocmd") " For all text files set 'textwidth' to 78 characters. autocmd FileType text setlocal textwidth=78 - " When editing a file, always jump to the last known cursor position. - " Don't do it when the position is invalid or when inside an event handler - " (happens when dropping a file on gvim). - autocmd BufReadPost * - \ if line("'\"") >= 1 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif - augroup END else @@ -91,22 +49,6 @@ else endif " has("autocmd") -" Convenient command to see the difference between the current buffer and the -" file it was loaded from, thus the changes you made. -" Only define it when not defined already. -if !exists(":DiffOrig") - command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis - \ | wincmd p | diffthis -endif - -if has('langmap') && exists('+langnoremap') - " Prevent that the langmap option applies to characters that result from a - " mapping. If unset (default), this may break plugins (but it's backward - " compatible). - set langnoremap -endif - - " Add optional packages. " " The matchit plugin makes the % command work better, but it is not backwards diff --git a/src/Makefile b/src/Makefile --- a/src/Makefile +++ b/src/Makefile @@ -1071,7 +1071,8 @@ SCRIPTLOC = $(VIMRTLOC) ### the runtime directory is not below it. #VIMRUNTIMEDIR = $(VIMRTLOC) -### Name of the evim file target. +### Name of the defaults/evim/mswin file target. +VIM_DEFAULTS_FILE = $(DESTDIR)$(SCRIPTLOC)/defaults.vim EVIM_FILE = $(DESTDIR)$(SCRIPTLOC)/evim.vim MSWIN_FILE = $(DESTDIR)$(SCRIPTLOC)/mswin.vim @@ -2240,11 +2241,13 @@ installrtbase: $(HELPSOURCE)/vim.1 $(DES chmod $(VIMSCRIPTMOD) $(SYS_SYNMENU_FILE) $(INSTALL_DATA) $(SCRIPTSOURCE)/delmenu.vim $(SYS_DELMENU_FILE) chmod $(VIMSCRIPTMOD) $(SYS_DELMENU_FILE) -# install the evim file +# install the defaults/evim/mswin file + $(INSTALL_DATA) $(SCRIPTSOURCE)/defaults.vim $(VIM_DEFAULTS_FILE) + chmod $(VIMSCRIPTMOD) $(VIM_DEFAULTS_FILE) + $(INSTALL_DATA) $(SCRIPTSOURCE)/evim.vim $(EVIM_FILE) + chmod $(VIMSCRIPTMOD) $(EVIM_FILE) $(INSTALL_DATA) $(SCRIPTSOURCE)/mswin.vim $(MSWIN_FILE) chmod $(VIMSCRIPTMOD) $(MSWIN_FILE) - $(INSTALL_DATA) $(SCRIPTSOURCE)/evim.vim $(EVIM_FILE) - chmod $(VIMSCRIPTMOD) $(EVIM_FILE) # install the rgb.txt file $(INSTALL_DATA) $(SCRIPTSOURCE)/rgb.txt $(SYS_RGB_FILE) chmod $(VIMSCRIPTMOD) $(SYS_RGB_FILE) @@ -2612,7 +2615,7 @@ uninstall_runtime: -rm -f $(DEST_HELP)/*.??x $(DEST_HELP)/tags-?? -rm -f $(SYS_RGB_FILE) -rm -f $(SYS_MENU_FILE) $(SYS_SYNMENU_FILE) $(SYS_DELMENU_FILE) - -rm -f $(SYS_BUGR_FILE) $(EVIM_FILE) $(MSWIN_FILE) + -rm -f $(SYS_BUGR_FILE) $(VIM_DEFAULTS_FILE) $(EVIM_FILE) $(MSWIN_FILE) -rm -f $(DEST_SCRIPT)/gvimrc_example.vim $(DEST_SCRIPT)/vimrc_example.vim -rm -f $(SYS_FILETYPE_FILE) $(SYS_FTOFF_FILE) $(SYS_SCRIPTS_FILE) -rm -f $(SYS_INDOFF_FILE) $(SYS_INDENT_FILE) diff --git a/src/feature.h b/src/feature.h --- a/src/feature.h +++ b/src/feature.h @@ -906,6 +906,11 @@ /* #define USR_VIMRC_FILE3 "$VIM/.vimrc" */ /* + * VIM_DEFAULTS_FILE Name of the defaults.vim script file + */ +/* #define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim" */ + +/* * EVIM_FILE Name of the evim.vim script file */ /* #define EVIM_FILE "$VIMRUNTIME/evim.vim" */ diff --git a/src/main.c b/src/main.c --- a/src/main.c +++ b/src/main.c @@ -2997,11 +2997,14 @@ source_startup_scripts(mparm_T *parmp) DOSO_VIMRC) == FAIL #endif && process_env((char_u *)"EXINIT", FALSE) == FAIL - && do_source((char_u *)USR_EXRC_FILE, FALSE, DOSO_NONE) == 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); + && do_source((char_u *)USR_EXRC_FILE2, FALSE, DOSO_NONE) == FAIL #endif + ) + { + /* When no .vimrc file was found: source defaults.vim. */ + do_source((char_u *)VIM_DEFAULTS_FILE, FALSE, DOSO_NONE); } } @@ -3009,7 +3012,7 @@ source_startup_scripts(mparm_T *parmp) * 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' + * 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. diff --git a/src/os_amiga.h b/src/os_amiga.h --- a/src/os_amiga.h +++ b/src/os_amiga.h @@ -160,6 +160,9 @@ typedef long off_t; #ifndef USR_VIMRC_FILE4 # define USR_VIMRC_FILE4 "$VIM/.vimrc" #endif +#ifndef VIM_DEFAULTS_FILE +# define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim" +#endif #ifndef EVIM_FILE # define EVIM_FILE "$VIMRUNTIME/evim.vim" #endif diff --git a/src/os_dos.h b/src/os_dos.h --- a/src/os_dos.h +++ b/src/os_dos.h @@ -25,6 +25,9 @@ #ifndef USR_VIMRC_FILE3 # define USR_VIMRC_FILE3 "$VIM\\_vimrc" #endif +#ifndef VIM_DEFAULTS_FILE +# define VIM_DEFAULTS_FILE "$VIMRUNTIME\\defaults.vim" +#endif #ifndef EVIM_FILE # define EVIM_FILE "$VIMRUNTIME\\evim.vim" #endif diff --git a/src/os_mac.h b/src/os_mac.h --- a/src/os_mac.h +++ b/src/os_mac.h @@ -139,6 +139,9 @@ #ifndef SYS_OPTWIN_FILE # define SYS_OPTWIN_FILE "$VIMRUNTIME/optwin.vim" #endif +#ifndef VIM_DEFAULTS_FILE +# define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim" +#endif #ifndef EVIM_FILE # define EVIM_FILE "$VIMRUNTIME/evim.vim" #endif diff --git a/src/os_unix.h b/src/os_unix.h --- a/src/os_unix.h +++ b/src/os_unix.h @@ -303,6 +303,10 @@ typedef struct dsc$descriptor DESC; # endif #endif +#ifndef VIM_DEFAULTS_FILE +# define VIM_DEFAULTS_FILE "$VIMRUNTIME/defaults.vim" +#endif + #ifndef EVIM_FILE # define EVIM_FILE "$VIMRUNTIME/evim.vim" #endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -759,6 +759,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2111, +/**/ 2110, /**/ 2109, @@ -5349,6 +5351,9 @@ list_version(void) version_msg("\"\n"); # endif #endif + version_msg(_(" defaults file: \"")); + version_msg(VIM_DEFAULTS_FILE); + version_msg("\"\n"); #ifdef FEAT_GUI # ifdef SYS_MENU_FILE version_msg(_(" system menu file: \""));