Merge remote-tracking branch 'upstream/master'

This commit is contained in:
ckelsel
2017-09-24 09:16:59 +08:00
17 changed files with 350 additions and 275 deletions

View File

@@ -254,9 +254,12 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.5")
# Array-bounds testing is broken in some GCC versions before 4.8.5.
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
check_c_compiler_flag(-Wno-array-bounds HAS_NO_ARRAY_BOUNDS_FLAG)
if(HAS_NO_ARRAY_BOUNDS_FLAG)
add_definitions(-Wno-array-bounds)
endif()
endif()
endif()
option(TRAVIS_CI_BUILD "Travis/QuickBuild CI. Extra flags will be set." OFF)
@@ -344,6 +347,21 @@ if(FEAT_TUI)
find_package(Unibilium REQUIRED)
include_directories(SYSTEM ${UNIBILIUM_INCLUDE_DIRS})
list(APPEND CMAKE_REQUIRED_INCLUDES "${UNIBILIUM_INCLUDE_DIRS}")
list(APPEND CMAKE_REQUIRED_LIBRARIES "${UNIBILIUM_LIBRARIES}")
check_c_source_compiles("
#include <unibilium.h>
int
main(void)
{
return unibi_num_from_var(unibi_var_from_num(0));
}
" UNIBI_HAS_VAR_FROM)
if(UNIBI_HAS_VAR_FROM)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_UNIBI_HAS_VAR_FROM")
endif()
find_package(LibTermkey REQUIRED)
include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
endif()

View File

@@ -71,6 +71,7 @@ foreach(DF ${DOCFILES})
endforeach()
add_custom_target(helptags
COMMAND ${CMAKE_COMMAND} -E remove_directory ${GENERATED_RUNTIME_DIR}/doc
COMMAND ${CMAKE_COMMAND} -E copy_directory
${PROJECT_SOURCE_DIR}/runtime/doc ${GENERATED_RUNTIME_DIR}/doc
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"

View File

@@ -89,7 +89,8 @@ endfunction
function! remote#define#AutocmdOnHost(host, method, sync, name, opts)
let group = s:GetNextAutocmdGroup()
let forward = '"doau '.group.' '.a:name.' ".'.'expand("<amatch>")'
let forward = '"doau '.group.' '.a:name.' ".'
\ . 'fnameescape(expand("<amatch>"))'
let a:opts.group = group
let bootstrap_def = s:GetAutocmdPrefix(a:name, a:opts)
\ .' call remote#define#AutocmdBootstrap("'.a:host.'"'

View File

@@ -1271,7 +1271,7 @@ Commands for changing the working directory can be suffixed with a bang "!"
*:lcd-*
:lcd[!] - Change to the previous current directory (before the
previous ":tcd {path}" command).
previous ":lcd {path}" command).
*:pw* *:pwd* *E187*
:pw[d] Print the current directory name.

View File

@@ -3270,11 +3270,10 @@ improve screen updating rates (see |:syn-sync| for more on this). >
The g:vimsyn_embed option allows users to select what, if any, types of
embedded script highlighting they wish to have. >
g:vimsyn_embed == 0 : don't embed any scripts
g:vimsyn_embed =~ 'P' : support embedded python
g:vimsyn_embed == 0 : disable (don't embed any scripts)
g:vimsyn_embed == 'lPr' : support embedded lua, python and ruby
<
By default, g:vimsyn_embed is a string supporting interpreters that your vim
itself supports.
This option is disabled by default.
*g:vimsyn_folding*
Some folding is now supported with syntax/vim.vim: >

View File

@@ -3,8 +3,8 @@
" #############################################################################
" #############################################################################
" Note: Be careful when merging the upstream version of this file.
" Much of this is generated by scripts/genvimvim.lua (result is installed
" to: $VIMRUNTIME/syntax/vim/generated.vim)
" Much of this is generated by scripts/genvimvim.lua
" (installs to $VIMRUNTIME/syntax/vim/generated.vim)
" #############################################################################
" #############################################################################
@@ -128,6 +128,13 @@ if exists("g:vimsyntax_noerror")
let g:vimsyn_noerror= g:vimsyntax_noerror
endif
" Variable options {{{2
if exists("g:vim_maxlines")
let s:vimsyn_maxlines= g:vim_maxlines
else
let s:vimsyn_maxlines= 60
endif
" Numbers {{{2
" =======
syn match vimNumber "\<\d\+\%(\.\d\+\%([eE][+-]\=\d\+\)\=\)\=" skipwhite nextgroup=vimGlobal,vimSubst,vimCommand
@@ -601,7 +608,7 @@ syn region vimGlobal matchgroup=Statement start='\<v\%[global]!\=/' skip='\\.' e
" g:vimsyn_embed =~# 'r' : embed ruby
" g:vimsyn_embed =~# 't' : embed tcl
if !exists("g:vimsyn_embed")
let g:vimsyn_embed= "lpPr"
let g:vimsyn_embed= 0
endif
" [-- lua --] {{{3
@@ -744,9 +751,10 @@ if !filereadable(s:mzschemepath)
endif
if g:vimsyn_embed =~# 'm' && filereadable(s:mzschemepath)
unlet! b:current_syntax
let iskKeep= &isk
let s:iskKeep= &isk
exe "syn include @vimMzSchemeScript ".s:mzschemepath
let &isk= iskKeep
let &isk= s:iskKeep
unlet s:iskKeep
VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*\z(.*\)$+ end=+^\z1$+ contains=@vimMzSchemeScript
VimFoldm syn region vimMzSchemeRegion matchgroup=vimScriptDelim start=+mz\%[scheme]\s*<<\s*$+ end=+\.$+ contains=@vimMzSchemeScript
syn cluster vimFuncBodyList add=vimMzSchemeRegion
@@ -761,11 +769,7 @@ unlet s:mzschemepath
if exists("g:vimsyn_minlines")
exe "syn sync minlines=".g:vimsyn_minlines
endif
if exists("g:vimsyn_maxlines")
exe "syn sync maxlines=".g:vimsyn_maxlines
else
syn sync maxlines=60
endif
exe "syn sync maxlines=".s:vimsyn_maxlines
syn sync linecont "^\s\+\\"
syn sync match vimAugroupSyncA groupthere NONE "\<aug\%[roup]\>\s\+[eE][nN][dD]"
@@ -778,7 +782,7 @@ if !exists("skip_vim_syntax_inits")
hi def link vimBehaveError vimError
hi def link vimCollClassErr vimError
hi def link vimErrSetting vimError
hi def link vimEmbedError vimError
hi def link vimEmbedError Normal
hi def link vimFTError vimError
hi def link vimFunctionError vimError
hi def link vimFunc vimError

View File

@@ -23,7 +23,7 @@ relevant help (hopefully), and pressing K over any word will try to do so too.
Sometimes you will be required to modify text like
this here
Once you have done the changes correctly, the ✗ sign at the left will change
to ✓. I imagine you can already see how neat Vim can be ;)
to ✓. I imagine you can already see how neat Vim can be. ;)
Other times, you'll be prompted to run a command (I'll explain this later):
~~~ cmd
:help <Enter>
@@ -36,21 +36,21 @@ or press a sequence of keys
Text within <'s and >'s (like `<Enter>`{normal}) describes a key to press instead of text
to type.
Now, move to the next lesson (remember, use j).
Now, move to the next lesson (remember, use the `j`{normal} key to scroll down).
## Lesson 1.1: MOVING THE CURSOR
** To move the cursor, press the `h`, `j`, `k`, `l` keys as indicated. **
k Hint: The h key is at the left and moves left.
← h l → The l key is at the right and moves right.
j The j key looks like a down arrow.
k Hint: The `h`{normal} key is at the left and moves left.
← h l → The `l`{normal} key is at the right and moves right.
j The `j`{normal} key looks like a down arrow.
1. Move the cursor around the screen until you are comfortable.
2. Hold down the down key (j) until it repeats.
2. Hold down the down key (`j`{normal}) until it repeats.
Now you know how to move to the next lesson.
3. Using the down key, move to Lesson 1.2.
@@ -114,15 +114,15 @@ NOTE: As you go through this tutor, do not try to memorize, learn by usage.
2. To make the first line the same as the second, move the cursor on top
of the first character AFTER where the text is to be inserted.
3. Press i and type in the necessary additions.
3. Press `i`{normal} and type in the necessary additions.
4. As each error is fixed press <Esc> to return to Normal mode.
4. As each error is fixed press `<Esc>`{normal} to return to Normal mode.
Repeat steps 2 through 4 to correct the sentence.
There is text misng this .
There is some text missing from this line.
5. When you are comfortable inserting text move to lesson 1.5.
5. When you are comfortable inserting text move to Lesson 1.5.
# Lesson 1.5: TEXT EDITING: APPENDING
@@ -133,7 +133,7 @@ There is some text missing from this line.
2. Press [A](A) and type in the necessary additions.
3. As the text has been appended press <Esc> to return to Normal mode.
3. As the text has been appended press `<Esc>`{normal} to return to Normal mode.
4. Move the cursor to the second line marked ---> and repeat
steps 2 and 3 to correct this sentence.
@@ -143,7 +143,7 @@ There is some text missing from this line.
There is also some text miss
There is also some text missing here.
5. When you are comfortable appending text move to lesson 1.6.
5. When you are comfortable appending text move to Lesson 1.6.
# Lesson 1.6: EDITING A FILE
@@ -151,7 +151,7 @@ There is also some text missing here.
!! NOTE: Before executing any of the steps below, read this entire lesson !!
1. Exit this tutor as you did in lesson 1.2: :q!
1. Exit this tutor as you did in Lesson 1.2: `:q!`{vim}
Or, if you have access to another terminal, do the following there.
2. At the shell prompt type this command:
@@ -186,14 +186,14 @@ There is also some text missing here.
$ vim FILENAME
~~~
3. To exit Vim type: <Esc> :q! <Enter> to trash all changes.
OR type: <Esc> :wq <Enter> to save the changes.
3. To exit Vim type: `<Esc>`{normal} `:q!`{vim} `<Enter>`{normal} to trash all changes.
OR type: `<Esc>`{normal} `:wq`{vim} `<Enter>`{normal} to save the changes.
4. To delete the character at the cursor type: `x`{normal}
5. To insert or append text type:
`i`{normal} type inserted text `<Esc>`{normal} insert before the cursor
`A`{normal} type appended text `<Esc>`{normal} append after the line
`i`{normal} insert text `<Esc>`{normal} insert before the cursor.
`A`{normal} append text `<Esc>`{normal} append after the line.
NOTE: Pressing `<Esc>`{normal} will place you in Normal mode or will cancel
an unwanted and partially completed command.
@@ -220,7 +220,7 @@ There are a some words fun that don't belong paper in this sentence.
** Type `d$`{normal} to delete to the end of the line. **
1. Press <Esc> to make sure you are in Normal mode.
1. Press `<Esc>`{normal} to make sure you are in Normal mode.
2. Move the cursor to the line below marked --->.
@@ -287,11 +287,11 @@ insert a count before the motion to delete more:
3. Repeat steps 1 and 2 with a different count to delete the consecutive
UPPER CASE words with one command
this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
This ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
# Lesson 2.6: OPERATING ON LINES
** Type dd to delete a whole line. **
** Type `dd`{normal} to delete a whole line. **
Due to the frequency of whole line deletion, the designers of Vi decided
it would be easier to simply type two d's to delete a line.
@@ -311,7 +311,7 @@ this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
# Lesson 2.7: THE UNDO COMMAND
** Press u to undo the last commands, U to fix a whole line. **
** Press `u`{normal} to undo the last commands, `U`{normal} to fix a whole line. **
1. Move the cursor to the line below marked ---> and place it on the
first error.
@@ -319,7 +319,7 @@ this ABC DE line FGHI JK LMN OP of words is Q RS TUV cleaned up.
3. Now type `u`{normal} to undo the last command executed.
4. This time fix all the errors on the line using the `x`{normal} command.
5. Now type a capital `U`{normal} to return the line to its original state.
6. Now type `u`{normal} a few times to undo the U and preceding commands.
6. Now type `u`{normal} a few times to undo the `U`{normal} and preceding commands.
7. Now type `<Ctrl-r>`{normal} a few times to redo the commands (undo the undo's).
Fiix the errors oon thhis line and reeplace them witth undo.
@@ -350,7 +350,7 @@ Fiix the errors oon thhis line and reeplace them witth undo.
# Lesson 3.1: THE PUT COMMAND
** Type p to put previously deleted text after the cursor. **
** Type `p`{normal} to put previously deleted text after the cursor. **
1. Move the cursor to the first ---> line below.
@@ -388,7 +388,7 @@ NOTE: Remember that you should be learning by doing, not memorization.
# Lesson 3.3: THE CHANGE OPERATOR
** To change until the end of a word, type `ce`{normal} **
** To change until the end of a word, type `ce`{normal}. **
1. Move the cursor to the first line below marked --->.
@@ -405,7 +405,7 @@ This line has a few words that need changing using the change operator.
Notice that [c](c)e deletes the word and places you in Insert mode.
# Lesson 3.4: MORE CHANGES USING c
# Lesson 3.4: MORE CHANGES USING `c`{normal}
** The change operator is used with the same motions as delete. **
@@ -422,7 +422,7 @@ Notice that [c](c)e deletes the word and places you in Insert mode.
5. Type `c$`{normal} and type the rest of the line like the second and press `<Esc>`{normal}.
The end of this line needs some help to make it like the second.
The end of this line needs to be corrected using the c$ command.
The end of this line needs to be corrected using the `c$`{normal} command.
NOTE: You can use the Backspace key to correct mistakes while typing.
@@ -436,7 +436,7 @@ NOTE: You can use the Backspace key to correct mistakes while typing.
character you want to have there.
3. The [change operator](c) allows you to change from the cursor to where the
motion takes you. eg. Type `ce`{normal} to change from the cursor to the end of
motion takes you. Type `ce`{normal} to change from the cursor to the end of
the word, `c$`{normal} to change to the end of a line.
4. The format for change is:
@@ -457,7 +457,7 @@ NOTE: Read this entire lesson before executing any of the steps!!
position in the file. Remember the line number for Step 3.
NOTE: You may see the cursor position in the lower right corner of the screen
This happens when the ['ruler']('ruler') option is set (see :help 'ruler' )
This happens when the ['ruler']('ruler') option is set (see `:help 'ruler'`{vim} ).
2. Press [G](G) to move you to the bottom of the file.
Type [gg](gg) to move you to the start of the file.
@@ -472,17 +472,17 @@ NOTE: You may see the cursor position in the lower right corner of the screen
** Type `/`{normal} followed by a phrase to search for the phrase. **
1. In Normal mode type the `/`{normal} character. Notice that it and the cursor
appear at the bottom of the screen as with the : command.
appear at the bottom of the screen as with the `:`{normal} command.
2. Now type 'errroor' `<Enter>`{normal}. This is the word you want to search for.
3. To search for the same phrase again, simply type [n](n).
To search for the same phrase in the opposite direction, type [N](N).
4. To search for a phrase in the backward direction, use [?](?) instead of / .
4. To search for a phrase in the backward direction, use [?](?) instead of `/`{normal}.
5. To go back to where you came from press `<Ctrl-o>`{normal} (Keep Ctrl down while
pressing the letter o). Repeat to go back further. `<Ctrl-i>`{normal} goes forward.
5. To go back to where you came from press `<Ctrl-o>`{normal} (keep `<Ctrl>`{normal} pressed down while
pressing the letter `o`{normal}). Repeat to go back further. `<Ctrl-i>`{normal} goes forward.
"errroor" is not the way to spell error; errroor is an error.
@@ -528,7 +528,7 @@ NOTE: This is very useful in debugging a program with unmatched parentheses!
Adding the g [flag](:s_flags) means to substitute globally in the line, change
all occurrences of "thee" in the line.
thee best time to see thee flowers is in thee spring.
Usually thee best time to see thee flowers is in thee spring.
4. To change every occurrence of a character string between two lines, type
~~~ cmd
@@ -601,7 +601,7 @@ thee best time to see thee flowers is in thee spring.
NOTE: It is possible to execute any external command this way, also with
arguments.
NOTE: All : commands must be finished by hitting <Enter>
NOTE: All `:`{vim} commands must be finished by hitting `<Enter>`{normal}.
From here on we will not always mention it.
# Lesson 5.2: MORE ON WRITING FILES
@@ -622,7 +622,7 @@ NOTE: All : commands must be finished by hitting <Enter>
4. This saves the whole file (the Vim Tutor) under the name TEST.
To verify this, type `:!ls`{vim} again to see your directory.
NOTE: If you were to exit Vim and start it again with vim TEST , the file
NOTE: If you were to exit Vim and start it again with `nvim TEST`, the file
would be an exact copy of the tutor when you saved it.
5. Now remove the file by typing:
@@ -632,7 +632,7 @@ NOTE: If you were to exit Vim and start it again with vim TEST , the file
# Lesson 5.3: SELECTING TEXT TO WRITE
** To save part of the file, type `v`{normal} motion `:w FILENAME`{vim} **
** To save part of the file, type `v`{normal} motion `:w FILENAME`{vim}. **
1. Move the cursor to this line.
@@ -665,7 +665,7 @@ NOTE: Pressing [v](v) starts [Visual selection](visual-mode). You can move
# Lesson 5.4: RETRIEVING AND MERGING FILES
** To insert the contents of a file, type `:r FILENAME`{vim} **
** To insert the contents of a file, type `:r FILENAME`{vim}. **
1. Place the cursor just above this line.
@@ -719,7 +719,7 @@ NOTE: You can also read the output of an external command. For example,
3. Now type some text and press `<Esc>`{normal} to exit Insert mode.
After typing o the cursor is placed on the open line in Insert mode.
After typing `o`{normal} the cursor is placed on the open line in Insert mode.
4. To open up a line ABOVE the cursor, simply type a [capital O](O), rather
than a lowercase `o`{normal}. Try this on the line below.
@@ -734,7 +734,7 @@ Open up a line above this by typing O while the cursor is on this line.
2. Press `e`{normal} until the cursor is on the end of "li".
3. Type an `a`{normal} (lowercase) to [append](a) text AFTER the cursor.
3. Type the lowercase letter `a`{normal} to [append](a) text AFTER the cursor.
4. Complete the word like the line below it. Press `<Esc>`{normal} to exit Insert
mode.
@@ -770,7 +770,7 @@ NOTE: Replace mode is like Insert mode, but every typed character deletes an
# Lesson 6.4: COPY AND PASTE TEXT
** Use the `y`{normal} operator to copy text and `p`{normal} to paste it **
** Use the `y`{normal} operator to copy text and `p`{normal} to paste it. **
1. Go to the line marked with ---> below and place the cursor after "a)".
@@ -780,19 +780,21 @@ NOTE: Replace mode is like Insert mode, but every typed character deletes an
4. Move the cursor to the end of the next line: `j$`{normal}
5. Type `p`{normal} to [put](put) (paste) the text. Then type: "a second"`<Esc>`{normal}.
5. Type `p`{normal} to [put](put) (paste) the text.
6. Use Visual mode to select " item.", yank it with `y`{normal}, move to the end of
6. Press `a`{normal} and then type "second". Press `<Esc>`{normal} to leave Insert mode.
7. Use Visual mode to select " item.", yank it with `y`{normal}, move to the end of
the next line with `j$`{normal} and put the text there with `p`{normal}.
a) this is the first item.
a) This is the first item.
b)
NOTE: you can also use `y`{normal} as an operator; `yw`{normal} yanks one word.
# Lesson 6.5: SET OPTION
** Set an option so a search or substitute ignores case **
** Set an option so a search or substitute ignores case. **
1. Search for 'ignore' by entering: `/ignore`
Repeat several times by pressing `n`{normal}.
@@ -801,7 +803,7 @@ a) this is the first item.
~~~ cmd
:set ic
~~~
3. Now search for 'ignore' again by pressing n
3. Now search for 'ignore' again by pressing `n`{normal}.
Notice that Ignore and IGNORE are now also found.
4. Set the 'hlsearch' and 'incsearch' options:
@@ -858,7 +860,7 @@ NOTE: If you want to ignore case for just one search command, use [\c](/\c)
# Lesson 7.1: GETTING HELP
** Use the on-line help system **
** Use the on-line help system. **
Vim has a comprehensive on-line help system. To get started, try one of
these three:
@@ -881,7 +883,7 @@ You can find help on just about any subject, by giving an argument to the
~~~
# Lesson 7.2: CREATE A STARTUP SCRIPT
** Enable Vim features **
** Enable Vim features. **
Vim has many more features than Vi, but most of them are disabled by
default. To start using more features you have to create a "vimrc" file.
@@ -897,11 +899,11 @@ default. To start using more features you have to create a "vimrc" file.
The next time you start Vim it will use syntax highlighting.
You can add all your preferred settings to this "vimrc" file.
For more information type :help vimrc-intro
For more information type `:help vimrc-intro`{vim}.
# Lesson 7.3: COMPLETION
** Command line completion with `<Ctrl-d>`{normal} and `<Tab>`{normal} **
** Command line completion with `<Ctrl-d>`{normal} and `<Tab>`{normal}. **
1. Look what files exist in the directory: `:!ls`{vim}
@@ -943,14 +945,14 @@ There are many resources online to learn more about vim. Here's a bunch of them:
- *Learn Vim Progressively*: http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/
- *Learning Vim in 2014*: http://benmccormick.org/learning-vim-in-2014/
- Vimcasts: http://vimcasts.org/
- Vim Video-Tutorials by Derek Wyatt: http://derekwyatt.org/vim/tutorials/
- *Vimcasts*: http://vimcasts.org/
- *Vim Video-Tutorials by Derek Wyatt*: http://derekwyatt.org/vim/tutorials/
- *Learn Vimscript the Hard Way*: http://learnvimscriptthehardway.stevelosh.com/
- *7 Habits of Effective Text Editing*: http://www.moolenaar.net/habits.html
- *vim-galore*: https://github.com/mhinz/vim-galore
If you prefer a book, *Practical Vim* by Drew Neil is recommended often (the sequel, *Modern
Vim*, includes material specific to nvim!).
Vim*, includes material specific to nvim).
This tutorial was written by Michael C. Pierce and Robert K. Ware, Colorado
School of Mines using ideas supplied by Charles Smith, Colorado State

View File

@@ -11,7 +11,7 @@
"215": "There are some words that don't belong in this sentence.",
"231": "Somebody typed the end of this line twice.",
"271": -1,
"290": "this line of words is cleaned up.",
"290": "This line of words is cleaned up.",
"304": -1,
"305": -1,
"306": -1,
@@ -32,14 +32,14 @@
"425": "The end of this line needs to be corrected using the c$ command.",
"487": -1,
"506": -1,
"531": "the best time to see the flowers is in the spring.",
"531": "Usually the best time to see the flowers is in the spring.",
"722": -1,
"727": -1,
"744": "This line will allow you to practice appending text to a line.",
"745": "This line will allow you to practice appending text to a line.",
"765": "Adding 123 to 456 gives you 579.",
"766": "Adding 123 to 456 gives you 579.",
"788": "a) this is the first item.",
"789": " b) this is the second item."
"790": "a) This is the first item.",
"791": " b) This is the second item."
}
}

View File

@@ -1668,8 +1668,8 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (*ea.cmd == ';') {
if (!ea.skip) {
curwin->w_cursor.lnum = ea.line2;
// Don't leave the cursor on an illegal line (caused by ';')
check_cursor_lnum();
// don't leave the cursor on an illegal line or column
check_cursor();
}
} else if (*ea.cmd != ',') {
break;
@@ -1813,7 +1813,7 @@ static char_u * do_one_cmd(char_u **cmdlinep,
if (text_locked() && !(ea.argt & CMDWIN)
&& !IS_USER_CMDIDX(ea.cmdidx)) {
// Command not allowed when editing the command line.
errormsg = get_text_locked_msg();
errormsg = (char_u *)_(get_text_locked_msg());
goto doend;
}
/* Disallow editing another buffer when "curbuf_lock" is set.
@@ -9378,7 +9378,7 @@ ses_arglist (
(void)vim_FullName((char *)s, (char *)buf, MAXPATHL, FALSE);
s = buf;
}
if (fputs("argadd ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL
if (fputs("$argadd ", fd) < 0 || ses_put_fname(fd, s, flagp) == FAIL
|| put_eol(fd) == FAIL) {
xfree(buf);
return FAIL;

View File

@@ -1749,7 +1749,7 @@ do_set (
if (flags & P_FLAGLIST) {
// Remove flags that appear twice.
for (s = newval; *s; s++) {
for (s = newval; *s;) {
// if options have P_FLAGLIST and P_ONECOMMA such as
// 'whichwrap'
if (flags & P_ONECOMMA) {
@@ -1757,15 +1757,16 @@ do_set (
&& vim_strchr(s + 2, *s) != NULL) {
// Remove the duplicated value and the next comma.
STRMOVE(s, s + 2);
s -= 2;
continue;
}
} else {
if ((!(flags & P_COMMA) || *s != ',')
&& vim_strchr(s + 1, *s) != NULL) {
STRMOVE(s, s + 1);
s--;
continue;
}
}
s++;
}
}

View File

@@ -3316,6 +3316,47 @@ bt_regexec_nl (
return (int)r;
}
/// Wrapper around strchr which accounts for case-insensitive searches and
/// non-ASCII characters.
///
/// This function is used a lot for simple searches, keep it fast!
///
/// @param s string to search
/// @param c character to find in @a s
///
/// @return NULL if no match, otherwise pointer to the position in @a s
static inline char_u *cstrchr(const char_u *const s, const int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
FUNC_ATTR_ALWAYS_INLINE
{
if (!rex.reg_ic) {
return vim_strchr(s, c);
}
// Use folded case for UTF-8, slow! For ASCII use libc strpbrk which is
// expected to be highly optimized.
if (c > 0x80) {
const int folded_c = utf_fold(c);
for (const char_u *p = s; *p != NUL; p += utfc_ptr2len(p)) {
if (utf_fold(utf_ptr2char(p)) == folded_c) {
return (char_u *)p;
}
}
return NULL;
}
int cc;
if (ASCII_ISUPPER(c)) {
cc = TOLOWER_ASC(c);
} else if (ASCII_ISLOWER(c)) {
cc = TOUPPER_ASC(c);
} else {
return vim_strchr(s, c);
}
char tofind[] = { (char)c, (char)cc, NUL };
return (char_u *)strpbrk((const char *)s, tofind);
}
/// Matches a regexp against multiple lines.
/// "rmp->regprog" is a compiled regexp as returned by vim_regcomp().
@@ -6320,42 +6361,6 @@ static int cstrncmp(char_u *s1, char_u *s2, int *n)
return result;
}
/*
* cstrchr: This function is used a lot for simple searches, keep it fast!
*/
static inline char_u *cstrchr(const char_u *const s, const int c)
FUNC_ATTR_PURE FUNC_ATTR_WARN_UNUSED_RESULT FUNC_ATTR_NONNULL_ALL
FUNC_ATTR_ALWAYS_INLINE
{
if (!rex.reg_ic) {
return vim_strchr(s, c);
}
// Use folded case for UTF-8, slow! For ASCII use libc strpbrk which is
// expected to be highly optimized.
if (c > 0x80) {
const int folded_c = utf_fold(c);
for (const char_u *p = s; *p != NUL; p += utfc_ptr2len(p)) {
if (utf_fold(utf_ptr2char(p)) == folded_c) {
return (char_u *)p;
}
}
return NULL;
}
int cc;
if (ASCII_ISUPPER(c)) {
cc = TOLOWER_ASC(c);
} else if (ASCII_ISLOWER(c)) {
cc = TOUPPER_ASC(c);
} else {
return vim_strchr(s, c);
}
char tofind[] = { (char)c, (char)cc, NUL };
return (char_u *)strpbrk((const char *)s, tofind);
}
/***************************************************************
* regsub stuff *
***************************************************************/

View File

@@ -58,6 +58,7 @@ NEW_TESTS ?= \
test_match.res \
test_matchadd_conceal.res \
test_matchadd_conceal_utf8.res \
test_mksession.res \
test_nested_function.res \
test_normal.res \
test_quickfix.res \

View File

@@ -250,9 +250,21 @@ func Test_remove_char_in_cmdline()
call assert_equal('"def', @:)
endfunc
func Test_illegal_address()
func Test_illegal_address1()
new
2;'(
2;')
quit
endfunc
func Test_illegal_address2()
call writefile(['c', 'x', ' x', '.', '1;y'], 'Xtest.vim')
new
source Xtest.vim
" Trigger calling validate_cursor()
diffsp Xtest.vim
quit!
bwipe!
call delete('Xtest.vim')
endfunc

View File

@@ -0,0 +1,15 @@
" Tests for sessions
" Verify that arglist is stored correctly to the session file.
func Test_mksession_arglist()
argdel *
next file1 file2 file3 file4
mksession! Xtest_mks.out
source Xtest_mks.out
call assert_equal(['file1', 'file2', 'file3', 'file4'], argv())
call delete('Xtest_mks.out')
argdel *
endfunc
" vim: shiftwidth=2 sts=2 expandtab

View File

@@ -13,6 +13,12 @@ function! Test_whichwrap()
set whichwrap+=h,l
call assert_equal('b,s,h,l', &whichwrap)
set whichwrap=h,h
call assert_equal('h', &whichwrap)
set whichwrap=h,h,h
call assert_equal('h', &whichwrap)
set whichwrap&
endfunction

View File

@@ -52,6 +52,15 @@
#define LINUXSET0C "\x1b[?0c"
#define LINUXSET1C "\x1b[?1c"
#ifdef NVIM_UNIBI_HAS_VAR_FROM
#define UNIBI_SET_NUM_VAR(var, num) \
do { \
(var) = unibi_var_from_num((num)); \
} while (0)
#else
#define UNIBI_SET_NUM_VAR(var, num) (var).i = (num);
#endif
// Per the commentary in terminfo, only a minus sign is a true suffix
// separator.
bool terminfo_is_term_family(const char *term, const char *family)
@@ -391,15 +400,15 @@ static void update_attrs(UI *ui, HlAttrs attrs)
if (unibi_get_str(data->ut, unibi_set_attributes)) {
if (attrs.bold || attrs.reverse || attrs.underline || attrs.undercurl) {
data->params[0].i = 0; // standout
data->params[1].i = attrs.underline || attrs.undercurl;
data->params[2].i = attrs.reverse;
data->params[3].i = 0; // blink
data->params[4].i = 0; // dim
data->params[5].i = attrs.bold;
data->params[6].i = 0; // blank
data->params[7].i = 0; // protect
data->params[8].i = 0; // alternate character set
UNIBI_SET_NUM_VAR(data->params[0], 0); // standout
UNIBI_SET_NUM_VAR(data->params[1], attrs.underline || attrs.undercurl);
UNIBI_SET_NUM_VAR(data->params[2], attrs.reverse);
UNIBI_SET_NUM_VAR(data->params[3], 0); // blink
UNIBI_SET_NUM_VAR(data->params[4], 0); // dim
UNIBI_SET_NUM_VAR(data->params[5], attrs.bold);
UNIBI_SET_NUM_VAR(data->params[6], 0); // blank
UNIBI_SET_NUM_VAR(data->params[7], 0); // protect
UNIBI_SET_NUM_VAR(data->params[8], 0); // alternate character set
unibi_out(ui, unibi_set_attributes);
} else if (!data->default_attr) {
unibi_out(ui, unibi_exit_attribute_mode);
@@ -423,26 +432,26 @@ static void update_attrs(UI *ui, HlAttrs attrs)
}
if (ui->rgb) {
if (fg != -1) {
data->params[0].i = (fg >> 16) & 0xff; // red
data->params[1].i = (fg >> 8) & 0xff; // green
data->params[2].i = fg & 0xff; // blue
UNIBI_SET_NUM_VAR(data->params[0], (fg >> 16) & 0xff); // red
UNIBI_SET_NUM_VAR(data->params[1], (fg >> 8) & 0xff); // green
UNIBI_SET_NUM_VAR(data->params[2], fg & 0xff); // blue
unibi_out_ext(ui, data->unibi_ext.set_rgb_foreground);
}
if (bg != -1) {
data->params[0].i = (bg >> 16) & 0xff; // red
data->params[1].i = (bg >> 8) & 0xff; // green
data->params[2].i = bg & 0xff; // blue
UNIBI_SET_NUM_VAR(data->params[0], (bg >> 16) & 0xff); // red
UNIBI_SET_NUM_VAR(data->params[1], (bg >> 8) & 0xff); // green
UNIBI_SET_NUM_VAR(data->params[2], bg & 0xff); // blue
unibi_out_ext(ui, data->unibi_ext.set_rgb_background);
}
} else {
if (fg != -1) {
data->params[0].i = fg;
UNIBI_SET_NUM_VAR(data->params[0], fg);
unibi_out(ui, unibi_set_a_foreground);
}
if (bg != -1) {
data->params[0].i = bg;
UNIBI_SET_NUM_VAR(data->params[0], bg);
unibi_out(ui, unibi_set_a_background);
}
}
@@ -558,7 +567,7 @@ static void cursor_goto(UI *ui, int row, int col)
unibi_out(ui, unibi_cursor_left);
}
} else {
data->params[0].i = n;
UNIBI_SET_NUM_VAR(data->params[0], n);
unibi_out(ui, unibi_parm_left_cursor);
}
ugrid_goto(grid, row, col);
@@ -570,7 +579,7 @@ static void cursor_goto(UI *ui, int row, int col)
unibi_out(ui, unibi_cursor_right);
}
} else {
data->params[0].i = n;
UNIBI_SET_NUM_VAR(data->params[0], n);
unibi_out(ui, unibi_parm_right_cursor);
}
ugrid_goto(grid, row, col);
@@ -585,7 +594,7 @@ static void cursor_goto(UI *ui, int row, int col)
unibi_out(ui, unibi_cursor_down);
}
} else {
data->params[0].i = n;
UNIBI_SET_NUM_VAR(data->params[0], n);
unibi_out(ui, unibi_parm_down_cursor);
}
ugrid_goto(grid, row, col);
@@ -597,7 +606,7 @@ static void cursor_goto(UI *ui, int row, int col)
unibi_out(ui, unibi_cursor_up);
}
} else {
data->params[0].i = n;
UNIBI_SET_NUM_VAR(data->params[0], n);
unibi_out(ui, unibi_parm_up_cursor);
}
ugrid_goto(grid, row, col);
@@ -675,19 +684,19 @@ static void set_scroll_region(UI *ui)
TUIData *data = ui->data;
UGrid *grid = &data->grid;
data->params[0].i = grid->top;
data->params[1].i = grid->bot;
UNIBI_SET_NUM_VAR(data->params[0], grid->top);
UNIBI_SET_NUM_VAR(data->params[1], grid->bot);
unibi_out(ui, unibi_change_scroll_region);
if (grid->left != 0 || grid->right != ui->width - 1) {
unibi_out_ext(ui, data->unibi_ext.enable_lr_margin);
if (data->can_set_lr_margin) {
data->params[0].i = grid->left;
data->params[1].i = grid->right;
UNIBI_SET_NUM_VAR(data->params[0], grid->left);
UNIBI_SET_NUM_VAR(data->params[1], grid->right);
unibi_out(ui, unibi_set_lr_margin);
} else {
data->params[0].i = grid->left;
UNIBI_SET_NUM_VAR(data->params[0], grid->left);
unibi_out(ui, unibi_set_left_margin_parm);
data->params[0].i = grid->right;
UNIBI_SET_NUM_VAR(data->params[0], grid->right);
unibi_out(ui, unibi_set_right_margin_parm);
}
}
@@ -702,19 +711,19 @@ static void reset_scroll_region(UI *ui)
if (0 <= data->unibi_ext.reset_scroll_region) {
unibi_out_ext(ui, data->unibi_ext.reset_scroll_region);
} else {
data->params[0].i = 0;
data->params[1].i = ui->height - 1;
UNIBI_SET_NUM_VAR(data->params[0], 0);
UNIBI_SET_NUM_VAR(data->params[1], ui->height - 1);
unibi_out(ui, unibi_change_scroll_region);
}
if (grid->left != 0 || grid->right != ui->width - 1) {
if (data->can_set_lr_margin) {
data->params[0].i = 0;
data->params[1].i = ui->width - 1;
UNIBI_SET_NUM_VAR(data->params[0], 0);
UNIBI_SET_NUM_VAR(data->params[1], ui->width - 1);
unibi_out(ui, unibi_set_lr_margin);
} else {
data->params[0].i = 0;
UNIBI_SET_NUM_VAR(data->params[0], 0);
unibi_out(ui, unibi_set_left_margin_parm);
data->params[0].i = ui->width - 1;
UNIBI_SET_NUM_VAR(data->params[0], ui->width - 1);
unibi_out(ui, unibi_set_right_margin_parm);
}
unibi_out_ext(ui, data->unibi_ext.disable_lr_margin);
@@ -728,8 +737,8 @@ static void tui_resize(UI *ui, Integer width, Integer height)
ugrid_resize(&data->grid, (int)width, (int)height);
if (!got_winch) { // Try to resize the terminal window.
data->params[0].i = (int)height;
data->params[1].i = (int)width;
UNIBI_SET_NUM_VAR(data->params[0], (int)height);
UNIBI_SET_NUM_VAR(data->params[1], (int)width);
unibi_out_ext(ui, data->unibi_ext.resize_screen);
// DECSLPP does not reset the scroll region.
if (data->scroll_region_is_full_screen) {
@@ -863,7 +872,7 @@ static void tui_set_mode(UI *ui, ModeShape mode)
int attr = syn_id2attr(c.id);
if (attr > 0) {
attrentry_T *aep = syn_cterm_attr2entry(attr);
data->params[0].i = aep->rgb_bg_color;
UNIBI_SET_NUM_VAR(data->params[0], aep->rgb_bg_color);
unibi_out_ext(ui, data->unibi_ext.set_cursor_color);
}
}
@@ -874,7 +883,7 @@ static void tui_set_mode(UI *ui, ModeShape mode)
case SHAPE_VER: shape = 5; break;
default: WLOG("Unknown shape value %d", shape); break;
}
data->params[0].i = shape + (int)(c.blinkon == 0);
UNIBI_SET_NUM_VAR(data->params[0], shape + (int)(c.blinkon == 0));
unibi_out_ext(ui, data->unibi_ext.set_cursor_style);
}
@@ -927,14 +936,14 @@ static void tui_scroll(UI *ui, Integer count)
if (count == 1) {
unibi_out(ui, unibi_delete_line);
} else {
data->params[0].i = (int)count;
UNIBI_SET_NUM_VAR(data->params[0], (int)count);
unibi_out(ui, unibi_parm_delete_line);
}
} else {
if (count == -1) {
unibi_out(ui, unibi_insert_line);
} else {
data->params[0].i = -(int)count;
UNIBI_SET_NUM_VAR(data->params[0], -(int)count);
unibi_out(ui, unibi_parm_insert_line);
}
}
@@ -1177,8 +1186,8 @@ end:
static void unibi_goto(UI *ui, int row, int col)
{
TUIData *data = ui->data;
data->params[0].i = row;
data->params[1].i = col;
UNIBI_SET_NUM_VAR(data->params[0], row);
UNIBI_SET_NUM_VAR(data->params[1], col);
unibi_out(ui, unibi_cursor_address);
}
@@ -1190,7 +1199,8 @@ static void unibi_goto(UI *ui, int row, int col)
str = fn(data->ut, (unsigned)unibi_index); \
} \
if (str) { \
unibi_var_t vars[26 + 26] = { { 0 } }; \
unibi_var_t vars[26 + 26]; \
memset(&vars, 0, sizeof(vars)); \
unibi_format(vars, vars + 26, str, data->params, out, ui, NULL, NULL); \
} \
} while (0)

View File

@@ -625,10 +625,10 @@ static const int included_patches[] = {
// 330,
// 329,
// 328,
// 327,
327,
326,
325,
// 324,
324,
// 323,
322,
// 321,
@@ -647,10 +647,10 @@ static const int included_patches[] = {
308,
307,
// 306,
// 305,
305,
// 304,
// 303,
// 302,
// 302, NA
// 301,
300,
// 299,
@@ -658,7 +658,7 @@ static const int included_patches[] = {
297,
// 296,
// 295,
// 294,
294,
// 293,
// 292,
291,