diff options
Diffstat (limited to 'runtime')
-rw-r--r-- | runtime/autoload/paste.vim | 46 | ||||
-rw-r--r-- | runtime/bugreport.vim | 6 | ||||
-rw-r--r-- | runtime/defaults.vim | 51 | ||||
-rw-r--r-- | runtime/doc/eval.txt | 2 | ||||
-rw-r--r-- | runtime/doc/if_perl.txt | 4 | ||||
-rw-r--r-- | runtime/doc/if_ruby.txt | 4 | ||||
-rw-r--r-- | runtime/doc/indent.txt | 2 | ||||
-rw-r--r-- | runtime/doc/insert.txt | 5 | ||||
-rw-r--r-- | runtime/doc/options.txt | 12 | ||||
-rw-r--r-- | runtime/doc/os_vms.txt | 10 | ||||
-rw-r--r-- | runtime/doc/tags | 10 | ||||
-rw-r--r-- | runtime/doc/terminal.txt | 2 | ||||
-rw-r--r-- | runtime/doc/todo.txt | 89 | ||||
-rw-r--r-- | runtime/doc/usr_05.txt | 236 | ||||
-rw-r--r-- | runtime/doc/usr_11.txt | 5 | ||||
-rw-r--r-- | runtime/doc/usr_41.txt | 5 | ||||
-rw-r--r-- | runtime/evim.vim | 21 | ||||
-rw-r--r-- | runtime/filetype.vim | 3 | ||||
-rw-r--r-- | runtime/indent/sh.vim | 30 | ||||
-rw-r--r-- | runtime/indent/xml.vim | 13 | ||||
-rw-r--r-- | runtime/menu.vim | 22 | ||||
-rw-r--r-- | runtime/optwin.vim | 74 | ||||
-rw-r--r-- | runtime/pack/dist/opt/matchit/doc/matchit.txt | 22 | ||||
-rw-r--r-- | runtime/pack/dist/opt/matchit/plugin/matchit.vim | 812 | ||||
-rw-r--r-- | runtime/syntax/debchangelog.vim | 4 | ||||
-rw-r--r-- | runtime/vimrc_example.vim | 21 |
26 files changed, 410 insertions, 1101 deletions
diff --git a/runtime/autoload/paste.vim b/runtime/autoload/paste.vim index dd7b3ae54..2d787e7a1 100644 --- a/runtime/autoload/paste.vim +++ b/runtime/autoload/paste.vim @@ -1,35 +1,25 @@ " Vim support file to help with paste mappings and menus " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2017 Aug 30 +" Last Change: 2019 Jan 27 " Define the string to use for items that are present both in Edit, Popup and " Toolbar menu. Also used in mswin.vim and macmap.vim. -" Pasting blockwise and linewise selections is not possible in Insert and -" Visual mode without the +virtualedit feature. They are pasted as if they -" were characterwise instead. Add to that some tricks to leave the cursor in -" the right position, also for "gi". -if has("virtualedit") - let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"} - let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n'] - let paste#paste_cmd['i'] = "\<c-\>\<c-o>\"+gP" +let paste#paste_cmd = {'n': ":call paste#Paste()<CR>"} +let paste#paste_cmd['v'] = '"-c<Esc>' . paste#paste_cmd['n'] +let paste#paste_cmd['i'] = "\<c-\>\<c-o>\"+gP" - func! paste#Paste() - let ove = &ve - set ve=all - normal! `^ - if @+ != '' - normal! "+gP - endif - let c = col(".") - normal! i - if col(".") < c " compensate for i<ESC> moving the cursor left - normal! l - endif - let &ve = ove - endfunc -else - let paste#paste_cmd = {'n': "\"=@+.'xy'<CR>gPFx\"_2x"} - let paste#paste_cmd['v'] = '"-c<Esc>gix<Esc>' . paste#paste_cmd['n'] . '"_x' - let paste#paste_cmd['i'] = 'x<Esc>' . paste#paste_cmd['n'] . '"_s' -endif +func! paste#Paste() + let ove = &ve + set ve=all + normal! `^ + if @+ != '' + normal! "+gP + endif + let c = col(".") + normal! i + if col(".") < c " compensate for i<ESC> moving the cursor left + normal! l + endif + let &ve = ove +endfunc diff --git a/runtime/bugreport.vim b/runtime/bugreport.vim index f0c045e6c..f7886a908 100644 --- a/runtime/bugreport.vim +++ b/runtime/bugreport.vim @@ -2,7 +2,7 @@ :" information about the environment of a possible bug in Vim. :" :" Maintainer: Bram Moolenaar <Bram@vim.org> -:" Last change: 2005 Jun 12 +:" Last change: 2019 Jan 27 :" :" To use inside Vim: :" :so $VIMRUNTIME/bugreport.vim @@ -54,9 +54,7 @@ :endif :set all :set termcap -:if has("autocmd") -: au -:endif +:au :if 1 : echo "--- Normal/Visual mode mappings ---" :endif diff --git a/runtime/defaults.vim b/runtime/defaults.vim index 0dcb92245..b848217cd 100644 --- a/runtime/defaults.vim +++ b/runtime/defaults.vim @@ -1,7 +1,7 @@ " The default vimrc file. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last change: 2017 Jun 13 +" Last change: 2019 Jan 26 " " This is loaded if no vimrc file was found. " Except when Vim is run with "-u NONE" or "-C". @@ -90,33 +90,28 @@ if &t_Co > 2 || has("gui_running") 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, when inside an event handler - " (happens when dropping a file on gvim) and for a commit message (it's - " likely a different one than last time). - autocmd BufReadPost * - \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' - \ | exe "normal! g`\"" - \ | endif - - augroup END - -endif " 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, when inside an event handler + " (happens when dropping a file on gvim) and for a commit message (it's + " likely a different one than last time). + autocmd BufReadPost * + \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' + \ | exe "normal! g`\"" + \ | endif + +augroup END " Convenient command to see the difference between the current buffer and the " file it was loaded from, thus the changes you made. diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt index cce17b9cf..50ca3769b 100644 --- a/runtime/doc/eval.txt +++ b/runtime/doc/eval.txt @@ -10193,7 +10193,7 @@ compatible Compiled to be very Vi compatible. conpty Platform where |ConPTY| can be used. cryptv Compiled with encryption support |encryption|. cscope Compiled with |cscope| support. -cursorbind Compiled with |cursorbind| (always true) +cursorbind Compiled with |'cursorbind'| (always true) debug Compiled with "DEBUG" defined. dialog_con Compiled with console dialog support. dialog_gui Compiled with GUI dialog support. diff --git a/runtime/doc/if_perl.txt b/runtime/doc/if_perl.txt index cce3cdf5d..db0a92cc2 100644 --- a/runtime/doc/if_perl.txt +++ b/runtime/doc/if_perl.txt @@ -1,4 +1,4 @@ -*if_perl.txt* For Vim version 8.1. Last change: 2017 Nov 24 +*if_perl.txt* For Vim version 8.1. Last change: 2019 Jan 29 VIM REFERENCE MANUAL by Sven Verdoolaege @@ -192,7 +192,7 @@ VIM::Eval({expr}) Evaluates {expr} and returns (success, value) in list and inserting line breaks. *perl-Blob* -VIM::Blob({expr}) Return Blob literal string 0zXXXX from scalar value. +VIM::Blob({expr}) Return |Blob| literal string 0zXXXX from scalar value. *perl-SetHeight* Window->SetHeight({height}) diff --git a/runtime/doc/if_ruby.txt b/runtime/doc/if_ruby.txt index c9fc797eb..a98b6209e 100644 --- a/runtime/doc/if_ruby.txt +++ b/runtime/doc/if_ruby.txt @@ -1,4 +1,4 @@ -*if_ruby.txt* For Vim version 8.1. Last change: 2018 Mar 15 +*if_ruby.txt* For Vim version 8.1. Last change: 2019 Jan 29 VIM REFERENCE MANUAL by Shugo Maeda @@ -112,7 +112,7 @@ Vim::message({msg}) *ruby-blob* Vim::blob({arg}) - Return Blob literal string from {arg}. + Return |Blob| literal string from {arg}. *ruby-set_option* Vim::set_option({arg}) diff --git a/runtime/doc/indent.txt b/runtime/doc/indent.txt index 299d1ac68..57b1be1fc 100644 --- a/runtime/doc/indent.txt +++ b/runtime/doc/indent.txt @@ -1,4 +1,4 @@ -*indent.txt* For Vim version 8.1. Last change: 2018 Apr 04 +*indent.txt* For Vim version 8.1. Last change: 2019 Jan 31 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/insert.txt b/runtime/doc/insert.txt index 0431043c2..bd4fad2c2 100644 --- a/runtime/doc/insert.txt +++ b/runtime/doc/insert.txt @@ -1,4 +1,4 @@ -*insert.txt* For Vim version 8.1. Last change: 2019 Jan 11 +*insert.txt* For Vim version 8.1. Last change: 2019 Jan 29 VIM REFERENCE MANUAL by Bram Moolenaar @@ -1078,7 +1078,8 @@ that contains the List. The Dict can have these items: leading text is changed. If you want to suppress the warning message for an empty result, return -v:none. This is useful to implement asynchronous completion with complete(). +|v:none|. This is useful to implement asynchronous completion with +|complete()|. Other items are ignored. diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt index e73a9dae8..c9e2b0b5b 100644 --- a/runtime/doc/options.txt +++ b/runtime/doc/options.txt @@ -1,4 +1,4 @@ -*options.txt* For Vim version 8.1. Last change: 2019 Jan 16 +*options.txt* For Vim version 8.1. Last change: 2019 Feb 03 VIM REFERENCE MANUAL by Bram Moolenaar @@ -354,12 +354,12 @@ files. You use this command: > :setlocal makeprg=perlmake You can switch back to using the global value by making the local value empty: > :setlocal makeprg= -This only works for a string option. For a boolean option you need to use the -"<" flag, like this: > +This only works for a string option. For a number or boolean option you need +to use the "<" flag, like this: > :setlocal autoread< -Note that for non-boolean options using "<" copies the global value to the -local value, it doesn't switch back to using the global value (that matters -when the global value changes later). You can also use: > +Note that for non-boolean and non-number options using "<" copies the global +value to the local value, it doesn't switch back to using the global value +(that matters when the global value changes later). You can also use: > :set path< This will make the local value of 'path' empty, so that the global value is used. Thus it does the same as: > diff --git a/runtime/doc/os_vms.txt b/runtime/doc/os_vms.txt index 2e2f85284..36a82b217 100644 --- a/runtime/doc/os_vms.txt +++ b/runtime/doc/os_vms.txt @@ -1,4 +1,4 @@ -*os_vms.txt* For Vim version 8.1. Last change: 2019 Jan 19 +*os_vms.txt* For Vim version 8.1. Last change: 2019 Jan 29 VIM REFERENCE MANUAL @@ -105,7 +105,7 @@ You may want to use GUI with GTK icons, then you have to download and install GTK for OpenVMS or at least runtime shareable images - LIBGTK from polarhome.com Post 7.2 Vim uses GTK2+ while the last GTK on OpenVMS is 1.2.10, therefore -the GTK build is no longer available. +the GTK build is no longer available. For more advanced questions, please send your problem to Vim on VMS mailing list <vim-vms@polarhome.com> @@ -772,9 +772,9 @@ Version 8.1 Version 8.0 - solve the 100% cpu usage issue while waiting for a keystroke - correct the VMS warnings and errors around handling the INFINITY (used in json.c) -- minor VMS port related changes -- correct the make_vms.mms file for 8.0 -- fix [.TESTDIR]make_vms.mms for 8.0 +- minor VMS port related changes +- correct the make_vms.mms file for 8.0 +- fix [.TESTDIR]make_vms.mms for 8.0 Version 7.4 - Undo: VMS can not handle more than one dot in the filenames use "dir/name" -> "dir/_un_name" diff --git a/runtime/doc/tags b/runtime/doc/tags index 4cc2fa7b6..988d11b47 100644 --- a/runtime/doc/tags +++ b/runtime/doc/tags @@ -1092,6 +1092,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* 'termbidi' options.txt /*'termbidi'* 'termencoding' options.txt /*'termencoding'* 'termguicolors' options.txt /*'termguicolors'* +'termmode' options.txt /*'termmode'* 'termwinkey' options.txt /*'termwinkey'* 'termwinscroll' options.txt /*'termwinscroll'* 'termwinsize' options.txt /*'termwinsize'* @@ -1112,6 +1113,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* 'titlestring' options.txt /*'titlestring'* 'tl' options.txt /*'tl'* 'tm' options.txt /*'tm'* +'tmod' options.txt /*'tmod'* 'to' options.txt /*'to'* 'toolbar' options.txt /*'toolbar'* 'toolbariconsize' options.txt /*'toolbariconsize'* @@ -1717,6 +1719,7 @@ $VIM_POSIX vi_diff.txt /*$VIM_POSIX* 05.6 usr_05.txt /*05.6* 05.7 usr_05.txt /*05.7* 05.8 usr_05.txt /*05.8* +05.9 usr_05.txt /*05.9* 06.1 usr_06.txt /*06.1* 06.2 usr_06.txt /*06.2* 06.3 usr_06.txt /*06.3* @@ -3741,6 +3744,7 @@ ColorSchemePre autocmd.txt /*ColorSchemePre* Command-line cmdline.txt /*Command-line* Command-line-mode cmdline.txt /*Command-line-mode* CompleteDone autocmd.txt /*CompleteDone* +ConPTY terminal.txt /*ConPTY* Contents quickref.txt /*Contents* Cscope if_cscop.txt /*Cscope* CursorHold autocmd.txt /*CursorHold* @@ -5012,7 +5016,10 @@ ZZ editing.txt /*ZZ* [:cntrl:] pattern.txt /*[:cntrl:]* [:digit:] pattern.txt /*[:digit:]* [:escape:] pattern.txt /*[:escape:]* +[:fname:] pattern.txt /*[:fname:]* [:graph:] pattern.txt /*[:graph:]* +[:ident:] pattern.txt /*[:ident:]* +[:keyword:] pattern.txt /*[:keyword:]* [:lower:] pattern.txt /*[:lower:]* [:print:] pattern.txt /*[:print:]* [:punct:] pattern.txt /*[:punct:]* @@ -5847,6 +5854,7 @@ dec-mouse options.txt /*dec-mouse* decada_members ft_ada.txt /*decada_members* deepcopy() eval.txt /*deepcopy()* defaults.vim starting.txt /*defaults.vim* +defaults.vim-explained usr_05.txt /*defaults.vim-explained* definition-search tagsrch.txt /*definition-search* definitions intro.txt /*definitions* delete() eval.txt /*delete()* @@ -7313,7 +7321,7 @@ lambda eval.txt /*lambda* lang-variable eval.txt /*lang-variable* language-mapping map.txt /*language-mapping* last-pattern pattern.txt /*last-pattern* -last-position-jump eval.txt /*last-position-jump* +last-position-jump usr_05.txt /*last-position-jump* last_buffer_nr() eval.txt /*last_buffer_nr()* latex-syntax syntax.txt /*latex-syntax* lc_time-variable eval.txt /*lc_time-variable* diff --git a/runtime/doc/terminal.txt b/runtime/doc/terminal.txt index 3b78b550e..de79ff00a 100644 --- a/runtime/doc/terminal.txt +++ b/runtime/doc/terminal.txt @@ -1,4 +1,4 @@ -*terminal.txt* For Vim version 8.1. Last change: 2018 May 17 +*terminal.txt* For Vim version 8.1. Last change: 2019 Feb 03 VIM REFERENCE MANUAL by Bram Moolenaar diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt index 95fdfeb92..cb8733fe1 100644 --- a/runtime/doc/todo.txt +++ b/runtime/doc/todo.txt @@ -1,4 +1,4 @@ -*todo.txt* For Vim version 8.1. Last change: 2019 Jan 26 +*todo.txt* For Vim version 8.1. Last change: 2019 Feb 02 VIM REFERENCE MANUAL by Bram Moolenaar @@ -38,6 +38,8 @@ browser use: https://github.com/vim/vim/issues/1234 *known-bugs* -------------------- Known bugs and current work ----------------------- +Timer test doesn't work on MS-Windows console, any way to make it work? + 'incsearch' with :s: (#3321) - Get E20 when using command history to get "'<,'>s/a/b" and no Visual area was set. (#3837) @@ -61,6 +63,7 @@ Terminal debugger: - Add option to not open the program window. It's not used when attaching to an already running program. (M. Kelly) - When only gdb window exists, on "quit" edit another buffer. +- Use a sign group - Termdebug does not work when Vim was build with mzscheme: gdb hangs just after "run". Everything else works, including communication channel. Not initializing mzscheme avoid the problem, thus it's not some #ifdef. @@ -107,48 +110,18 @@ Problem with Visual yank when 'linebreak' and 'showbreak' are set. Patch with tests, but it's not clear how it is supposed to work. (tommm, 2018 Nov 17) Asked about this, Dec 22. Christian will have a look. -Key mapping times out when using a timer in Gvim. (Michael Henry, 2018 Sep 9, -#3417) -Another report, with reproduction steps. (#3799) -Is this fixed by 8.1.0761? - Does not build with MinGW out of the box: - _stat64 is not defined, need to use "struct stat" in vim.h - WINVER conflict, should use 0x0600 by default? -js_decode() does not handle infinity properly. (Dominique Pelle, 2019 Jan 10, -#3788) - -Patch to avoid skipping buffers when loading a session. (Jason Franklin, 2019 -Jan 20) - -Patch to update example of how to restore the cursor. (Ken Takata, 2019 Jan -21) - -Patch to fix problems with timer in GUI. (Ozaki Kiichi, #3817) -Should also fix #3824. -Change the order in which GUI handles events? Make it work like os_unix.c, -check timer on lower level, check for pending messages higher up. - -Signs: -- screen not redrawn correctly. (Dominique Pelle, 2019 Jan 14, #3803) -- Use a sign group in the Termdebug plugin. -- Avoid that "sign unplace id" does a redraw right away, esp. when there is - a sequence of these commands. (Andy Stewart, 2018 Mar 16) - Crash when mixing matchadd and substitute()? (Max Christian Pohle, 2018 May 13, #2910) Can't reproduce? -Patch to recognize more systems with has(). (Ozaki Kiichi, #3855) - Merge checking for 'cursorline' and 'concealcursor', see neovim #9492. Errors found with random data: heap-buffer-overflow in alist_add (#2472) -Patch for xxd to make it work with 64 bit numbers. (Christer Jense, 2019 Jan -11, #3791) - Win32 key codes are messy. Mike Williams tried to fix that, but now old mappings no longer work. Create a new terminal for the better solution? @@ -177,12 +150,6 @@ similar to check_due_timer(). Also see #3809. C syntax: {} inside () causes following {} to be highlighted as error. (Michalis Giannakidis, 2006 Jun 1) -Patch on #3690 to fix that "wincmd p" does not always behave properly. -(Christian Brabandt, 2018 Dec 17) - -Patch: When using %v in 'errorformat', assume the number is the screen column -not bytes, also handle multi-byte charactes. (Yegappan Lakshmanan, #3700) - Support setting the character displayed below the last line? Neovim uses "eob:X" in 'fillchars'. @@ -197,37 +164,24 @@ balloonexpr() on MS-Windows GUI doesn't handle accented chars? (nivaemail, 2018 Sep 14) Another request: #3811. -Patch for MinGW build with static libraries. (Ken Takata, 2018 Dec 16) - -Patch to add new regexp classes :ident:, :keyword:, :fname:. -(ichizok, 2016 Jan 12, #1373) - -Patch to add "termsig" - signal that caused job to end. (Ozaki Kiichi, 2019 -Jan 10, #3786) - More warnings from static analysis: https://lgtm.com/projects/g/vim/vim/alerts/?mode=list -Patch for this: (Aron Widforss, 2018 Oct 13, #3539) - missing a test. -7 Make 'scrolloff' a global-local option, so that it can be different in the - quickfix window, for example. (Gary Holloway) - Also do 'sidescrolloff'. - -Patch for ConPTY support, new one: #3794 Does this work now? -(Nobuhiro Takasaki) - -Issue #3649: Retrying the X server connection once may be insufficient. -Since patch 8.1.0615 we try reconnecting five times. Does it work? - nvo-mode mapping works on Windows, not on Linux. (#3678) Patch to be able to separately map CTRL-H and BS on Windows. (Linwei, 2017 Jul 11, #1833) +Patch to improve readability of complicated if(). (ichizok, 2019 Jan 29, +#3879) + Pasting foo} causes Vim to behave weird. (John Little, 2018 Jun 17) Related to bracketed paste. I cannot reproduce it. +When 'confirm' is set a "silent q" doesn't show the prompt. It should in this +case. (Nate Peterson, 2019 Jan 31, #3892) +For "silent! q" it should not prompt and just fail. + Using CTRL-L to add a character to the search string doesn't work for the last character in the file. (Smylers, 2018 Nov 17, #3620) Suggested patch by Hirohito Higashi, 2018 Nov 18. @@ -250,13 +204,16 @@ When 'sidescrolloff' is set, using "zl" to go to the end of the line, suddenly scrolls back. Should allow for this scrolling, like 'scrolloff' does when using CTRL-E. (Yee Cheng Chin, #3721) -Patch to add ":vsbuffer" - vertical split + :sbuffer. (Rob Pilling, 2019 Jan -17, #3816) Do we really need this? - Invalid memory access with old regexp engine. (Dominique Pelle, 2018 Sep 3, #3405) Introduced by 8.0.1517, which was fixing another memory access error. (Sep 8) +Patch to add complete_mode(). Shougo - #3866. Alternate patch by Hirohito +Higashi, 2019 Jan 27, included now? + +Patch for ConPTY support, new one: #3794 Does this work now? It should. +(Nobuhiro Takasaki) + Add function to make use of internal diff, working on two lists and returning unified diff (list of lines). @@ -272,6 +229,8 @@ cursorline highlighting not removed after yanking in Visual mode. (Matéo Zanibelli, 2018 Oct 30, #3578) Patch by Christian, Oct 30. +Patch to clean up CI configs. (Ozaki Kiichi, 2019 Feb 1, #3890) + Memory leaks in test_channel? (or is it because of fork()) Using uninitialized value in test_crypt. Memory leak in test_terminal: @@ -293,6 +252,11 @@ Patch to add match count and current index "3/44" when using "n" command. matchaddpos() gets slow with many matches. Proposal by Rick Howe, 2018 Jul 19. +Should make 'listchars' global-local. Local to window or to buffer? +Probably window. +Add something like 'fillchars' local to window, but allow for specifying a +highlight name. Esp. for the statusline. + Sourceforge Vim pages still have content, redirect from empty page. Check for PHP errors. (Wayne Davison, 2018 Oct 26) @@ -335,6 +299,9 @@ Further xdiff changes: Difference between two regexp engines: #3373 +Patch to properly break CJK lines: #3875 +Requires more tests. dbcs_ functions are not implemented. + Patch to add ch_listen() (Yasuhiro Matsumoto, 2018 Nov 26, #3639) What is the practical use for this? @@ -424,8 +391,6 @@ behave strangely, as if there is a gap and a vertical window separator. Make {skip} argument of searchpair() consistent with other places where we pass an expression to evaluate. Allow passing zero for "never skip". -The 'scrolloff' option is global, make it global-local. #3195 - Add an option similar to 'lazyredraw' to skip redrawing while executing a script or function. diff --git a/runtime/doc/usr_05.txt b/runtime/doc/usr_05.txt index a77f90b07..9694efb00 100644 --- a/runtime/doc/usr_05.txt +++ b/runtime/doc/usr_05.txt @@ -1,4 +1,4 @@ -*usr_05.txt* For Vim version 8.1. Last change: 2018 Feb 20 +*usr_05.txt* For Vim version 8.1. Last change: 2019 Jan 26 VIM USER MANUAL - by Bram Moolenaar @@ -11,12 +11,13 @@ Vim's capabilities. Or define your own macros. |05.1| The vimrc file |05.2| The example vimrc file explained -|05.3| Simple mappings -|05.4| Adding a package -|05.5| Adding a plugin -|05.6| Adding a help file -|05.7| The option window -|05.8| Often used options +|05.3| The defaults.vim file explained +|05.4| Simple mappings +|05.5| Adding a package +|05.6| Adding a plugin +|05.7| Adding a help file +|05.8| The option window +|05.9| Often used options Next chapter: |usr_06.txt| Using syntax highlighting Previous chapter: |usr_04.txt| Making small changes @@ -82,50 +83,120 @@ will give you hints about how to set up your own preferences. Not everything will be explained though. Use the ":help" command to find out more. > - set nocompatible - -As mentioned in the first chapter, these manuals explain Vim working in an -improved way, thus not completely Vi compatible. Setting the 'compatible' -option off, thus 'nocompatible' takes care of this. - + " Get the defaults that most users want. + source $VIMRUNTIME/defaults.vim > - set backspace=indent,eol,start +This loads the "defaults.vim" file in the $VIMRUNTIME directory. This sets up +Vim for how most users like it. If you are one of the few that don't, then +comment out this line. The commands are explained below: +|defaults.vim-explained| -This specifies where in Insert mode the <BS> is allowed to delete the -character in front of the cursor. The three items, separated by commas, tell -Vim to delete the white space at the start of the line, a line break and the -character before where Insert mode started. > - - set autoindent - -This makes Vim use the indent of the previous line for a newly created line. -Thus there is the same amount of white space before the new line. For example -when pressing <Enter> in Insert mode, and when using the "o" command to open a -new line. -> - if has("vms") set nobackup else set backup + if has('persistent_undo') + set undofile + endif endif This tells Vim to keep a backup copy of a file when overwriting it. But not on the VMS system, since it keeps old versions of files already. The backup file will have the same name as the original file with "~" added. See |07.4| + +This also sets the 'undofile' option, if available. This will store the +multi-level undo information in a file. The result is that when you change a +file, exit Vim, and then edit the file again, you can undo the changes made +previously. It's a very powerful and useful feature, at the cost of storing a +file. For more information see |undo-persistence|. + +The "if" command is very useful to set options +only when some condition is met. More about that in |usr_41.txt|. + +> + if &t_Co > 2 || has("gui_running") + set hlsearch + endif + +This switches on the 'hlsearch' option, telling Vim to highlight matches with +the last used search pattern. + +> + augroup vimrcEx + au! + autocmd FileType text setlocal textwidth=78 + augroup END + +This makes Vim break text to avoid lines getting longer than 78 characters. +But only for files that have been detected to be plain text. There are +actually two parts here. "autocmd FileType text" is an autocommand. This +defines that when the file type is set to "text" the following command is +automatically executed. "setlocal textwidth=78" sets the 'textwidth' option +to 78, but only locally in one file. + +The wrapper with "augroup vimrcEx" and "augroup END" makes it possible to +delete the autocommand with the "au!" command. See |:augroup|. + +> + if has('syntax') && has('eval') + packadd! matchit + endif + +This loads the "matchit" plugin if the required features are available. +It makes the |%| command more powerful. This is explained at +|matchit-install|. + + +============================================================================== +*05.3* The defaults.vim file explained *defaults.vim-explained* + +The |defaults.vim| file is loaded when the user has no vimrc file. When you +create a new vimrc file, add this line near the top to keep using it: > + + source $VIMRUNTIME/defaults.vim + +Or use the vimrc_example.vim file, as explained above. + +The following explains what defaults.vim is doing. + +> + if exists('skip_defaults_vim') + finish + endif +> +Loading defaults.vim can be disabled with this command: > + let skip_defaults_vim = 1 +This has to be done in the system vimrc file. See |system-vimrc|. If you +have a user vimrc this is not needed, since defaults.vim will not be loaded +automatically. +> > + set nocompatible - set history=50 +As mentioned in the first chapter, these manuals explain Vim working in an +improved way, thus not completely Vi compatible. Setting the 'compatible' +option off, thus 'nocompatible' takes care of this. + +> + set backspace=indent,eol,start + +This specifies where in Insert mode the <BS> is allowed to delete the +character in front of the cursor. The three items, separated by commas, tell +Vim to delete the white space at the start of the line, a line break and the +character before where Insert mode started. See 'backspace'. + +> + set history=200 -Keep 50 commands and 50 search patterns in the history. Use another number if -you want to remember fewer or more lines. +Keep 200 commands and 200 search patterns in the history. Use another number +if you want to remember fewer or more lines. See 'history'. > set ruler Always display the current cursor position in the lower right corner of the -Vim window. +Vim window. See 'ruler'. > set showcmd @@ -144,10 +215,37 @@ the "2fw" command is executed and the displayed "2f" is removed. ^^^^^^^^^^^ ^^^^^^^^ ^^^^^^^^^^ 'showmode' 'showcmd' 'ruler' + +> + set wildmenu + +Display completion matches in a status line. That is when you type <Tab> and +there is more than one match. See 'wildmenu'. + +> + set ttimeout + set ttimeoutlen=100 + +This makes typing Esc take effect more quickly. Normally Vim waits a second +to see if the Esc is the start of an escape sequence. If you have a very slow +remote connection, increase the number. See 'ttimeout'. + +> + set display=truncate + +Show @@@ in the last line if it is truncated, instead of hiding the whole +like. See 'display'. + > set incsearch -Display the match for a search pattern when halfway typing it. +Display the match for a search pattern when halfway typing it. See +'incsearch'. + +> + set nrformats-=octal + +Do not recognize numbers starting with a zero as octal. See 'nrformats'. > map Q gq @@ -158,23 +256,30 @@ it worked before Vim 5.0. Otherwise the "Q" command starts Ex mode, but you will not need it. > + inoremap <C-U> <C-G>u<C-U> +> +CTRL-U in insert mode deletes all entered text in the current line. Use +CTRL-G u to first break undo, so that you can undo CTRL-U after inserting a +line break. Revert with ":iunmap <C-U>". + +> + if has('mouse') + set mouse=a + endif + +Enable using the mouse if available. See 'mouse'. + +> vnoremap _g y:exe "grep /" . escape(@", '\\/') . "/ *.c *.h"<CR> This mapping yanks the visually selected text and searches for it in C files. -This is a complicated mapping. You can see that mappings can be used to do -quite complicated things. Still, it is just a sequence of commands that are -executed like you typed them. +You can see that a mapping can be used to do quite complicated things. Still, +it is just a sequence of commands that are executed like you typed them. > - if &t_Co > 2 || has("gui_running") - syntax on - set hlsearch - endif + syntax on -This switches on syntax highlighting, but only if colors are available. And -the 'hlsearch' option tells Vim to highlight matches with the last used search -pattern. The "if" command is very useful to set options only when some -condition is met. More about that in |usr_41.txt|. +Enable highlighting files in color. See |syntax|. *vimrc-filetype* > filetype plugin indent on @@ -201,21 +306,12 @@ This switches on three very clever mechanisms: automatically. Vim comes with these indent rules for a number of filetypes. See |:filetype-indent-on| and 'indentexpr'. -> - autocmd FileType text setlocal textwidth=78 -This makes Vim break text to avoid lines getting longer than 78 characters. -But only for files that have been detected to be plain text. There are -actually two parts here. "autocmd FileType text" is an autocommand. This -defines that when the file type is set to "text" the following command is -automatically executed. "setlocal textwidth=78" sets the 'textwidth' option -to 78, but only locally in one file. - - *restore-cursor* > - autocmd BufReadPost * - \ if line("'\"") > 1 && line("'\"") <= line("$") | - \ exe "normal! g`\"" | - \ endif + *restore-cursor* *last-position-jump* > + autocmd BufReadPost * + \ if line("'\"") >= 1 && line("'\"") <= line("$") && &ft !~# 'commit' + \ | exe "normal! g`\"" + \ | endif Another autocommand. This time it is used after reading any file. The complicated stuff after it checks if the '" mark is defined, and jumps to it @@ -224,8 +320,22 @@ from the previous line. That avoids a line getting very long. See |line-continuation|. This only works in a Vim script file, not when typing commands at the command-line. +> + command DiffOrig vert new | set bt=nofile | r ++edit # | 0d_ | diffthis + \ | wincmd p | diffthis + +This adds the ":DiffOrig" command. Use this in a modified buffer to see the +differences with the file it was loaded from. See |diff|. + +> + set nolangremap + +Prevent that the langmap option applies to characters that result from a +mapping. If set (default), this may break plugins (but it's backward +compatible). See 'langremap'. + ============================================================================== -*05.3* Simple mappings +*05.4* Simple mappings A mapping enables you to bind a set of Vim commands to a single key. Suppose, for example, that you need to surround certain words with curly braces. In @@ -272,7 +382,7 @@ The ":map" command (with no arguments) lists your current mappings. At least the ones for Normal mode. More about mappings in section |40.1|. ============================================================================== -*05.4* Adding a package *add-package* *matchit-install* +*05.5* Adding a package *add-package* *matchit-install* A package is a set of files that you can add to Vim. There are two kinds of packages: optional and automatically loaded on startup. @@ -310,7 +420,7 @@ an archive or as a repository. For an archive you can follow these steps: More information about packages can be found here: |packages|. ============================================================================== -*05.5* Adding a plugin *add-plugin* *plugin* +*05.6* Adding a plugin *add-plugin* *plugin* Vim's functionality can be extended by adding plugins. A plugin is nothing more than a Vim script file that is loaded automatically when Vim starts. You @@ -462,7 +572,7 @@ Further reading: |new-filetype| How to detect a new file type. ============================================================================== -*05.6* Adding a help file *add-local-help* +*05.7* Adding a help file *add-local-help* If you are lucky, the plugin you installed also comes with a help file. We will explain how to install the help file, so that you can easily find help @@ -507,7 +617,7 @@ them through the tag. For writing a local help file, see |write-local-help|. ============================================================================== -*05.7* The option window +*05.8* The option window If you are looking for an option that does what you want, you can search in the help files here: |options|. Another way is by using this command: > @@ -546,7 +656,7 @@ border. This is what the 'scrolloff' option does, it specifies an offset from the window border where scrolling starts. ============================================================================== -*05.8* Often used options +*05.9* Often used options There are an awful lot of options. Most of them you will hardly ever use. Some of the more useful ones will be mentioned here. Don't forget you can diff --git a/runtime/doc/usr_11.txt b/runtime/doc/usr_11.txt index 4cffc7deb..cd0b72643 100644 --- a/runtime/doc/usr_11.txt +++ b/runtime/doc/usr_11.txt @@ -1,4 +1,4 @@ -*usr_11.txt* For Vim version 8.1. Last change: 2018 Apr 13 +*usr_11.txt* For Vim version 8.1. Last change: 2019 Jan 30 VIM USER MANUAL - by Bram Moolenaar @@ -120,7 +120,7 @@ the resulting files if they are what you expected. USING A SPECIFIC SWAP FILE If you know which swap file needs to be used, you can recover by giving the -swap file name. Vim will then finds out the name of the original file from +swap file name. Vim will then find out the name of the original file from the swap file. Example: > @@ -284,7 +284,6 @@ If you really don't want to see this message, you can add the 'A' flag to the 'shortmess' option. But it's very unusual that you need this. For remarks about encryption and the swap file, see |:recover-crypt|. -For programatic access to the swap file, see |swapinfo()|. ============================================================================== *11.4* Further reading diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt index dd0583b60..07d11f8f7 100644 --- a/runtime/doc/usr_41.txt +++ b/runtime/doc/usr_41.txt @@ -1,4 +1,4 @@ -*usr_41.txt* For Vim version 8.1. Last change: 2019 Jan 12 +*usr_41.txt* For Vim version 8.1. Last change: 2019 Jan 29 VIM USER MANUAL - by Bram Moolenaar @@ -771,7 +771,7 @@ System functions and manipulation of files: systemlist() get the result of a shell command as a list hostname() name of the system readfile() read a file into a List of lines - writefile() write a List of lines into a file + writefile() write a List of lines or Blob into a file Date and Time: *date-functions* *time-functions* getftime() get last modification time of a file @@ -941,6 +941,7 @@ Testing: *test-functions* test_override() test with Vim internal overrides test_garbagecollect_now() free memory right now test_ignore_error() ignore a specific error message + test_null_blob() return a null Blob test_null_channel() return a null Channel test_null_dict() return a null Dict test_null_job() return a null Job diff --git a/runtime/evim.vim b/runtime/evim.vim index 7bfebcd16..4a875ee91 100644 --- a/runtime/evim.vim +++ b/runtime/evim.vim @@ -1,6 +1,6 @@ " Vim script for Evim key bindings " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2017 Sep 20 +" Last Change: 2019 Jan 27 " Don't use Vi-compatible mode. set nocompatible @@ -49,19 +49,14 @@ if &t_Co > 2 || has("gui_running") nohlsearch 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 - " 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 - - " For all text files set 'textwidth' to 78 characters. - au FileType text setlocal tw=78 - -endif " has("autocmd") +" For all text files set 'textwidth' to 78 characters. +au FileType text setlocal tw=78 " Add optional packages. " diff --git a/runtime/filetype.vim b/runtime/filetype.vim index 5a21a1dfb..76b7aa1a7 100644 --- a/runtime/filetype.vim +++ b/runtime/filetype.vim @@ -1,7 +1,7 @@ " Vim support file to detect file types " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2019 Jan 18 +" Last Change: 2019 Jan 28 " Listen very carefully, I will say this only once if exists("did_load_filetypes") @@ -97,6 +97,7 @@ au BufNewFile,BufRead proftpd.conf* call s:StarSetf('apachestyle') " Apache config file au BufNewFile,BufRead .htaccess,*/etc/httpd/*.conf setf apache +au BufNewFile,BufRead */etc/apache2/sites-*/*.com setf apache " XA65 MOS6510 cross assembler au BufNewFile,BufRead *.a65 setf a65 diff --git a/runtime/indent/sh.vim b/runtime/indent/sh.vim index 32bc9f35b..c93be3195 100644 --- a/runtime/indent/sh.vim +++ b/runtime/indent/sh.vim @@ -3,10 +3,11 @@ " Maintainer: Christian Brabandt <cb@256bit.org> " Original Author: Nikolai Weibull <now@bitwi.se> " Previous Maintainer: Peter Aronoff <telemachus@arpinum.org> -" Latest Revision: 2018-03-26 +" Latest Revision: 2019-02-02 " License: Vim (see :h license) " Repository: https://github.com/chrisbra/vim-sh-indent " Changelog: +" 20190201 - Better check for closing if sections " 20180724 - make check for zsh syntax more rigid (needs word-boundaries) " 20180326 - better support for line continuation " 20180325 - better detection of function definitions @@ -59,6 +60,7 @@ function! s:indent_value(option) endfunction function! GetShIndent() + let curline = getline(v:lnum) let lnum = prevnonblank(v:lnum - 1) if lnum == 0 return 0 @@ -72,7 +74,7 @@ function! GetShIndent() " Check contents of previous lines if line =~ '^\s*\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\|foreach\)\>' || \ (&ft is# 'zsh' && line =~ '\<\%(if\|then\|do\|else\|elif\|case\|while\|until\|for\|select\|foreach\)\>') - if line !~ '\<\%(fi\|esac\|done\|end\)\>\s*\%(#.*\)\=$' + if !s:is_end_expression(line) let ind += s:indent_value('default') endif elseif s:is_case_label(line, pnum) @@ -90,7 +92,10 @@ function! GetShIndent() endif elseif s:end_block(line) && !s:start_block(line) let ind -= s:indent_value('default') - elseif pnum != 0 && s:is_continuation_line(pline) && !s:end_block(getline(v:lnum)) + elseif pnum != 0 && + \ s:is_continuation_line(pline) && + \ !s:end_block(curline) && + \ !s:is_end_expression(curline) " only add indent, if line and pline is in the same block let i = v:lnum let ind2 = indent(s:find_continued_lnum(pnum)) @@ -106,8 +111,15 @@ function! GetShIndent() let pine = line " Check content of current line - let line = getline(v:lnum) - if line =~ '^\s*\%(then\|do\|else\|elif\|fi\|done\|end\)\>' || s:end_block(line) + let line = curline + " Current line is a endif line, so get indent from start of "if condition" line + " TODO: should we do the same for other "end" lines? + if curline =~ '^\s*\%(fi\)\s*\%(#.*\)\=$' + let previous_line = search('if.\{-\};\s*then\s*\%(#.*\)\=$', 'bnW') + if previous_line > 0 + let ind = indent(previous_line) + endif + elseif line =~ '^\s*\%(then\|do\|else\|elif\|done\|end\)\>' || s:end_block(line) let ind -= s:indent_value('default') elseif line =~ '^\s*esac\>' && s:is_case_empty(getline(v:lnum - 1)) let ind -= s:indent_value('default') @@ -210,8 +222,8 @@ endfunction function! s:is_here_doc(line) if a:line =~ '^\w\+$' - let here_pat = '<<-\?'. s:escape(a:line). '\$' - return search(here_pat, 'bnW') > 0 + let here_pat = '<<-\?'. s:escape(a:line). '\$' + return search(here_pat, 'bnW') > 0 endif return 0 endfunction @@ -256,5 +268,9 @@ function! s:is_comment(line) return a:line =~ '^\s*#' endfunction +function! s:is_end_expression(line) + return a:line =~ '\<\%(fi\|esac\|done\|end\)\>\s*\%(#.*\)\=$' +endfunction + let &cpo = s:cpo_save unlet s:cpo_save diff --git a/runtime/indent/xml.vim b/runtime/indent/xml.vim index bc64aacfe..29069bab8 100644 --- a/runtime/indent/xml.vim +++ b/runtime/indent/xml.vim @@ -1,9 +1,11 @@ " Language: xml " Repository: https://github.com/chrisbra/vim-xml-ftplugin -" Last Changed: Dec 07th, 2018 +" Last Changed: Jan 28, 2019 " Maintainer: Christian Brabandt <cb@256bit.org> " Previous Maintainer: Johannes Zellner <johannes@zellner.org> " Last Change: +" 20190128 - Make sure to find previous tag +" https://github.com/chrisbra/vim-xml-ftplugin/issues/4 " 20181116 - Fix indentation when tags start with a colon or an underscore " https://github.com/vim/vim/pull/926 " 20181022 - Do not overwrite indentkeys setting @@ -88,15 +90,16 @@ endfun fun! XmlIndentGet(lnum, use_syntax_check) " Find a non-empty line above the current line. let plnum = prevnonblank(a:lnum - 1) - " Find previous line with a tag (regardless whether open or closed) - let ptag = search('.\{-}<[/:A-Z_a-z]', 'bnw') - " Hit the start of the file, use zero indent. if plnum == 0 return 0 endif - let syn_name = '' + " Find previous line with a tag (regardless whether open or closed, + " but always start restrict the match to a line before the current one + let ptag_pattern = '\%(.\{-}<[/:A-Z_a-z]\)'. '\%(\&\%<'. line('.').'l\)' + let ptag = search(ptag_pattern, 'bnw') + let syn_name = '' if a:use_syntax_check let check_lnum = <SID>XmlIndentSynCheck(plnum) let check_alnum = <SID>XmlIndentSynCheck(a:lnum) diff --git a/runtime/menu.vim b/runtime/menu.vim index a6ecf3ce5..e1a510fce 100644 --- a/runtime/menu.vim +++ b/runtime/menu.vim @@ -2,7 +2,7 @@ " You can also use this as a start for your own set of menus. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 May 17 +" Last Change: 2019 Jan 27 " Note that ":an" (short for ":anoremenu") is often used to make a menu work " in all modes and avoid side effects from mappings defined by the user. @@ -856,17 +856,15 @@ an 70.300 &Window.&New<Tab>^Wn <C-W>n an 70.310 &Window.S&plit<Tab>^Ws <C-W>s an 70.320 &Window.Sp&lit\ To\ #<Tab>^W^^ <C-W><C-^> an 70.330 &Window.Split\ &Vertically<Tab>^Wv <C-W>v -if has("vertsplit") - an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR> - if !exists("*MenuExplOpen") - fun MenuExplOpen() - if @% == "" - 20vsp . - else - exe "20vsp " . s:FnameEscape(expand("%:p:h")) - endif - endfun - endif +an <silent> 70.332 &Window.Split\ File\ E&xplorer :call MenuExplOpen()<CR> +if !exists("*MenuExplOpen") + fun MenuExplOpen() + if @% == "" + 20vsp . + else + exe "20vsp " . s:FnameEscape(expand("%:p:h")) + endif + endfun endif an 70.335 &Window.-SEP1- <Nop> an 70.340 &Window.&Close<Tab>^Wc :confirm close<CR> diff --git a/runtime/optwin.vim b/runtime/optwin.vim index 5ab5792ae..de3cdfb0a 100644 --- a/runtime/optwin.vim +++ b/runtime/optwin.vim @@ -1,7 +1,7 @@ " These commands create the option window. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last Change: 2018 May 15 +" Last Change: 2019 Jan 27 " If there already is an option window, jump to that one. let buf = bufnr('option-window') @@ -395,11 +395,9 @@ endif call <SID>Header("syntax, highlighting and spelling") call append("$", "background\t\"dark\" or \"light\"; the background color brightness") call <SID>OptionG("bg", &bg) -if has("autocmd") - call append("$", "filetype\ttype of file; triggers the FileType event when set") - call append("$", "\t(local to buffer)") - call <SID>OptionL("ft") -endif +call append("$", "filetype\ttype of file; triggers the FileType event when set") +call append("$", "\t(local to buffer)") +call <SID>OptionL("ft") if has("syntax") call append("$", "syntax\tname of syntax highlighting used") call append("$", "\t(local to buffer)") @@ -454,10 +452,8 @@ if has("statusline") endif call append("$", "equalalways\tmake all windows the same size when adding/removing windows") call <SID>BinOptionG("ea", &ea) -if has("vertsplit") - call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"") - call <SID>OptionG("ead", &ead) -endif +call append("$", "eadirection\tin which direction 'equalalways' works: \"ver\", \"hor\" or \"both\"") +call <SID>OptionG("ead", &ead) call append("$", "winheight\tminimal number of lines used for the current window") call append("$", " \tset wh=" . &wh) call append("$", "winminheight\tminimal number of lines used for any window") @@ -465,15 +461,13 @@ call append("$", " \tset wmh=" . &wmh) call append("$", "winfixheight\tkeep the height of the window") call append("$", "\t(local to window)") call <SID>BinOptionL("wfh") -if has("vertsplit") call append("$", "winfixwidth\tkeep the width of the window") call append("$", "\t(local to window)") call <SID>BinOptionL("wfw") - call append("$", "winwidth\tminimal number of columns used for the current window") - call append("$", " \tset wiw=" . &wiw) - call append("$", "winminwidth\tminimal number of columns used for any window") - call append("$", " \tset wmw=" . &wmw) -endif +call append("$", "winwidth\tminimal number of columns used for the current window") +call append("$", " \tset wiw=" . &wiw) +call append("$", "winminwidth\tminimal number of columns used for any window") +call append("$", " \tset wmw=" . &wmw) call append("$", "helpheight\tinitial height of the help window") call append("$", " \tset hh=" . &hh) if has("quickfix") @@ -490,22 +484,16 @@ call append("$", "\tto a buffer") call <SID>OptionG("swb", &swb) call append("$", "splitbelow\ta new window is put below the current one") call <SID>BinOptionG("sb", &sb) -if has("vertsplit") - call append("$", "splitright\ta new window is put right of the current one") - call <SID>BinOptionG("spr", &spr) -endif -if has("scrollbind") - call append("$", "scrollbind\tthis window scrolls together with other bound windows") - call append("$", "\t(local to window)") - call <SID>BinOptionL("scb") - call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'") - call <SID>OptionG("sbo", &sbo) -endif -if has("cursorbind") - call append("$", "cursorbind\tthis window's cursor moves together with other bound windows") - call append("$", "\t(local to window)") - call <SID>BinOptionL("crb") -endif +call append("$", "splitright\ta new window is put right of the current one") +call <SID>BinOptionG("spr", &spr) +call append("$", "scrollbind\tthis window scrolls together with other bound windows") +call append("$", "\t(local to window)") +call <SID>BinOptionL("scb") +call append("$", "scrollopt\t\"ver\", \"hor\" and/or \"jump\"; list of options for 'scrollbind'") +call <SID>OptionG("sbo", &sbo) +call append("$", "cursorbind\tthis window's cursor moves together with other bound windows") +call append("$", "\t(local to window)") +call <SID>BinOptionL("crb") if has("terminal") call append("$", "termwinsize\tsize of a terminal window") call append("$", "\t(local to window)") @@ -1105,12 +1093,10 @@ if has("wildmenu") call append("$", "wildmenu\tcommand-line completion shows a list of matches") call <SID>BinOptionG("wmnu", &wmnu) endif -if has("vertsplit") - call append("$", "cedit\tkey used to open the command-line window") - call <SID>OptionG("cedit", &cedit) - call append("$", "cmdwinheight\theight of the command-line window") - call <SID>OptionG("cwh", &cwh) -endif +call append("$", "cedit\tkey used to open the command-line window") +call <SID>OptionG("cedit", &cedit) +call append("$", "cmdwinheight\theight of the command-line window") +call <SID>OptionG("cwh", &cwh) call <SID>Header("executing external commands") @@ -1292,14 +1278,10 @@ endif call <SID>Header("various") -if has("virtualedit") - call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"") - call <SID>OptionG("ve", &ve) -endif -if has("autocmd") - call append("$", "eventignore\tlist of autocommand events which are to be ignored") - call <SID>OptionG("ei", &ei) -endif +call append("$", "virtualedit\twhen to use virtual editing: \"block\", \"insert\" and/or \"all\"") +call <SID>OptionG("ve", &ve) +call append("$", "eventignore\tlist of autocommand events which are to be ignored") +call <SID>OptionG("ei", &ei) call append("$", "loadplugins\tload plugin scripts when starting up") call <SID>BinOptionG("lpl", &lpl) call append("$", "exrc\tenable reading .vimrc/.exrc/.gvimrc in the current directory") diff --git a/runtime/pack/dist/opt/matchit/doc/matchit.txt b/runtime/pack/dist/opt/matchit/doc/matchit.txt index 2c6f7d724..d3f7cea72 100644 --- a/runtime/pack/dist/opt/matchit/doc/matchit.txt +++ b/runtime/pack/dist/opt/matchit/doc/matchit.txt @@ -1,13 +1,13 @@ *matchit.txt* Extended "%" matching For instructions on installing this file, type - :help matchit-install + `:help matchit-install` inside Vim. -For Vim version 6.3. Last change: 2018 Dec 31 +For Vim version 8.1. Last change: 2019 Jan 28 - VIM REFERENCE MANUAL by Benji Fisher + VIM REFERENCE MANUAL by Benji Fisher et al *matchit* *matchit.vim* @@ -69,12 +69,8 @@ for how to specify matching patterns. MODES: *matchit-modes* *matchit-v_%* *matchit-o_%* -Mostly, % and related motions (|g%| and |[%| and |]%|) work just like built-in -|motion| commands in |Operator-pending| and |Visual| modes. However, you -cannot make these motions |linewise| or |characterwise|, since the |:omap|s -that define them start with "v" in order to make the default behavior -inclusive. (See |o_v|.) In other words, "dV%" will not work. The -work-around is to go through Visual mode: "V%d" will work. +Mostly, % and related motions (|g%| and |[%| and |]%|) should just work like built-in +|motion| commands in |Operator-pending| and |Visual| modes (as of 8.1.648) LANGUAGES: *matchit-languages* @@ -386,16 +382,10 @@ try to respond to reports of bugs that cause real problems. If it does not cause serious problems, or if there is a work-around, a bug may sit there for a while. Moral: if a bug (known or not) bothers you, let me know. -The various |:vmap|s defined in the script (%, |g%|, |[%|, |]%|, |a%|) may -have undesired effects in Select mode |Select-mode-mapping|. At least, if you -want to replace the selection with any character in "ag%[]" there will be a -pause of |'updatetime'| first. E.g., "yV%" would normally work linewise, but -the plugin mapping makes it characterwise. - It would be nice if "\0" were recognized as the entire pattern. That is, it would be nice if "foo:\end\0" had the same effect as "\(foo\):\end\1". I may try to implement this in a future version. (This is not so easy to arrange as you might think!) ============================================================================== -vim:tw=78:fo=tcq2: +vim:tw=78:fo=tcq2:ft=help: diff --git a/runtime/pack/dist/opt/matchit/plugin/matchit.vim b/runtime/pack/dist/opt/matchit/plugin/matchit.vim index 504ab12e1..84147f1fc 100644 --- a/runtime/pack/dist/opt/matchit/plugin/matchit.vim +++ b/runtime/pack/dist/opt/matchit/plugin/matchit.vim @@ -1,13 +1,13 @@ " matchit.vim: (global plugin) Extended "%" matching -" Last Change: 2018 Dec 31 -" Maintainer: Benji Fisher PhD <benji@member.AMS.org> -" Version: 1.13.3, for Vim 6.3+ -" Fix from Fernando Torres included. -" Improvement from Ken Takata included. -" URL: http://www.vim.org/script.php?script_id=39 +" Maintainer: Christian Brabandt +" Version: 1.15 +" Last Change: 2019 Jan 28 +" Repository: https://github.com/chrisbra/matchit +" Previous URL:http://www.vim.org/script.php?script_id=39 +" Previous Maintainer: Benji Fisher PhD <benji@member.AMS.org> " Documentation: -" The documentation is in a separate file, matchit.txt . +" The documentation is in a separate file: ../doc/matchit.txt . " Credits: " Vim editor by Bram Moolenaar (Thanks, Bram!) @@ -38,789 +38,55 @@ " work but extend it. " Allow user to prevent loading and prevent duplicate loading. -if exists("loaded_matchit") || &cp +if exists("g:loaded_matchit") || &cp finish endif -let loaded_matchit = 1 -let s:last_mps = "" -let s:last_words = ":" -let s:patBR = "" +let g:loaded_matchit = 1 let s:save_cpo = &cpo set cpo&vim -nnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'n') <CR> -nnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'n') <CR> -vnoremap <silent> % :<C-U>call <SID>Match_wrapper('',1,'v') <CR>m'gv`` -vnoremap <silent> g% :<C-U>call <SID>Match_wrapper('',0,'v') <CR>m'gv`` -onoremap <silent> % v:<C-U>call <SID>Match_wrapper('',1,'o') <CR> -onoremap <silent> g% v:<C-U>call <SID>Match_wrapper('',0,'o') <CR> +nnoremap <silent> <Plug>(MatchitNormalForward) :<C-U>call matchit#Match_wrapper('',1,'n')<CR> +nnoremap <silent> <Plug>(MatchitNormalBackward) :<C-U>call matchit#Match_wrapper('',0,'n')<CR> +vnoremap <silent> <Plug>(MatchitVisualForward) :<C-U>call matchit#Match_wrapper('',1,'v')<CR>m'gv`` +vnoremap <silent> <Plug>(MatchitVisualBackward) :<C-U>call matchit#Match_wrapper('',0,'v')<CR>m'gv`` +onoremap <silent> <Plug>(MatchitOperationForward) :<C-U>call matchit#Match_wrapper('',1,'o')<CR> +onoremap <silent> <Plug>(MatchitOperationBackward) :<C-U>call matchit#Match_wrapper('',0,'o')<CR> + +nmap <silent> % <Plug>(MatchitNormalForward) +nmap <silent> g% <Plug>(MatchitNormalBackward) +xmap <silent> % <Plug>(MatchitVisualForward) +xmap <silent> g% <Plug>(MatchitVisualBackward) +omap <silent> % <Plug>(MatchitOperationForward) +omap <silent> g% <Plug>(MatchitOperationBackward) " Analogues of [{ and ]} using matching patterns: -nnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "n") <CR> -nnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "n") <CR> -vmap [% <Esc>[%m'gv`` -vmap ]% <Esc>]%m'gv`` -" vnoremap <silent> [% :<C-U>call <SID>MultiMatch("bW", "v") <CR>m'gv`` -" vnoremap <silent> ]% :<C-U>call <SID>MultiMatch("W", "v") <CR>m'gv`` -onoremap <silent> [% v:<C-U>call <SID>MultiMatch("bW", "o") <CR> -onoremap <silent> ]% v:<C-U>call <SID>MultiMatch("W", "o") <CR> +nnoremap <silent> <Plug>(MatchitNormalMultiBackward) :<C-U>call matchit#MultiMatch("bW", "n")<CR> +nnoremap <silent> <Plug>(MatchitNormalMultiForward) :<C-U>call matchit#MultiMatch("W", "n")<CR> +vnoremap <silent> <Plug>(MatchitVisualMultiBackward) :<C-U>call matchit#MultiMatch("bW", "n")<CR>m'gv`` +vnoremap <silent> <Plug>(MatchitVisualMultiForward) :<C-U>call matchit#MultiMatch("W", "n")<CR>m'gv`` +onoremap <silent> <Plug>(MatchitOperationMultiBackward) :<C-U>call matchit#MultiMatch("bW", "o")<CR> +onoremap <silent> <Plug>(MatchitOperationMultiForward) :<C-U>call matchit#MultiMatch("W", "o")<CR> + +nmap <silent> [% <Plug>(MatchitNormalMultiBackward) +nmap <silent> ]% <Plug>(MatchitNormalMultiForward) +xmap <silent> [% <Plug>(MatchitVisualMultiBackward) +xmap <silent> ]% <Plug>(MatchitVisualMultiForward) +omap <silent> [% <Plug>(MatchitOperationMultiBackward) +omap <silent> ]% <Plug>(MatchitOperationMultiForward) " text object: -vmap a% <Esc>[%v]% - -" Auto-complete mappings: (not yet "ready for prime time") -" TODO Read :help write-plugin for the "right" way to let the user -" specify a key binding. -" let g:match_auto = '<C-]>' -" let g:match_autoCR = '<C-CR>' -" if exists("g:match_auto") -" execute "inoremap " . g:match_auto . ' x<Esc>"=<SID>Autocomplete()<CR>Pls' -" endif -" if exists("g:match_autoCR") -" execute "inoremap " . g:match_autoCR . ' <CR><C-R>=<SID>Autocomplete()<CR>' -" endif -" if exists("g:match_gthhoh") -" execute "inoremap " . g:match_gthhoh . ' <C-O>:call <SID>Gthhoh()<CR>' -" endif " gthhoh = "Get the heck out of here!" - -let s:notslash = '\\\@<!\%(\\\\\)*' - -function! s:Match_wrapper(word, forward, mode) range - " In s:CleanUp(), :execute "set" restore_options . - let restore_options = "" - if exists("b:match_ignorecase") && b:match_ignorecase != &ic - let restore_options .= (&ic ? " " : " no") . "ignorecase" - let &ignorecase = b:match_ignorecase - endif - if &ve != '' - let restore_options = " ve=" . &ve . restore_options - set ve= - endif - " If this function was called from Visual mode, make sure that the cursor - " is at the correct end of the Visual range: - if a:mode == "v" - execute "normal! gv\<Esc>" - endif - " In s:CleanUp(), we may need to check whether the cursor moved forward. - let startline = line(".") - let startcol = col(".") - " Use default behavior if called with a count. - if v:count - exe "normal! " . v:count . "%" - return s:CleanUp(restore_options, a:mode, startline, startcol) - end - - " First step: if not already done, set the script variables - " s:do_BR flag for whether there are backrefs - " s:pat parsed version of b:match_words - " s:all regexp based on s:pat and the default groups - " - if !exists("b:match_words") || b:match_words == "" - let match_words = "" - " Allow b:match_words = "GetVimMatchWords()" . - elseif b:match_words =~ ":" - let match_words = b:match_words - else - execute "let match_words =" b:match_words - endif -" Thanks to Preben "Peppe" Guldberg and Bram Moolenaar for this suggestion! - if (match_words != s:last_words) || (&mps != s:last_mps) - \ || exists("b:match_debug") - let s:last_mps = &mps - " The next several lines were here before - " BF started messing with this script. - " quote the special chars in 'matchpairs', replace [,:] with \| and then - " append the builtin pairs (/*, */, #if, #ifdef, #else, #elif, #endif) - " let default = substitute(escape(&mps, '[$^.*~\\/?]'), '[,:]\+', - " \ '\\|', 'g').'\|\/\*\|\*\/\|#if\>\|#ifdef\>\|#else\>\|#elif\>\|#endif\>' - let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . - \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>' - " s:all = pattern with all the keywords - let match_words = match_words . (strlen(match_words) ? "," : "") . default - let s:last_words = match_words - if match_words !~ s:notslash . '\\\d' - let s:do_BR = 0 - let s:pat = match_words - else - let s:do_BR = 1 - let s:pat = s:ParseWords(match_words) - endif - let s:all = substitute(s:pat, s:notslash . '\zs[,:]\+', '\\|', 'g') - let s:all = '\%(' . s:all . '\)' - " let s:all = '\%(' . substitute(s:all, '\\\ze[,:]', '', 'g') . '\)' - if exists("b:match_debug") - let b:match_pat = s:pat - endif - " Reconstruct the version with unresolved backrefs. - let s:patBR = substitute(match_words.',', - \ s:notslash.'\zs[,:]*,[,:]*', ',', 'g') - let s:patBR = substitute(s:patBR, s:notslash.'\zs:\{2,}', ':', 'g') - endif - - " Second step: set the following local variables: - " matchline = line on which the cursor started - " curcol = number of characters before match - " prefix = regexp for start of line to start of match - " suffix = regexp for end of match to end of line - " Require match to end on or after the cursor and prefer it to - " start on or before the cursor. - let matchline = getline(startline) - if a:word != '' - " word given - if a:word !~ s:all - echohl WarningMsg|echo 'Missing rule for word:"'.a:word.'"'|echohl NONE - return s:CleanUp(restore_options, a:mode, startline, startcol) - endif - let matchline = a:word - let curcol = 0 - let prefix = '^\%(' - let suffix = '\)$' - " Now the case when "word" is not given - else " Find the match that ends on or after the cursor and set curcol. - let regexp = s:Wholematch(matchline, s:all, startcol-1) - let curcol = match(matchline, regexp) - " If there is no match, give up. - if curcol == -1 - return s:CleanUp(restore_options, a:mode, startline, startcol) - endif - let endcol = matchend(matchline, regexp) - let suf = strlen(matchline) - endcol - let prefix = (curcol ? '^.*\%' . (curcol + 1) . 'c\%(' : '^\%(') - let suffix = (suf ? '\)\%' . (endcol + 1) . 'c.*$' : '\)$') - endif - if exists("b:match_debug") - let b:match_match = matchstr(matchline, regexp) - let b:match_col = curcol+1 - endif - - " Third step: Find the group and single word that match, and the original - " (backref) versions of these. Then, resolve the backrefs. - " Set the following local variable: - " group = colon-separated list of patterns, one of which matches - " = ini:mid:fin or ini:fin - " - " Now, set group and groupBR to the matching group: 'if:endif' or - " 'while:endwhile' or whatever. A bit of a kluge: s:Choose() returns - " group . "," . groupBR, and we pick it apart. - let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, s:patBR) - let i = matchend(group, s:notslash . ",") - let groupBR = strpart(group, i) - let group = strpart(group, 0, i-1) - " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix - if s:do_BR " Do the hard part: resolve those backrefs! - let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) - endif - if exists("b:match_debug") - let b:match_wholeBR = groupBR - let i = matchend(groupBR, s:notslash . ":") - let b:match_iniBR = strpart(groupBR, 0, i-1) - endif - - " Fourth step: Set the arguments for searchpair(). - let i = matchend(group, s:notslash . ":") - let j = matchend(group, '.*' . s:notslash . ":") - let ini = strpart(group, 0, i-1) - let mid = substitute(strpart(group, i,j-i-1), s:notslash.'\zs:', '\\|', 'g') - let fin = strpart(group, j) - "Un-escape the remaining , and : characters. - let ini = substitute(ini, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') - let mid = substitute(mid, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') - let fin = substitute(fin, s:notslash . '\zs\\\(:\|,\)', '\1', 'g') - " searchpair() requires that these patterns avoid \(\) groups. - let ini = substitute(ini, s:notslash . '\zs\\(', '\\%(', 'g') - let mid = substitute(mid, s:notslash . '\zs\\(', '\\%(', 'g') - let fin = substitute(fin, s:notslash . '\zs\\(', '\\%(', 'g') - " Set mid. This is optimized for readability, not micro-efficiency! - if a:forward && matchline =~ prefix . fin . suffix - \ || !a:forward && matchline =~ prefix . ini . suffix - let mid = "" - endif - " Set flag. This is optimized for readability, not micro-efficiency! - if a:forward && matchline =~ prefix . fin . suffix - \ || !a:forward && matchline !~ prefix . ini . suffix - let flag = "bW" - else - let flag = "W" - endif - " Set skip. - if exists("b:match_skip") - let skip = b:match_skip - elseif exists("b:match_comment") " backwards compatibility and testing! - let skip = "r:" . b:match_comment - else - let skip = 's:comment\|string' - endif - let skip = s:ParseSkip(skip) - if exists("b:match_debug") - let b:match_ini = ini - let b:match_tail = (strlen(mid) ? mid.'\|' : '') . fin - endif - - " Fifth step: actually start moving the cursor and call searchpair(). - " Later, :execute restore_cursor to get to the original screen. - let restore_cursor = virtcol(".") . "|" - normal! g0 - let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor - normal! H - let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor - execute restore_cursor - call cursor(0, curcol + 1) - " normal! 0 - " if curcol - " execute "normal!" . curcol . "l" - " endif - if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) - let skip = '0' - else - execute "if " . skip . "| let skip = '0' | endif" - endif - let sp_return = searchpair(ini, mid, fin, flag, skip) - let final_position = "call cursor(" . line(".") . "," . col(".") . ")" - " Restore cursor position and original screen. - execute restore_cursor - normal! m' - if sp_return > 0 - execute final_position - endif - return s:CleanUp(restore_options, a:mode, startline, startcol, mid.'\|'.fin) -endfun - -" Restore options and do some special handling for Operator-pending mode. -" The optional argument is the tail of the matching group. -fun! s:CleanUp(options, mode, startline, startcol, ...) - if strlen(a:options) - execute "set" a:options - endif - " Open folds, if appropriate. - if a:mode != "o" - if &foldopen =~ "percent" - normal! zv - endif - " In Operator-pending mode, we want to include the whole match - " (for example, d%). - " This is only a problem if we end up moving in the forward direction. - elseif (a:startline < line(".")) || - \ (a:startline == line(".") && a:startcol < col(".")) - if a:0 - " Check whether the match is a single character. If not, move to the - " end of the match. - let matchline = getline(".") - let currcol = col(".") - let regexp = s:Wholematch(matchline, a:1, currcol-1) - let endcol = matchend(matchline, regexp) - if endcol > currcol " This is NOT off by one! - call cursor(0, endcol) - endif - endif " a:0 - endif " a:mode != "o" && etc. - return 0 -endfun - -" Example (simplified HTML patterns): if -" a:groupBR = '<\(\k\+\)>:</\1>' -" a:prefix = '^.\{3}\(' -" a:group = '<\(\k\+\)>:</\(\k\+\)>' -" a:suffix = '\).\{2}$' -" a:matchline = "123<tag>12" or "123</tag>12" -" then extract "tag" from a:matchline and return "<tag>:</tag>" . -fun! s:InsertRefs(groupBR, prefix, group, suffix, matchline) - if a:matchline !~ a:prefix . - \ substitute(a:group, s:notslash . '\zs:', '\\|', 'g') . a:suffix - return a:group - endif - let i = matchend(a:groupBR, s:notslash . ':') - let ini = strpart(a:groupBR, 0, i-1) - let tailBR = strpart(a:groupBR, i) - let word = s:Choose(a:group, a:matchline, ":", "", a:prefix, a:suffix, - \ a:groupBR) - let i = matchend(word, s:notslash . ":") - let wordBR = strpart(word, i) - let word = strpart(word, 0, i-1) - " Now, a:matchline =~ a:prefix . word . a:suffix - if wordBR != ini - let table = s:Resolve(ini, wordBR, "table") - else - " let table = "----------" - let table = "" - let d = 0 - while d < 10 - if tailBR =~ s:notslash . '\\' . d - " let table[d] = d - let table = table . d - else - let table = table . "-" - endif - let d = d + 1 - endwhile - endif - let d = 9 - while d - if table[d] != "-" - let backref = substitute(a:matchline, a:prefix.word.a:suffix, - \ '\'.table[d], "") - " Are there any other characters that should be escaped? - let backref = escape(backref, '*,:') - execute s:Ref(ini, d, "start", "len") - let ini = strpart(ini, 0, start) . backref . strpart(ini, start+len) - let tailBR = substitute(tailBR, s:notslash . '\zs\\' . d, - \ escape(backref, '\\&'), 'g') - endif - let d = d-1 - endwhile - if exists("b:match_debug") - if s:do_BR - let b:match_table = table - let b:match_word = word - else - let b:match_table = "" - let b:match_word = "" - endif - endif - return ini . ":" . tailBR -endfun - -" Input a comma-separated list of groups with backrefs, such as -" a:groups = '\(foo\):end\1,\(bar\):end\1' -" and return a comma-separated list of groups with backrefs replaced: -" return '\(foo\):end\(foo\),\(bar\):end\(bar\)' -fun! s:ParseWords(groups) - let groups = substitute(a:groups.",", s:notslash.'\zs[,:]*,[,:]*', ',', 'g') - let groups = substitute(groups, s:notslash . '\zs:\{2,}', ':', 'g') - let parsed = "" - while groups =~ '[^,:]' - let i = matchend(groups, s:notslash . ':') - let j = matchend(groups, s:notslash . ',') - let ini = strpart(groups, 0, i-1) - let tail = strpart(groups, i, j-i-1) . ":" - let groups = strpart(groups, j) - let parsed = parsed . ini - let i = matchend(tail, s:notslash . ':') - while i != -1 - " In 'if:else:endif', ini='if' and word='else' and then word='endif'. - let word = strpart(tail, 0, i-1) - let tail = strpart(tail, i) - let i = matchend(tail, s:notslash . ':') - let parsed = parsed . ":" . s:Resolve(ini, word, "word") - endwhile " Now, tail has been used up. - let parsed = parsed . "," - endwhile " groups =~ '[^,:]' - let parsed = substitute(parsed, ',$', '', '') - return parsed -endfun - -" TODO I think this can be simplified and/or made more efficient. -" TODO What should I do if a:start is out of range? -" Return a regexp that matches all of a:string, such that -" matchstr(a:string, regexp) represents the match for a:pat that starts -" as close to a:start as possible, before being preferred to after, and -" ends after a:start . -" Usage: -" let regexp = s:Wholematch(getline("."), 'foo\|bar', col(".")-1) -" let i = match(getline("."), regexp) -" let j = matchend(getline("."), regexp) -" let match = matchstr(getline("."), regexp) -fun! s:Wholematch(string, pat, start) - let group = '\%(' . a:pat . '\)' - let prefix = (a:start ? '\(^.*\%<' . (a:start + 2) . 'c\)\zs' : '^') - let len = strlen(a:string) - let suffix = (a:start+1 < len ? '\(\%>'.(a:start+1).'c.*$\)\@=' : '$') - if a:string !~ prefix . group . suffix - let prefix = '' - endif - return prefix . group . suffix -endfun - -" No extra arguments: s:Ref(string, d) will -" find the d'th occurrence of '\(' and return it, along with everything up -" to and including the matching '\)'. -" One argument: s:Ref(string, d, "start") returns the index of the start -" of the d'th '\(' and any other argument returns the length of the group. -" Two arguments: s:Ref(string, d, "foo", "bar") returns a string to be -" executed, having the effect of -" :let foo = s:Ref(string, d, "start") -" :let bar = s:Ref(string, d, "len") -fun! s:Ref(string, d, ...) - let len = strlen(a:string) - if a:d == 0 - let start = 0 - else - let cnt = a:d - let match = a:string - while cnt - let cnt = cnt - 1 - let index = matchend(match, s:notslash . '\\(') - if index == -1 - return "" - endif - let match = strpart(match, index) - endwhile - let start = len - strlen(match) - if a:0 == 1 && a:1 == "start" - return start - 2 - endif - let cnt = 1 - while cnt - let index = matchend(match, s:notslash . '\\(\|\\)') - 1 - if index == -2 - return "" - endif - " Increment if an open, decrement if a ')': - let cnt = cnt + (match[index]=="(" ? 1 : -1) " ')' - " let cnt = stridx('0(', match[index]) + cnt - let match = strpart(match, index+1) - endwhile - let start = start - 2 - let len = len - start - strlen(match) - endif - if a:0 == 1 - return len - elseif a:0 == 2 - return "let " . a:1 . "=" . start . "| let " . a:2 . "=" . len - else - return strpart(a:string, start, len) - endif -endfun - -" Count the number of disjoint copies of pattern in string. -" If the pattern is a literal string and contains no '0' or '1' characters -" then s:Count(string, pattern, '0', '1') should be faster than -" s:Count(string, pattern). -fun! s:Count(string, pattern, ...) - let pat = escape(a:pattern, '\\') - if a:0 > 1 - let foo = substitute(a:string, '[^'.a:pattern.']', "a:1", "g") - let foo = substitute(a:string, pat, a:2, "g") - let foo = substitute(foo, '[^' . a:2 . ']', "", "g") - return strlen(foo) - endif - let result = 0 - let foo = a:string - let index = matchend(foo, pat) - while index != -1 - let result = result + 1 - let foo = strpart(foo, index) - let index = matchend(foo, pat) - endwhile - return result -endfun - -" s:Resolve('\(a\)\(b\)', '\(c\)\2\1\1\2') should return table.word, where -" word = '\(c\)\(b\)\(a\)\3\2' and table = '-32-------'. That is, the first -" '\1' in target is replaced by '\(a\)' in word, table[1] = 3, and this -" indicates that all other instances of '\1' in target are to be replaced -" by '\3'. The hard part is dealing with nesting... -" Note that ":" is an illegal character for source and target, -" unless it is preceded by "\". -fun! s:Resolve(source, target, output) - let word = a:target - let i = matchend(word, s:notslash . '\\\d') - 1 - let table = "----------" - while i != -2 " There are back references to be replaced. - let d = word[i] - let backref = s:Ref(a:source, d) - " The idea is to replace '\d' with backref. Before we do this, - " replace any \(\) groups in backref with :1, :2, ... if they - " correspond to the first, second, ... group already inserted - " into backref. Later, replace :1 with \1 and so on. The group - " number w+b within backref corresponds to the group number - " s within a:source. - " w = number of '\(' in word before the current one - let w = s:Count( - \ substitute(strpart(word, 0, i-1), '\\\\', '', 'g'), '\(', '1') - let b = 1 " number of the current '\(' in backref - let s = d " number of the current '\(' in a:source - while b <= s:Count(substitute(backref, '\\\\', '', 'g'), '\(', '1') - \ && s < 10 - if table[s] == "-" - if w + b < 10 - " let table[s] = w + b - let table = strpart(table, 0, s) . (w+b) . strpart(table, s+1) - endif - let b = b + 1 - let s = s + 1 - else - execute s:Ref(backref, b, "start", "len") - let ref = strpart(backref, start, len) - let backref = strpart(backref, 0, start) . ":". table[s] - \ . strpart(backref, start+len) - let s = s + s:Count(substitute(ref, '\\\\', '', 'g'), '\(', '1') - endif - endwhile - let word = strpart(word, 0, i-1) . backref . strpart(word, i+1) - let i = matchend(word, s:notslash . '\\\d') - 1 - endwhile - let word = substitute(word, s:notslash . '\zs:', '\\', 'g') - if a:output == "table" - return table - elseif a:output == "word" - return word - else - return table . word - endif -endfun - -" Assume a:comma = ",". Then the format for a:patterns and a:1 is -" a:patterns = "<pat1>,<pat2>,..." -" a:1 = "<alt1>,<alt2>,..." -" If <patn> is the first pattern that matches a:string then return <patn> -" if no optional arguments are given; return <patn>,<altn> if a:1 is given. -fun! s:Choose(patterns, string, comma, branch, prefix, suffix, ...) - let tail = (a:patterns =~ a:comma."$" ? a:patterns : a:patterns . a:comma) - let i = matchend(tail, s:notslash . a:comma) - if a:0 - let alttail = (a:1 =~ a:comma."$" ? a:1 : a:1 . a:comma) - let j = matchend(alttail, s:notslash . a:comma) - endif - let current = strpart(tail, 0, i-1) - if a:branch == "" - let currpat = current - else - let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') - endif - while a:string !~ a:prefix . currpat . a:suffix - let tail = strpart(tail, i) - let i = matchend(tail, s:notslash . a:comma) - if i == -1 - return -1 - endif - let current = strpart(tail, 0, i-1) - if a:branch == "" - let currpat = current - else - let currpat = substitute(current, s:notslash . a:branch, '\\|', 'g') - endif - if a:0 - let alttail = strpart(alttail, j) - let j = matchend(alttail, s:notslash . a:comma) - endif - endwhile - if a:0 - let current = current . a:comma . strpart(alttail, 0, j-1) - endif - return current -endfun +vmap <silent> <Plug>(MatchitVisualTextObject) <Plug>(MatchitVisualMultiBackward)o<Plug>(MatchitVisualMultiForward) +xmap a% <Plug>(MatchitVisualTextObject) " Call this function to turn on debugging information. Every time the main " script is run, buffer variables will be saved. These can be used directly " or viewed using the menu items below. if !exists(":MatchDebug") - command! -nargs=0 MatchDebug call s:Match_debug() + command! -nargs=0 MatchDebug call matchit#Match_debug() endif -fun! s:Match_debug() - let b:match_debug = 1 " Save debugging information. - " pat = all of b:match_words with backrefs parsed - amenu &Matchit.&pat :echo b:match_pat<CR> - " match = bit of text that is recognized as a match - amenu &Matchit.&match :echo b:match_match<CR> - " curcol = cursor column of the start of the matching text - amenu &Matchit.&curcol :echo b:match_col<CR> - " wholeBR = matching group, original version - amenu &Matchit.wh&oleBR :echo b:match_wholeBR<CR> - " iniBR = 'if' piece, original version - amenu &Matchit.ini&BR :echo b:match_iniBR<CR> - " ini = 'if' piece, with all backrefs resolved from match - amenu &Matchit.&ini :echo b:match_ini<CR> - " tail = 'else\|endif' piece, with all backrefs resolved from match - amenu &Matchit.&tail :echo b:match_tail<CR> - " fin = 'endif' piece, with all backrefs resolved from match - amenu &Matchit.&word :echo b:match_word<CR> - " '\'.d in ini refers to the same thing as '\'.table[d] in word. - amenu &Matchit.t&able :echo '0:' . b:match_table . ':9'<CR> -endfun - -" Jump to the nearest unmatched "(" or "if" or "<tag>" if a:spflag == "bW" -" or the nearest unmatched "</tag>" or "endif" or ")" if a:spflag == "W". -" Return a "mark" for the original position, so that -" let m = MultiMatch("bW", "n") ... execute m -" will return to the original position. If there is a problem, do not -" move the cursor and return "", unless a count is given, in which case -" go up or down as many levels as possible and again return "". -" TODO This relies on the same patterns as % matching. It might be a good -" idea to give it its own matching patterns. -fun! s:MultiMatch(spflag, mode) - if !exists("b:match_words") || b:match_words == "" - return "" - end - let restore_options = "" - if exists("b:match_ignorecase") && b:match_ignorecase != &ic - let restore_options .= (&ic ? " " : " no") . "ignorecase" - let &ignorecase = b:match_ignorecase - endif - let startline = line(".") - let startcol = col(".") - - " First step: if not already done, set the script variables - " s:do_BR flag for whether there are backrefs - " s:pat parsed version of b:match_words - " s:all regexp based on s:pat and the default groups - " This part is copied and slightly modified from s:Match_wrapper(). - let default = escape(&mps, '[$^.*~\\/?]') . (strlen(&mps) ? "," : "") . - \ '\/\*:\*\/,#\s*if\%(def\)\=:#\s*else\>:#\s*elif\>:#\s*endif\>' - " Allow b:match_words = "GetVimMatchWords()" . - if b:match_words =~ ":" - let match_words = b:match_words - else - execute "let match_words =" b:match_words - endif - if (match_words != s:last_words) || (&mps != s:last_mps) || - \ exists("b:match_debug") - let s:last_words = match_words - let s:last_mps = &mps - let match_words = match_words . (strlen(match_words) ? "," : "") . default - if match_words !~ s:notslash . '\\\d' - let s:do_BR = 0 - let s:pat = match_words - else - let s:do_BR = 1 - let s:pat = s:ParseWords(match_words) - endif - let s:all = '\%(' . substitute(s:pat . (strlen(s:pat) ? "," : "") . default, - \ '[,:]\+', '\\|', 'g') . '\)' - if exists("b:match_debug") - let b:match_pat = s:pat - endif - endif - - " Second step: figure out the patterns for searchpair() - " and save the screen, cursor position, and 'ignorecase'. - " - TODO: A lot of this is copied from s:Match_wrapper(). - " - maybe even more functionality should be split off - " - into separate functions! - let cdefault = (s:pat =~ '[^,]$' ? "," : "") . default - let open = substitute(s:pat . cdefault, - \ s:notslash . '\zs:.\{-}' . s:notslash . ',', '\\),\\(', 'g') - let open = '\(' . substitute(open, s:notslash . '\zs:.*$', '\\)', '') - let close = substitute(s:pat . cdefault, - \ s:notslash . '\zs,.\{-}' . s:notslash . ':', '\\),\\(', 'g') - let close = substitute(close, '^.\{-}' . s:notslash . ':', '\\(', '') . '\)' - if exists("b:match_skip") - let skip = b:match_skip - elseif exists("b:match_comment") " backwards compatibility and testing! - let skip = "r:" . b:match_comment - else - let skip = 's:comment\|string' - endif - let skip = s:ParseSkip(skip) - " save v:count1 variable, might be reset from the restore_cursor command - let level = v:count1 - let restore_cursor = virtcol(".") . "|" - normal! g0 - let restore_cursor = line(".") . "G" . virtcol(".") . "|zs" . restore_cursor - normal! H - let restore_cursor = "normal!" . line(".") . "Gzt" . restore_cursor - execute restore_cursor - - " Third step: call searchpair(). - " Replace '\('--but not '\\('--with '\%(' and ',' with '\|'. - let openpat = substitute(open, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') - let openpat = substitute(openpat, ',', '\\|', 'g') - let closepat = substitute(close, '\(\\\@<!\(\\\\\)*\)\@<=\\(', '\\%(', 'g') - let closepat = substitute(closepat, ',', '\\|', 'g') - - if skip =~ 'synID' && !(has("syntax") && exists("g:syntax_on")) - let skip = '0' - else - try - execute "if " . skip . "| let skip = '0' | endif" - catch /^Vim\%((\a\+)\)\=:E363/ - " We won't find anything, so skip searching, should keep Vim responsive. - return - endtry - endif - mark ' - while level - if searchpair(openpat, '', closepat, a:spflag, skip) < 1 - call s:CleanUp(restore_options, a:mode, startline, startcol) - return "" - endif - let level = level - 1 - endwhile - - " Restore options and return a string to restore the original position. - call s:CleanUp(restore_options, a:mode, startline, startcol) - return restore_cursor -endfun - -" Search backwards for "if" or "while" or "<tag>" or ... -" and return "endif" or "endwhile" or "</tag>" or ... . -" For now, this uses b:match_words and the same script variables -" as s:Match_wrapper() . Later, it may get its own patterns, -" either from a buffer variable or passed as arguments. -" fun! s:Autocomplete() -" echo "autocomplete not yet implemented :-(" -" if !exists("b:match_words") || b:match_words == "" -" return "" -" end -" let startpos = s:MultiMatch("bW") -" -" if startpos == "" -" return "" -" endif -" " - TODO: figure out whether 'if' or '<tag>' matched, and construct -" " - the appropriate closing. -" let matchline = getline(".") -" let curcol = col(".") - 1 -" " - TODO: Change the s:all argument if there is a new set of match pats. -" let regexp = s:Wholematch(matchline, s:all, curcol) -" let suf = strlen(matchline) - matchend(matchline, regexp) -" let prefix = (curcol ? '^.\{' . curcol . '}\%(' : '^\%(') -" let suffix = (suf ? '\).\{' . suf . '}$' : '\)$') -" " Reconstruct the version with unresolved backrefs. -" let patBR = substitute(b:match_words.',', '[,:]*,[,:]*', ',', 'g') -" let patBR = substitute(patBR, ':\{2,}', ':', "g") -" " Now, set group and groupBR to the matching group: 'if:endif' or -" " 'while:endwhile' or whatever. -" let group = s:Choose(s:pat, matchline, ",", ":", prefix, suffix, patBR) -" let i = matchend(group, s:notslash . ",") -" let groupBR = strpart(group, i) -" let group = strpart(group, 0, i-1) -" " Now, matchline =~ prefix . substitute(group,':','\|','g') . suffix -" if s:do_BR -" let group = s:InsertRefs(groupBR, prefix, group, suffix, matchline) -" endif -" " let g:group = group -" -" " - TODO: Construct the closing from group. -" let fake = "end" . expand("<cword>") -" execute startpos -" return fake -" endfun - -" Close all open structures. "Get the heck out of here!" -" fun! s:Gthhoh() -" let close = s:Autocomplete() -" while strlen(close) -" put=close -" let close = s:Autocomplete() -" endwhile -" endfun - -" Parse special strings as typical skip arguments for searchpair(): -" s:foo becomes (current syntax item) =~ foo -" S:foo becomes (current syntax item) !~ foo -" r:foo becomes (line before cursor) =~ foo -" R:foo becomes (line before cursor) !~ foo -fun! s:ParseSkip(str) - let skip = a:str - if skip[1] == ":" - if skip[0] == "s" - let skip = "synIDattr(synID(line('.'),col('.'),1),'name') =~? '" . - \ strpart(skip,2) . "'" - elseif skip[0] == "S" - let skip = "synIDattr(synID(line('.'),col('.'),1),'name') !~? '" . - \ strpart(skip,2) . "'" - elseif skip[0] == "r" - let skip = "strpart(getline('.'),0,col('.'))=~'" . strpart(skip,2). "'" - elseif skip[0] == "R" - let skip = "strpart(getline('.'),0,col('.'))!~'" . strpart(skip,2). "'" - endif - endif - return skip -endfun - let &cpo = s:save_cpo unlet s:save_cpo -" vim:sts=2:sw=2: +" vim:sts=2:sw=2:et: diff --git a/runtime/syntax/debchangelog.vim b/runtime/syntax/debchangelog.vim index ce0339522..4ca4c299b 100644 --- a/runtime/syntax/debchangelog.vim +++ b/runtime/syntax/debchangelog.vim @@ -3,7 +3,7 @@ " Maintainer: Debian Vim Maintainers " Former Maintainers: Gerfried Fuchs <alfie@ist.org> " Wichert Akkerman <wakkerma@debian.org> -" Last Change: 2018 Oct 30 +" Last Change: 2019 Jan 26 " URL: https://salsa.debian.org/vim-team/vim-debian/blob/master/syntax/debchangelog.vim " Standard syntax initialization @@ -14,7 +14,7 @@ endif " Case doesn't matter for us syn case ignore -let s:urgency='urgency=\(low\|medium\|high\|critical\)\( [^[:space:],][^,]*\)\=' +let s:urgency='urgency=\(low\|medium\|high\|emergency\|critical\)\( [^[:space:],][^,]*\)\=' let s:binNMU='binary-only=yes' " Define some common expressions we can use later on diff --git a/runtime/vimrc_example.vim b/runtime/vimrc_example.vim index a68ebe53d..b05793bd1 100644 --- a/runtime/vimrc_example.vim +++ b/runtime/vimrc_example.vim @@ -1,7 +1,7 @@ " An example for a vimrc file. " " Maintainer: Bram Moolenaar <Bram@vim.org> -" Last change: 2017 Sep 20 +" Last change: 2019 Jan 26 " " To use it, copy it to " for Unix and OS/2: ~/.vimrc @@ -9,7 +9,8 @@ " for MS-DOS and Win32: $VIM\_vimrc " for OpenVMS: sys$login:.vimrc -" When started as "evim", evim.vim will already have done these settings. +" When started as "evim", evim.vim will already have done these settings, bail +" out. if v:progname =~? "evim" finish endif @@ -31,23 +32,13 @@ if &t_Co > 2 || has("gui_running") set hlsearch endif -" Only do this part when compiled with support for autocommands. -if has("autocmd") - - " Put these in an autocmd group, so that we can delete them easily. - augroup vimrcEx +" Put these in an autocmd group, so that we can delete them easily. +augroup vimrcEx au! " For all text files set 'textwidth' to 78 characters. autocmd FileType text setlocal textwidth=78 - - augroup END - -else - - set autoindent " always set autoindenting on - -endif " has("autocmd") +augroup END " Add optional packages. " |