Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
968a5b62ff | ||
|
|
affd0bc626 | ||
|
|
caf1a2f296 | ||
|
|
3b814af7e1 | ||
|
|
47f6db9089 | ||
|
|
1b0a9dd413 | ||
|
|
26d711645c | ||
|
|
b69c6fb7b4 | ||
|
|
90478f35a8 | ||
|
|
2d6d718dde | ||
|
|
5ffefbb35a | ||
|
|
2346a63784 | ||
|
|
4ee9d8e04d | ||
|
|
e70e12b32f | ||
|
|
2e66b0d137 | ||
|
|
c2dec4cac4 | ||
|
|
c3a27bbd53 | ||
|
|
6d1792d408 |
@@ -54,7 +54,7 @@ effects. Be careful not to destroy your text.
|
||||
:au[tocmd] [group] {event} {pat} [++once] [++nested] {cmd}
|
||||
Add {cmd} to the list of commands that Vim will
|
||||
execute automatically on {event} for a file matching
|
||||
{pat} |autocmd-patterns|.
|
||||
{pat} |autocmd-patterns|.
|
||||
Here {event} cannot be "*". *E1155*
|
||||
Note: A quote character is seen as argument to the
|
||||
:autocmd and won't start a comment.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*change.txt* For Vim version 8.2. Last change: 2021 Mar 01
|
||||
*change.txt* For Vim version 8.2. Last change: 2021 Jun 10
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*eval.txt* For Vim version 8.2. Last change: 2021 May 07
|
||||
*eval.txt* For Vim version 8.2. Last change: 2021 Jun 07
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -2102,7 +2102,7 @@ v:null An empty String. Used to put "null" in JSON. See
|
||||
v:numbermax Maximum value of a number.
|
||||
|
||||
*v:numbermin* *numbermin-variable*
|
||||
v:numbermin Minimum value of a number (negative)
|
||||
v:numbermin Minimum value of a number (negative).
|
||||
|
||||
*v:numbersize* *numbersize-variable*
|
||||
v:numbersize Number of bits in a Number. This is normally 64, but on some
|
||||
@@ -2508,7 +2508,7 @@ char2nr({expr} [, {utf8}]) Number ASCII/UTF8 value of first char in {expr}
|
||||
charclass({string}) Number character class of {string}
|
||||
charcol({expr}) Number column number of cursor or mark
|
||||
charidx({string}, {idx} [, {countcc}])
|
||||
Number char index of byte {idx} in {string}
|
||||
Number char index of byte {idx} in {string}
|
||||
chdir({dir}) String change current working directory
|
||||
cindent({lnum}) Number C indent for line {lnum}
|
||||
clearmatches([{win}]) none clear all matches
|
||||
@@ -2529,7 +2529,7 @@ cscope_connection([{num}, {dbpath} [, {prepend}]])
|
||||
cursor({lnum}, {col} [, {off}])
|
||||
Number move cursor to {lnum}, {col}, {off}
|
||||
cursor({list}) Number move cursor to position in {list}
|
||||
debugbreak({pid}) Number interrupt process being debugged
|
||||
debugbreak({pid}) Number interrupt process being debugged
|
||||
deepcopy({expr} [, {noref}]) any make a full copy of {expr}
|
||||
delete({fname} [, {flags}]) Number delete the file or directory {fname}
|
||||
deletebufline({expr}, {first} [, {last}])
|
||||
@@ -4951,7 +4951,7 @@ funcref({name} [, {arglist}] [, {dict}])
|
||||
Can also be used as a |method|: >
|
||||
GetFuncname()->funcref([arg])
|
||||
<
|
||||
*function()* *E700* *E922* *E923*
|
||||
*function()* *partial* *E700* *E922* *E923*
|
||||
function({name} [, {arglist}] [, {dict}])
|
||||
Return a |Funcref| variable that refers to function {name}.
|
||||
{name} can be the name of a user defined function or an
|
||||
@@ -5500,8 +5500,8 @@ getcurpos([{winid}])
|
||||
|
||||
Can also be used as a |method|: >
|
||||
GetWinid()->getcurpos()
|
||||
|
||||
< *getcursorcharpos()*
|
||||
<
|
||||
*getcursorcharpos()*
|
||||
getcursorcharpos([{winid}])
|
||||
Same as |getcurpos()| but the column number in the returned
|
||||
List is a character index instead of a byte index.
|
||||
@@ -5510,8 +5510,8 @@ getcursorcharpos([{winid}])
|
||||
With the cursor on '보' in line 3 with text "여보세요": >
|
||||
getcursorcharpos() returns [0, 3, 2, 0, 3]
|
||||
getcurpos() returns [0, 3, 4, 0, 3]
|
||||
|
||||
< Can also be used as a |method|: >
|
||||
<
|
||||
Can also be used as a |method|: >
|
||||
GetWinid()->getcursorcharpos()
|
||||
|
||||
< *getcwd()*
|
||||
@@ -5736,11 +5736,11 @@ getmarklist([{expr}]) *getmarklist()*
|
||||
see |bufname()|.
|
||||
|
||||
Each item in the returned List is a |Dict| with the following:
|
||||
name - name of the mark prefixed by "'"
|
||||
pos - a |List| with the position of the mark:
|
||||
mark name of the mark prefixed by "'"
|
||||
pos a |List| with the position of the mark:
|
||||
[bufnum, lnum, col, off]
|
||||
Refer to |getpos()| for more information.
|
||||
file - file name
|
||||
Refer to |getpos()| for more information.
|
||||
file file name
|
||||
|
||||
Refer to |getpos()| for getting information about a specific
|
||||
mark.
|
||||
@@ -5822,7 +5822,7 @@ getpos({expr}) Get the position for {expr}. For possible values of {expr}
|
||||
'> is a large number.
|
||||
The column number in the returned List is the byte position
|
||||
within the line. To get the character position in the line,
|
||||
use |getcharpos()|
|
||||
use |getcharpos()|.
|
||||
The column number can be very large, e.g. 2147483647, in which
|
||||
case it means "after the end of the line".
|
||||
This can be used to save and restore the position of a mark: >
|
||||
@@ -7637,7 +7637,7 @@ matchfuzzypos({list}, {str} [, {dict}]) *matchfuzzypos()*
|
||||
Same as |matchfuzzy()|, but returns the list of matched
|
||||
strings, the list of character positions where characters
|
||||
in {str} matches and a list of matching scores. You can
|
||||
use |byteidx()|to convert a character position to a byte
|
||||
use |byteidx()| to convert a character position to a byte
|
||||
position.
|
||||
|
||||
If {str} matches multiple times in a string, then only the
|
||||
@@ -9961,7 +9961,7 @@ sinh({expr}) *sinh()*
|
||||
{only available when compiled with the |+float| feature}
|
||||
|
||||
|
||||
slice({expr}, {start} [, {end}]) *slice()*
|
||||
slice({expr}, {start} [, {end}]) *slice()*
|
||||
Similar to using a |slice| "expr[start : end]", but "end" is
|
||||
used exclusive. And for a string the indexes are used as
|
||||
character indexes instead of byte indexes, like in
|
||||
|
||||
@@ -632,7 +632,7 @@ For fish, add to the config file
|
||||
MARKDOWN *ft-markdown-plugin*
|
||||
|
||||
To enable folding use this: >
|
||||
let g:markdown_folding = 1
|
||||
let g:markdown_folding = 1
|
||||
<
|
||||
|
||||
PDF *ft-pdf-plugin*
|
||||
|
||||
@@ -45,7 +45,7 @@ Numbers, subscripts and superscripts are available with 's' and 'S':
|
||||
1s ₁ 1S ¹ ~
|
||||
2s ₂ 9S ⁹ ~
|
||||
|
||||
But some don´t come defined by default. Those are digraph definitions you can
|
||||
But some don't come defined by default. Those are digraph definitions you can
|
||||
add in your ~/.vimrc file. >
|
||||
exec 'digraph \\ '.char2nr('∖')
|
||||
exec 'digraph \< '.char2nr('≼')
|
||||
|
||||
@@ -132,7 +132,7 @@ Advanced editing ~
|
||||
|windows.txt| commands for using multiple windows and buffers
|
||||
|tabpage.txt| commands for using multiple tab pages
|
||||
|spell.txt| spell checking
|
||||
|diff.txt| working with two to four versions of the same file
|
||||
|diff.txt| working with two to eight versions of the same file
|
||||
|autocmd.txt| automatically executing commands on an event
|
||||
|eval.txt| expression evaluation, conditional commands
|
||||
|channel.txt| Jobs, Channels, inter-process communication
|
||||
@@ -145,6 +145,7 @@ Special issues ~
|
||||
|term.txt| using different terminals and mice
|
||||
|terminal.txt| Terminal window support
|
||||
|popup.txt| popup window support
|
||||
|vim9.txt| using Vim9 script
|
||||
|
||||
Programming language support ~
|
||||
|indent.txt| automatic indenting for C and other languages
|
||||
@@ -153,6 +154,8 @@ Programming language support ~
|
||||
|filetype.txt| settings done specifically for a type of file
|
||||
|quickfix.txt| commands for a quick edit-compile-fix cycle
|
||||
|ft_ada.txt| Ada (the programming language) support
|
||||
|ft_ps1.txt| Filetype plugin for Windows PowerShell
|
||||
|ft_raku.txt| Filetype plugin for Raku
|
||||
|ft_rust.txt| Filetype plugin for Rust
|
||||
|ft_sql.txt| about the SQL filetype plugin
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*motion.txt* For Vim version 8.2. Last change: 2021 Mar 28
|
||||
*motion.txt* For Vim version 8.2. Last change: 2021 Jun 13
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -59,9 +59,14 @@ or change text. The following operators are available:
|
||||
|<| < shift left
|
||||
|zf| zf define a fold
|
||||
|g@| g@ call function set with the 'operatorfunc' option
|
||||
|
||||
*motion-count-multiplied*
|
||||
If the motion includes a count and the operator also had a count before it,
|
||||
the two counts are multiplied. For example: "2d3w" deletes six words.
|
||||
*operator-doubled*
|
||||
When doubling the operator it operates on a line. When using a count, before
|
||||
or after the first character, that many lines are operated upon. Thus `3dd`
|
||||
deletes three lines. A count before and after the first character is
|
||||
multiplied, thus `2y3y` yanks six lines.
|
||||
|
||||
After applying the operator the cursor is mostly left at the start of the text
|
||||
that was operated upon. For example, "yfe" doesn't move the cursor, but "yFe"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*options.txt* For Vim version 8.2. Last change: 2021 May 16
|
||||
*options.txt* For Vim version 8.2. Last change: 2021 May 31
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
@@ -767,12 +767,12 @@ GNU_TOOLS.ZIP package downloadable from http://www.polarhome.com/vim/
|
||||
|
||||
Version 8.2
|
||||
- make all changes needed for clean compile build of v8.2 on VMS on all platforms
|
||||
- fix the call mkdir bug (vicente_polo@yahoo.es)
|
||||
- fix the call mkdir bug (vicente_polo@yahoo.es)
|
||||
- test on VSI OpenVMS Alpha and Itanium platforms
|
||||
- added LUA support
|
||||
- added XPM support - Motif GUI with toolbar on all platforms
|
||||
- XPM v3.4.11 libraries for IA64, AXP and VAX are added
|
||||
- start integrating the new test scripts
|
||||
- XPM v3.4.11 libraries for IA64, AXP and VAX are added
|
||||
- start integrating the new test scripts
|
||||
|
||||
Version 8.1
|
||||
- make necessary changes to build v8.1 on VMS
|
||||
|
||||
@@ -1217,7 +1217,7 @@ x A single character, with no special meaning, matches itself
|
||||
|
||||
\%d123 Matches the character specified with a decimal number. Must be
|
||||
followed by a non-digit.
|
||||
\%o40 Matches the character specified with an octal number up to 0377.
|
||||
\%o40 Matches the character specified with an octal number up to 0o377.
|
||||
Numbers below 0o40 must be followed by a non-octal digit or a
|
||||
non-digit.
|
||||
\%x2a Matches the character specified with up to two hexadecimal characters.
|
||||
|
||||
@@ -3809,7 +3809,7 @@ netrw:
|
||||
Decho.vim is provided as a "vimball"; see |vimball-intro|. You
|
||||
should edit the Decho.vba.gz file and source it in: >
|
||||
|
||||
vim Decho.vba.gz
|
||||
vim Decho.vba.gz
|
||||
:so %
|
||||
:q
|
||||
<
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*repeat.txt* For Vim version 8.2. Last change: 2021 May 08
|
||||
*repeat.txt* For Vim version 8.2. Last change: 2021 Jun 11
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -279,7 +279,9 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
ftdetect scripts are loaded, only the matching
|
||||
directories are added to 'runtimepath'. This is
|
||||
useful in your .vimrc. The plugins will then be
|
||||
loaded during initialization, see |load-plugins|.
|
||||
loaded during initialization, see |load-plugins| (note
|
||||
that the loading order will be reversed, because each
|
||||
directory is inserted before others).
|
||||
Note that for ftdetect scripts to be loaded
|
||||
you will need to write `filetype plugin indent on`
|
||||
AFTER all `packadd!` commands.
|
||||
@@ -372,7 +374,7 @@ For writing a Vim script, see chapter 41 of the user manual |usr_41.txt|.
|
||||
for some commands.
|
||||
See |:vim9cmd| for executing one command with Vim9
|
||||
syntax and semantics.
|
||||
|
||||
|
||||
*:scr* *:scriptnames*
|
||||
:scr[iptnames] List all sourced script names, in the order they were
|
||||
first sourced. The number is used for the script ID
|
||||
|
||||
@@ -3430,8 +3430,8 @@ syntax highlighting script handles this with the following logic:
|
||||
Tex: Match Check Control~
|
||||
|
||||
Sometimes one actually wants mismatched parentheses, square braces,
|
||||
and or curly braces; for example, \text{(1,10] is a range from but
|
||||
not including 1 to and including 10}. This wish, of course, conflicts
|
||||
and or curly braces; for example, \text{(1,10]} is a range from but
|
||||
not including 1 to and including 10. This wish, of course, conflicts
|
||||
with the desire to provide delimiter mismatch detection. To
|
||||
accommodate these conflicting goals, syntax/tex.vim provides >
|
||||
g:tex_matchcheck = '[({[]'
|
||||
@@ -4084,7 +4084,7 @@ match in the same position overrules an earlier one). The "transparent"
|
||||
argument makes the "myVim" match use the same highlighting as "myString". But
|
||||
it does not contain anything. If the "contains=NONE" argument would be left
|
||||
out, then "myVim" would use the contains argument from myString and allow
|
||||
"myWord" to be contained, which will be highlighted as a Constant. This
|
||||
"myWord" to be contained, which will be highlighted as a Comment. This
|
||||
happens because a contained match doesn't match inside itself in the same
|
||||
position, thus the "myVim" match doesn't overrule the "myWord" match here.
|
||||
|
||||
@@ -4970,8 +4970,8 @@ ctermul={color-nr} *highlight-ctermul*
|
||||
*tmux*
|
||||
When using tmux you may want to use this in the tmux config: >
|
||||
# tmux colors
|
||||
set -g default-terminal "xterm-256color"
|
||||
set -ag terminal-overrides ",xterm-256color:Tc"
|
||||
set -s default-terminal "tmux-256color"
|
||||
set -as terminal-overrides ",*-256color:Tc"
|
||||
< More info at:
|
||||
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-a-256-colour-terminal
|
||||
https://github.com/tmux/tmux/wiki/FAQ#how-do-i-use-rgb-colour
|
||||
|
||||
@@ -7000,6 +7000,7 @@ getchar() eval.txt /*getchar()*
|
||||
getcharmod() eval.txt /*getcharmod()*
|
||||
getcharpos() eval.txt /*getcharpos()*
|
||||
getcharsearch() eval.txt /*getcharsearch()*
|
||||
getcharstr() eval.txt /*getcharstr()*
|
||||
getcmdline() eval.txt /*getcmdline()*
|
||||
getcmdpos() eval.txt /*getcmdpos()*
|
||||
getcmdtype() eval.txt /*getcmdtype()*
|
||||
@@ -7901,6 +7902,7 @@ moo.vim syntax.txt /*moo.vim*
|
||||
more-compatible version5.txt /*more-compatible*
|
||||
more-prompt message.txt /*more-prompt*
|
||||
more-variables eval.txt /*more-variables*
|
||||
motion-count-multiplied motion.txt /*motion-count-multiplied*
|
||||
motion.txt motion.txt /*motion.txt*
|
||||
mouse-mode-table term.txt /*mouse-mode-table*
|
||||
mouse-overview term.txt /*mouse-overview*
|
||||
@@ -8348,6 +8350,7 @@ omni-sql-completion ft_sql.txt /*omni-sql-completion*
|
||||
online-help helphelp.txt /*online-help*
|
||||
opening-window windows.txt /*opening-window*
|
||||
operator motion.txt /*operator*
|
||||
operator-doubled motion.txt /*operator-doubled*
|
||||
operator-pending-index index.txt /*operator-pending-index*
|
||||
operator-variable eval.txt /*operator-variable*
|
||||
option-backslash options.txt /*option-backslash*
|
||||
@@ -8401,6 +8404,7 @@ page_up intro.txt /*page_up*
|
||||
pager message.txt /*pager*
|
||||
papp.vim syntax.txt /*papp.vim*
|
||||
paragraph motion.txt /*paragraph*
|
||||
partial eval.txt /*partial*
|
||||
pascal.vim syntax.txt /*pascal.vim*
|
||||
patches-8 version8.txt /*patches-8*
|
||||
patches-8.1 version8.txt /*patches-8.1*
|
||||
@@ -10066,6 +10070,7 @@ v_u change.txt /*v_u*
|
||||
v_v visual.txt /*v_v*
|
||||
v_x change.txt /*v_x*
|
||||
v_y change.txt /*v_y*
|
||||
v_zy change.txt /*v_zy*
|
||||
v_~ change.txt /*v_~*
|
||||
vab motion.txt /*vab*
|
||||
val-variable eval.txt /*val-variable*
|
||||
@@ -10435,6 +10440,7 @@ zOS-PuTTY os_390.txt /*zOS-PuTTY*
|
||||
zOS-has-ebcdic os_390.txt /*zOS-has-ebcdic*
|
||||
zOS-limitations os_390.txt /*zOS-limitations*
|
||||
zOS-open-source os_390.txt /*zOS-open-source*
|
||||
zP change.txt /*zP*
|
||||
zR fold.txt /*zR*
|
||||
zW spell.txt /*zW*
|
||||
zX fold.txt /*zX*
|
||||
@@ -10462,6 +10468,7 @@ zl scroll.txt /*zl*
|
||||
zm fold.txt /*zm*
|
||||
zn fold.txt /*zn*
|
||||
zo fold.txt /*zo*
|
||||
zp change.txt /*zp*
|
||||
zr fold.txt /*zr*
|
||||
zs scroll.txt /*zs*
|
||||
zsh.vim syntax.txt /*zsh.vim*
|
||||
@@ -10473,6 +10480,7 @@ zuw spell.txt /*zuw*
|
||||
zv fold.txt /*zv*
|
||||
zw spell.txt /*zw*
|
||||
zx fold.txt /*zx*
|
||||
zy change.txt /*zy*
|
||||
zz scroll.txt /*zz*
|
||||
{ motion.txt /*{*
|
||||
{Visual} intro.txt /*{Visual}*
|
||||
|
||||
@@ -373,10 +373,10 @@ Added by Vim (there are no standard codes for these):
|
||||
t_Ri restore icon text from stack *t_Ri* *'t_Ri'*
|
||||
t_TE end of "raw" mode *t_TE* *'t_TE'*
|
||||
t_TI put terminal into "raw" mode *t_TI* *'t_TI'*
|
||||
t_fd disable focus-event tracking *t_fd* *'t_fd'*
|
||||
|xterm-focus-event|
|
||||
t_fe enable focus-event tracking *t_fe* *'t_fe'*
|
||||
|xterm-focus-event|
|
||||
t_fd disable focus-event tracking *t_fd* *'t_fd'*
|
||||
|xterm-focus-event|
|
||||
|
||||
Some codes have a start, middle and end part. The start and end are defined
|
||||
by the termcap option, the middle part is text.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*todo.txt* For Vim version 8.2. Last change: 2021 May 28
|
||||
*todo.txt* For Vim version 8.2. Last change: 2021 Jun 13
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
@@ -38,57 +38,30 @@ browser use: https://github.com/vim/vim/issues/1234
|
||||
*known-bugs*
|
||||
-------------------- Known bugs and current work -----------------------
|
||||
|
||||
Geen memory leak?
|
||||
|
||||
Crash using outer var from nested lambda:
|
||||
vim9script
|
||||
def F(text: string): func(string): func(string): string
|
||||
return (arg: string): func(string): string => ((sep: string): string => {
|
||||
return text .. ' ' .. arg
|
||||
})
|
||||
enddef
|
||||
|
||||
echo F('hello')(' ')('there')
|
||||
|
||||
|
||||
|
||||
Vim9 - Make everything work:
|
||||
- function returning nothing should return void instead of zero
|
||||
- compile "expr" and "call" expression of a channel in channel_exe_cmd()?
|
||||
- Need some solution for dict function. Can we implement part of classes?
|
||||
- A lambda without {} does not require a return type, using { return x } does.
|
||||
That's unexpected, since the arguments are not required to have a type.
|
||||
alt 1: not require a return type, figure it out from the common type of all
|
||||
the return statements found
|
||||
alt 2: also require argument types
|
||||
- Using "windo echo expr" does not accept a line break inside "expr" (in a
|
||||
:def function and at script level in a not executed block). #7681
|
||||
- use CheckLegacyAndVim9Success(lines) in many more places
|
||||
- Make debugging work - at least per function.
|
||||
- How to evaluate the stack and variables on the stack?
|
||||
- FIXME in test_debugger.vim
|
||||
- For builtin functions using tv_get_string*() use check_for_string() to be
|
||||
more strict about the argument type (not a bool).
|
||||
done: balloon_()
|
||||
- Check many more builtin function arguments at compile time.
|
||||
map() could check that the return type of the function argument matches
|
||||
the type of the list or dict member. (#8092)
|
||||
- Allow for using an autoload function name without quotes. It is then loaded
|
||||
(and compiled) right away. #8124
|
||||
- Test more expressions in legacy and Vim9 script, using
|
||||
CheckLegacyAndVim9Success()
|
||||
Same for other functions, such as searchpair().
|
||||
- use CheckLegacyAndVim9Success(lines) in many more places
|
||||
- Test try/catch and throw better, also nested.
|
||||
Test that return inside try/finally jumps to finally and then returns.
|
||||
- Test that a function defined inside a :def function is local to that
|
||||
function, g: functions can be defined and script-local functions cannot be
|
||||
defined.
|
||||
- Make debugging work - at least per function. Need to recompile a function
|
||||
to step through it line-by-line? Evaluate the stack and variables on the
|
||||
stack?
|
||||
- Reserve command for future use: :type, :class, :enum
|
||||
- compile get_lambda_tv() in popup_add_timeout()
|
||||
|
||||
Once Vim9 is stable:
|
||||
- Add the "vim9script" feature, can use has('vim9script')
|
||||
- Change the help to prefer Vim9 syntax where appropriate
|
||||
- Add all the error numbers in a good place in documentation.
|
||||
- In the generic eval docs, point out the Vim9 syntax where it differs.
|
||||
- Add the "vim9script" feature, can use has('vim9script')
|
||||
- Use Vim9 for runtime files.
|
||||
PR #7497 for autoload/ccomplete.vim
|
||||
|
||||
@@ -100,13 +73,12 @@ Further Vim9 improvements, possibly after launch:
|
||||
Give an error if compilation fails. (#7625)
|
||||
Use the location where the option was set for deciding whether it's to be
|
||||
evaluated in Vim9 script context.
|
||||
- implement :type, import type declaration.
|
||||
- implement enum, import enum.
|
||||
- Future work: See |vim9-classes|
|
||||
- implement :type, "import type"
|
||||
- implement enum, "import enum".
|
||||
- implement class and interface: See |vim9-classes|
|
||||
- For range: make table of first ASCII character with flag to quickly check if
|
||||
it can be a Vim9 command. E.g. "+" can, but "." can't.
|
||||
- compile get_lambda_tv() in popup_add_timeout()
|
||||
- inline call to map() and filter()
|
||||
- Inline call to map() and filter(), better type checking.
|
||||
- Make accessing varargs faster: arg[expr]
|
||||
EVAL expr
|
||||
LOADVARARG (varargs idx)
|
||||
@@ -300,6 +272,9 @@ inconsistent with the documentation.
|
||||
Making breakat support multibyte characters (Yasuhiro Matsumoto, #6598)
|
||||
Scroll doesn't work correctly, why?
|
||||
|
||||
glob() and globfile() do not always honor 'wildignorecase'. #8350
|
||||
globpath() does not use 'wildignorecase' at all?
|
||||
|
||||
Add 'termguiattr' option, use "gui=" attributes in the terminal? Would work
|
||||
with 'termguicolors'. #1740
|
||||
|
||||
@@ -344,6 +319,9 @@ Should also work without any group:
|
||||
:echo matchstr('aaa bbb', '.\{-1,}\>\|.*')
|
||||
aaa bbb (should be aaa)
|
||||
|
||||
Should add a match/str/list/pos method that also returns the test and position
|
||||
of submatches. #8355
|
||||
|
||||
Check out PR #543 (Roland Puntaier).
|
||||
Patch for multibyte characters in langmap and applying a mapping on them.
|
||||
(Christian Brabandt, 2015 Jun 12, update July 25)
|
||||
@@ -380,6 +358,10 @@ work.
|
||||
Using "au!" after "filetype on" is a bit slow. Can the matching of
|
||||
autocommands be made faster? (#7056)
|
||||
|
||||
Append in Visual block mode inserts the wrong character.
|
||||
Test_visual_block_mode() already has the proper check, which is commented out.
|
||||
(#8288)
|
||||
|
||||
Add the <=> (spaceship) operator and "cond ?< expr ?= expr ?> expr"
|
||||
replace this:
|
||||
let left = GetLeftFunc()
|
||||
@@ -2263,9 +2245,6 @@ Win32: Improved Makefile for MSVC. (Leonardo Valeri Manera, 2010 Aug 18)
|
||||
|
||||
Win32: Expanding 'path' runs into a maximum size limit. (bgold12, 2009 Nov 15)
|
||||
|
||||
Win32: Patch for enabling quick edit mode in console. (Craig Barkhouse, 2010
|
||||
Sep 1)
|
||||
|
||||
Win32: Patch for using .png files for icons. (Charles Peacech, 2012 Feb 5)
|
||||
|
||||
Putting a Visual block while 'visualedit' is "all" does not leave the cursor
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
*usr_41.txt* For Vim version 8.2. Last change: 2021 Apr 19
|
||||
*usr_41.txt* For Vim version 8.2. Last change: 2021 Jun 07
|
||||
|
||||
VIM USER MANUAL - by Bram Moolenaar
|
||||
|
||||
|
||||
@@ -724,7 +724,7 @@ K Run a program to lookup the keyword under the
|
||||
feature}
|
||||
|
||||
*:sl!* *:sleep!*
|
||||
:[N]sl[eep]! [N] [m] Same as above, but hide the cursor.
|
||||
:[N]sl[eep]! [N][m] Same as above, but hide the cursor.
|
||||
|
||||
*:xrestore* *:xr*
|
||||
:xr[estore] [display] Reinitializes the connection to the X11 server. Useful
|
||||
|
||||
@@ -186,7 +186,7 @@ behave mostly like Vi, even though a .vimrc file exists.
|
||||
.TP
|
||||
\-d
|
||||
Start in diff mode.
|
||||
There should be two, three or four file name arguments.
|
||||
There should between two to eight file name arguments.
|
||||
.B Vim
|
||||
will open all the files and show differences between them.
|
||||
Works like vimdiff(1).
|
||||
|
||||
@@ -135,9 +135,9 @@ OPTIONS
|
||||
Vim behave mostly like Vi, even though a .vimrc file ex‐
|
||||
ists.
|
||||
|
||||
-d Start in diff mode. There should be two, three or four
|
||||
file name arguments. Vim will open all the files and show
|
||||
differences between them. Works like vimdiff(1).
|
||||
-d Start in diff mode. There should between two to eight file
|
||||
name arguments. Vim will open all the files and show dif‐
|
||||
ferences between them. Works like vimdiff(1).
|
||||
|
||||
-d {device} Open {device} for use as a terminal. Only on the Amiga.
|
||||
Example: "-d con:20/30/600/150".
|
||||
|
||||
@@ -457,7 +457,8 @@ which is similar to JavaScript: >
|
||||
var Lambda = (arg) => expression
|
||||
|
||||
No line break is allowed in the arguments of a lambda up to and including the
|
||||
"=>". This is OK: >
|
||||
"=>" (so that Vim can tell the difference between an expression in parenthesis
|
||||
and lambda arguments). This is OK: >
|
||||
filter(list, (k, v) =>
|
||||
v > 0)
|
||||
This does not work: >
|
||||
@@ -998,9 +999,14 @@ prefix if they do not exist at the time of compiling.
|
||||
Note that for command line completion of {func} you
|
||||
can prepend "s:" to find script-local functions.
|
||||
|
||||
:disa[ssemble]! {func} Like `:disassemble` but with the instructions used for
|
||||
:disa[ssemble] profile {func}
|
||||
Like `:disassemble` but with the instructions used for
|
||||
profiling.
|
||||
|
||||
:disa[ssemble] debug {func}
|
||||
Like `:disassemble` but with the instructions used for
|
||||
debugging.
|
||||
|
||||
Limitations ~
|
||||
|
||||
Local variables will not be visible to string evaluation. For example: >
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
.TH VIMDIFF 1 "2001 March 30"
|
||||
.SH NAME
|
||||
vimdiff \- edit two, three or four versions of a file with Vim and show differences
|
||||
vimdiff \- edit between two and eight versions of a file with Vim and show differences
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
.B vimdiff
|
||||
[options] file1 file2 [file3 [file4]]
|
||||
[options] file1 file2 [file3 [file4 [file5 [file6 [file7 [file8]]]]]]
|
||||
.PP
|
||||
.B gvimdiff
|
||||
.SH DESCRIPTION
|
||||
.B Vimdiff
|
||||
starts
|
||||
.B Vim
|
||||
on two (or three or four) files.
|
||||
on two up to eight files.
|
||||
Each file gets its own window.
|
||||
The differences between the files are highlighted.
|
||||
This is a nice way to inspect changes and to move changes from one version
|
||||
|
||||
@@ -1,27 +1,28 @@
|
||||
VIMDIFF(1) VIMDIFF(1)
|
||||
VIMDIFF(1) General Commands Manual VIMDIFF(1)
|
||||
|
||||
|
||||
|
||||
NAME
|
||||
vimdiff - edit two, three or four versions of a file with Vim and show
|
||||
differences
|
||||
vimdiff - edit between two and eight versions of a file with Vim and
|
||||
show differences
|
||||
|
||||
SYNOPSIS
|
||||
vimdiff [options] file1 file2 [file3 [file4]]
|
||||
vimdiff [options] file1 file2 [file3 [file4 [file5 [file6 [file7
|
||||
[file8]]]]]]
|
||||
|
||||
gvimdiff
|
||||
|
||||
DESCRIPTION
|
||||
Vimdiff starts Vim on two (or three or four) files. Each file gets its
|
||||
own window. The differences between the files are highlighted. This
|
||||
is a nice way to inspect changes and to move changes from one version
|
||||
to another version of the same file.
|
||||
Vimdiff starts Vim on two up to eight files. Each file gets its own
|
||||
window. The differences between the files are highlighted. This is a
|
||||
nice way to inspect changes and to move changes from one version to an‐
|
||||
other version of the same file.
|
||||
|
||||
See vim(1) for details about Vim itself.
|
||||
|
||||
When started as gvimdiff the GUI will be started, if available.
|
||||
|
||||
In each window the 'diff' option will be set, which causes the differ-
|
||||
In each window the 'diff' option will be set, which causes the differ‐
|
||||
ences to be highlighted.
|
||||
The 'wrap' and 'scrollbind' options are set to make the text look good.
|
||||
The 'foldmethod' option is set to "diff", which puts ranges of lines
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim support file to detect file types
|
||||
"
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2021 Apr 17
|
||||
" Last Change: 2021 Jun 13
|
||||
|
||||
" Listen very carefully, I will say this only once
|
||||
if exists("did_load_filetypes")
|
||||
@@ -855,6 +855,9 @@ au BufNewFile,BufRead *.jov,*.j73,*.jovial setf jovial
|
||||
" JSON
|
||||
au BufNewFile,BufRead *.json,*.jsonp,*.webmanifest setf json
|
||||
|
||||
" Jupyter Notebook is also json
|
||||
au BufNewFile,BufRead *.ipynb setf json
|
||||
|
||||
" Kixtart
|
||||
au BufNewFile,BufRead *.kix setf kix
|
||||
|
||||
|
||||
@@ -112,6 +112,7 @@ Icon[de]=gvim
|
||||
Icon[eo]=gvim
|
||||
Icon[fr]=gvim
|
||||
Icon[ru]=gvim
|
||||
Icon[sr]=gvim
|
||||
Icon=gvim
|
||||
Categories=Utility;TextEditor;
|
||||
StartupNotify=true
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
" Vim indent script for HTML
|
||||
" Maintainer: Bram Moolenaar
|
||||
" Original Author: Andy Wokula <anwoku@yahoo.de>
|
||||
" Last Change: 2021 Jan 26
|
||||
" Last Change: 2021 Jun 13
|
||||
" Version: 1.0 "{{{
|
||||
" Description: HTML indent script with cached state for faster indenting on a
|
||||
" range of lines.
|
||||
@@ -62,7 +62,7 @@ let s:tagname = '\w\+\(-\w\+\)*'
|
||||
" Prefer using buffer-local settings over global settings, so that there can
|
||||
" be defaults for all HTML files and exceptions for specific types of HTML
|
||||
" files.
|
||||
func! HtmlIndent_CheckUserSettings()
|
||||
func HtmlIndent_CheckUserSettings()
|
||||
"{{{
|
||||
let inctags = ''
|
||||
if exists("b:html_indent_inctags")
|
||||
@@ -178,7 +178,7 @@ let s:endtags = [0,0,0,0,0,0,0] " long enough for the highest index
|
||||
"}}}
|
||||
|
||||
" Add a list of tag names for a pair of <tag> </tag> to "tags".
|
||||
func! s:AddITags(tags, taglist)
|
||||
func s:AddITags(tags, taglist)
|
||||
"{{{
|
||||
for itag in a:taglist
|
||||
let a:tags[itag] = 1
|
||||
@@ -187,7 +187,7 @@ func! s:AddITags(tags, taglist)
|
||||
endfunc "}}}
|
||||
|
||||
" Take a list of tag name pairs that are not to be used as tag pairs.
|
||||
func! s:RemoveITags(tags, taglist)
|
||||
func s:RemoveITags(tags, taglist)
|
||||
"{{{
|
||||
for itag in a:taglist
|
||||
let a:tags[itag] = 1
|
||||
@@ -196,7 +196,7 @@ func! s:RemoveITags(tags, taglist)
|
||||
endfunc "}}}
|
||||
|
||||
" Add a block tag, that is a tag with a different kind of indenting.
|
||||
func! s:AddBlockTag(tag, id, ...)
|
||||
func s:AddBlockTag(tag, id, ...)
|
||||
"{{{
|
||||
if !(a:id >= 2 && a:id < len(s:endtags))
|
||||
echoerr 'AddBlockTag ' . a:id
|
||||
@@ -255,7 +255,7 @@ call s:AddBlockTag('<!--[', 6, '![endif]-->')
|
||||
" Return non-zero when "tagname" is an opening tag, not being a block tag, for
|
||||
" which there should be a closing tag. Can be used by scripts that include
|
||||
" HTML indenting.
|
||||
func! HtmlIndent_IsOpenTag(tagname)
|
||||
func HtmlIndent_IsOpenTag(tagname)
|
||||
"{{{
|
||||
if get(s:indent_tags, a:tagname) == 1
|
||||
return 1
|
||||
@@ -264,7 +264,7 @@ func! HtmlIndent_IsOpenTag(tagname)
|
||||
endfunc "}}}
|
||||
|
||||
" Get the value for "tagname", taking care of buffer-local tags.
|
||||
func! s:get_tag(tagname)
|
||||
func s:get_tag(tagname)
|
||||
"{{{
|
||||
let i = get(s:indent_tags, a:tagname)
|
||||
if (i == 1 || i == -1) && get(b:hi_removed_tags, a:tagname) != 0
|
||||
@@ -277,7 +277,7 @@ func! s:get_tag(tagname)
|
||||
endfunc "}}}
|
||||
|
||||
" Count the number of start and end tags in "text".
|
||||
func! s:CountITags(text)
|
||||
func s:CountITags(text)
|
||||
"{{{
|
||||
" Store the result in s:curind and s:nextrel.
|
||||
let s:curind = 0 " relative indent steps for current line [unit &sw]:
|
||||
@@ -289,7 +289,7 @@ func! s:CountITags(text)
|
||||
endfunc "}}}
|
||||
|
||||
" Count the number of start and end tags in text.
|
||||
func! s:CountTagsAndState(text)
|
||||
func s:CountTagsAndState(text)
|
||||
"{{{
|
||||
" Store the result in s:curind and s:nextrel. Update b:hi_newstate.block.
|
||||
let s:curind = 0 " relative indent steps for current line [unit &sw]:
|
||||
@@ -304,7 +304,7 @@ func! s:CountTagsAndState(text)
|
||||
endfunc "}}}
|
||||
|
||||
" Used by s:CountITags() and s:CountTagsAndState().
|
||||
func! s:CheckTag(itag)
|
||||
func s:CheckTag(itag)
|
||||
"{{{
|
||||
" Returns an empty string or "SCRIPT".
|
||||
" a:itag can be "tag" or "/tag" or "<!--" or "-->"
|
||||
@@ -338,7 +338,7 @@ func! s:CheckTag(itag)
|
||||
endfunc "}}}
|
||||
|
||||
" Used by s:CheckTag(). Returns an empty string or "SCRIPT".
|
||||
func! s:CheckBlockTag(blocktag, ind)
|
||||
func s:CheckBlockTag(blocktag, ind)
|
||||
"{{{
|
||||
if a:ind > 0
|
||||
" a block starts here
|
||||
@@ -366,7 +366,7 @@ func! s:CheckBlockTag(blocktag, ind)
|
||||
endfunc "}}}
|
||||
|
||||
" Used by s:CheckTag().
|
||||
func! s:CheckCustomTag(ctag)
|
||||
func s:CheckCustomTag(ctag)
|
||||
"{{{
|
||||
" Returns 1 if ctag is the tag for a custom element, 0 otherwise.
|
||||
" a:ctag can be "tag" or "/tag" or "<!--" or "-->"
|
||||
@@ -396,7 +396,7 @@ func! s:CheckCustomTag(ctag)
|
||||
endfunc "}}}
|
||||
|
||||
" Return the <script> type: either "javascript" or ""
|
||||
func! s:GetScriptType(str)
|
||||
func s:GetScriptType(str)
|
||||
"{{{
|
||||
if a:str == "" || a:str =~ "java"
|
||||
return "javascript"
|
||||
@@ -407,7 +407,7 @@ endfunc "}}}
|
||||
|
||||
" Look back in the file, starting at a:lnum - 1, to compute a state for the
|
||||
" start of line a:lnum. Return the new state.
|
||||
func! s:FreshState(lnum)
|
||||
func s:FreshState(lnum)
|
||||
"{{{
|
||||
" A state is to know ALL relevant details about the
|
||||
" lines 1..a:lnum-1, initial calculating (here!) can be slow, but updating is
|
||||
@@ -568,24 +568,29 @@ func! s:FreshState(lnum)
|
||||
endfunc "}}}
|
||||
|
||||
" Indent inside a <pre> block: Keep indent as-is.
|
||||
func! s:Alien2()
|
||||
func s:Alien2()
|
||||
"{{{
|
||||
return -1
|
||||
endfunc "}}}
|
||||
|
||||
" Return the indent inside a <script> block for javascript.
|
||||
func! s:Alien3()
|
||||
func s:Alien3()
|
||||
"{{{
|
||||
let lnum = prevnonblank(v:lnum - 1)
|
||||
while lnum > 1 && getline(lnum) =~ '^\s*/[/*]'
|
||||
" Skip over comments to avoid that cindent() aligns with the <script> tag
|
||||
let lnum = prevnonblank(lnum - 1)
|
||||
endwhile
|
||||
if lnum < b:hi_indent.blocklnr
|
||||
" indent for <script> itself
|
||||
return b:hi_indent.blocktagind
|
||||
endif
|
||||
if lnum == b:hi_indent.blocklnr
|
||||
" indent for the first line after <script>
|
||||
return eval(b:hi_js1indent)
|
||||
endif
|
||||
if b:hi_indent.scripttype == "javascript"
|
||||
" indent for further lines
|
||||
return eval(b:hi_js1indent) + GetJavascriptIndent()
|
||||
else
|
||||
return -1
|
||||
@@ -593,7 +598,7 @@ func! s:Alien3()
|
||||
endfunc "}}}
|
||||
|
||||
" Return the indent inside a <style> block.
|
||||
func! s:Alien4()
|
||||
func s:Alien4()
|
||||
"{{{
|
||||
if prevnonblank(v:lnum-1) == b:hi_indent.blocklnr
|
||||
" indent for first content line
|
||||
@@ -603,7 +608,7 @@ func! s:Alien4()
|
||||
endfunc "}}}
|
||||
|
||||
" Indending inside a <style> block. Returns the indent.
|
||||
func! s:CSSIndent()
|
||||
func s:CSSIndent()
|
||||
"{{{
|
||||
" This handles standard CSS and also Closure stylesheets where special lines
|
||||
" start with @.
|
||||
@@ -720,13 +725,13 @@ endfunc "}}}
|
||||
" tag: blah
|
||||
" tag: blah &&
|
||||
" tag: blah ||
|
||||
func! s:CssUnfinished(text)
|
||||
func s:CssUnfinished(text)
|
||||
"{{{
|
||||
return a:text =~ '\(||\|&&\|:\|\k\)\s*$'
|
||||
endfunc "}}}
|
||||
|
||||
" Search back for the first unfinished line above "lnum".
|
||||
func! s:CssFirstUnfinished(lnum, min_lnum)
|
||||
func s:CssFirstUnfinished(lnum, min_lnum)
|
||||
"{{{
|
||||
let align_lnum = a:lnum
|
||||
while align_lnum > a:min_lnum && s:CssUnfinished(getline(align_lnum - 1))
|
||||
@@ -736,7 +741,7 @@ func! s:CssFirstUnfinished(lnum, min_lnum)
|
||||
endfunc "}}}
|
||||
|
||||
" Find the non-empty line at or before "lnum" that is not a comment.
|
||||
func! s:CssPrevNonComment(lnum, stopline)
|
||||
func s:CssPrevNonComment(lnum, stopline)
|
||||
"{{{
|
||||
" caller starts from a line a:lnum + 1 that is not a comment
|
||||
let lnum = prevnonblank(a:lnum)
|
||||
@@ -761,7 +766,7 @@ func! s:CssPrevNonComment(lnum, stopline)
|
||||
endfunc "}}}
|
||||
|
||||
" Check the number of {} and () in line "lnum". Return a dict with the counts.
|
||||
func! HtmlIndent_CountBraces(lnum)
|
||||
func HtmlIndent_CountBraces(lnum)
|
||||
"{{{
|
||||
let brs = substitute(getline(a:lnum), '[''"].\{-}[''"]\|/\*.\{-}\*/\|/\*.*$\|[^{}()]', '', 'g')
|
||||
let c_open = 0
|
||||
@@ -794,7 +799,7 @@ func! HtmlIndent_CountBraces(lnum)
|
||||
endfunc "}}}
|
||||
|
||||
" Return the indent for a comment: <!-- -->
|
||||
func! s:Alien5()
|
||||
func s:Alien5()
|
||||
"{{{
|
||||
let curtext = getline(v:lnum)
|
||||
if curtext =~ '^\s*\zs-->'
|
||||
@@ -826,7 +831,7 @@ func! s:Alien5()
|
||||
endfunc "}}}
|
||||
|
||||
" Return the indent for conditional comment: <!--[ ![endif]-->
|
||||
func! s:Alien6()
|
||||
func s:Alien6()
|
||||
"{{{
|
||||
let curtext = getline(v:lnum)
|
||||
if curtext =~ '\s*\zs<!\[endif\]-->'
|
||||
@@ -840,7 +845,7 @@ func! s:Alien6()
|
||||
endfunc "}}}
|
||||
|
||||
" When the "lnum" line ends in ">" find the line containing the matching "<".
|
||||
func! HtmlIndent_FindTagStart(lnum)
|
||||
func HtmlIndent_FindTagStart(lnum)
|
||||
"{{{
|
||||
" Avoids using the indent of a continuation line.
|
||||
" Moves the cursor.
|
||||
@@ -863,7 +868,7 @@ func! HtmlIndent_FindTagStart(lnum)
|
||||
endfunc "}}}
|
||||
|
||||
" Find the unclosed start tag from the current cursor position.
|
||||
func! HtmlIndent_FindStartTag()
|
||||
func HtmlIndent_FindStartTag()
|
||||
"{{{
|
||||
" The cursor must be on or before a closing tag.
|
||||
" If found, positions the cursor at the match and returns the line number.
|
||||
@@ -877,7 +882,7 @@ func! HtmlIndent_FindStartTag()
|
||||
endfunc "}}}
|
||||
|
||||
" Moves the cursor from a "<" to the matching ">".
|
||||
func! HtmlIndent_FindTagEnd()
|
||||
func HtmlIndent_FindTagEnd()
|
||||
"{{{
|
||||
" Call this with the cursor on the "<" of a start tag.
|
||||
" This will move the cursor to the ">" of the matching end tag or, when it's
|
||||
@@ -897,7 +902,7 @@ func! HtmlIndent_FindTagEnd()
|
||||
endfunc "}}}
|
||||
|
||||
" Indenting inside a start tag. Return the correct indent or -1 if unknown.
|
||||
func! s:InsideTag(foundHtmlString)
|
||||
func s:InsideTag(foundHtmlString)
|
||||
"{{{
|
||||
if a:foundHtmlString
|
||||
" Inside an attribute string.
|
||||
@@ -958,7 +963,7 @@ func! s:InsideTag(foundHtmlString)
|
||||
endfunc "}}}
|
||||
|
||||
" THE MAIN INDENT FUNCTION. Return the amount of indent for v:lnum.
|
||||
func! HtmlIndent()
|
||||
func HtmlIndent()
|
||||
"{{{
|
||||
if prevnonblank(v:lnum - 1) < 1
|
||||
" First non-blank line has no indent.
|
||||
|
||||
85
runtime/syntax/gvpr.vim
Normal file
85
runtime/syntax/gvpr.vim
Normal file
@@ -0,0 +1,85 @@
|
||||
" Vim syntax file
|
||||
" Language: Graphviz program
|
||||
" Maintainer: Matthew Fernandez <matthew.fernandez@gmail.com>
|
||||
" Last Change: Tue, 28 Jul 2020 17:20:44 -0700
|
||||
|
||||
if exists("b:current_syntax")
|
||||
finish
|
||||
endif
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
|
||||
syn keyword gvArg ARGC ARGV
|
||||
syn keyword gvBeg BEGIN BEG_G N E END END_G
|
||||
syn keyword gvFunc
|
||||
\ graph fstsubg isDirect isStrict isSubg nEdges nNodes nxtsubg subg
|
||||
\ degreeOf fstnode indegreeOf isNode isSubnode node nxtnode nxtnode_sg
|
||||
\ outDegreeOf subnode
|
||||
\ edge edge_sg fstedge fstedge_sg fstin fstin_sg fstout fstout_sg isEdge
|
||||
\ isEdge_sg isSubedge nxtedge nxtedge_sg nxtin nxtin_sg nxtout nxtout_sg opp
|
||||
\ subedge
|
||||
\ freadG fwriteG readG write[] writeG
|
||||
\ aget aset clone cloneG compOf copy[] copyA delete[] fstAttr getDflt hasAttr
|
||||
\ induce isAttr isIn kindOf lock[] nxtAttr setDflt
|
||||
\ canon gsub html index ishtml length llOf match[] rindex split[] sprintf
|
||||
\ sscanf strcmp sub substr tokens tolower toupper urOf xOf yOf
|
||||
\ closeF openF print[] printf scanf readL
|
||||
\ atan2 cos exp log MAX MIN pow sin[] sqrt
|
||||
\ in[] unset
|
||||
\ colorx exit[] rand srand system
|
||||
syn keyword gvCons
|
||||
\ NULL TV_bfs TV_dfs TV_en TV_flat TV_fwd TV_ne TV_prepostdfs TV_prepostfwd
|
||||
\ TV_prepostrev TV_postdfs TV_postfwd tv_postrev TV_rev
|
||||
syn keyword gvType char double float int long unsigned void
|
||||
\ string
|
||||
\ edge_t graph_t node_t obj_t
|
||||
syn match gvVar
|
||||
\ "\$\(\(F\|G\|NG\|O\|T\|tgtname\|tvedge\|tvnext\|tvroot\|tvtype\)\>\)\?\(\<\)\@!"
|
||||
syn keyword gvWord break continue else for forr if return switch while
|
||||
|
||||
" numbers adapted from c.vim's cNumbers and friends
|
||||
syn match gvNums transparent "\<\d\|\.\d" contains=gvNumber,gvFloat,gvOctal
|
||||
syn match gvNumber contained "\d\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||||
syn match gvNumber contained "0x\x\+\(u\=l\{0,2}\|ll\=u\)\>"
|
||||
syn match gvOctal contained "0\o\+\(u\=l\{0,2}\|ll\=u\)\>" contains=gvOctalZero
|
||||
syn match gvOctalZero contained "\<0"
|
||||
syn match gvFloat contained "\d\+f"
|
||||
syn match gvFloat contained "\d\+\.\d*\(e[-+]\=\d\+\)\=[fl]\="
|
||||
syn match gvFloat contained "\.\d\+\(e[-+]\=\d\+\)\=[fl]\=\>"
|
||||
syn match gvFloat contained "\d\+e[-+]\=\d\+[fl]\=\>"
|
||||
|
||||
syn region gvString start=+"+ skip=+\\\\\|\\"+ end=+"+ contains=gvFormat,gvSpecial extend
|
||||
syn region gvString start="'" skip="\\\\\|\\'" end="'" contains=gvFormat,gvSpecial extend
|
||||
|
||||
" adapted from c.vim's cFormat for c_no_c99
|
||||
syn match gvFormat "%\(\d\+\$\)\=[-+' #0*]*\(\d*\|\*\|\*\d\+\$\)\(\.\(\d*\|\*\|\*\d\+\$\)\)\=\([hlL]\|ll\)\=\([bdiuoxXDOUfeEgGcCsSpn]\|\[\^\=.[^]]*\]\)" contained
|
||||
|
||||
syn match gvSpecial "\\." contained
|
||||
|
||||
syn region gvCComment start="//" skip="\\$" end="$" keepend
|
||||
syn region gvCPPComment start="#" skip="\\$" end="$" keepend
|
||||
syn region gvCXXComment start="/\*" end="\*/" fold
|
||||
|
||||
hi def link gvArg Identifier
|
||||
hi def link gvBeg Keyword
|
||||
hi def link gvFloat Number
|
||||
hi def link gvFunc Identifier
|
||||
hi def link gvCons Number
|
||||
hi def link gvNumber Number
|
||||
hi def link gvType Type
|
||||
hi def link gvVar Statement
|
||||
hi def link gvWord Keyword
|
||||
|
||||
hi def link gvString String
|
||||
hi def link gvFormat Special
|
||||
hi def link gvSpecial Special
|
||||
|
||||
hi def link gvCComment Comment
|
||||
hi def link gvCPPComment Comment
|
||||
hi def link gvCXXComment Comment
|
||||
|
||||
let b:current_syntax = "gvpr"
|
||||
|
||||
let &cpo = s:cpo_save
|
||||
unlet s:cpo_save
|
||||
@@ -112,6 +112,7 @@ Icon[de]=gvim
|
||||
Icon[eo]=gvim
|
||||
Icon[fr]=gvim
|
||||
Icon[ru]=gvim
|
||||
Icon[sr]=gvim
|
||||
Icon=gvim
|
||||
Categories=Utility;TextEditor;
|
||||
StartupNotify=false
|
||||
|
||||
@@ -284,7 +284,8 @@ open the window from the start menu, MSYS2 64 bit / MSYS2 MSYS.
|
||||
Execute:
|
||||
$ pacman -Syu
|
||||
|
||||
And restart MSYS2 console (select "MSYS2 MSYS" icon from the Start Menu).
|
||||
And restart MSYS2 console (select "MSYS2 MSYS 32-Bit" icon from the Start
|
||||
Menu for building 32 bit Vim, otherwise select "MSYS2 MinGW 64-Bit").
|
||||
Then execute:
|
||||
$ pacman -Su
|
||||
|
||||
|
||||
@@ -1370,6 +1370,8 @@ set_one_cmd_context(
|
||||
case CMD_verbose:
|
||||
case CMD_vertical:
|
||||
case CMD_windo:
|
||||
case CMD_vim9cmd:
|
||||
case CMD_legacy:
|
||||
return arg;
|
||||
|
||||
case CMD_filter:
|
||||
@@ -1555,10 +1557,12 @@ set_one_cmd_context(
|
||||
|
||||
case CMD_function:
|
||||
case CMD_delfunction:
|
||||
case CMD_disassemble:
|
||||
xp->xp_context = EXPAND_USER_FUNC;
|
||||
xp->xp_pattern = arg;
|
||||
break;
|
||||
case CMD_disassemble:
|
||||
set_context_in_disassemble_cmd(xp, arg);
|
||||
break;
|
||||
|
||||
case CMD_echohl:
|
||||
set_context_in_echohl_cmd(xp, arg);
|
||||
@@ -2118,6 +2122,7 @@ ExpandFromContext(
|
||||
{EXPAND_USER_VARS, get_user_var_name, FALSE, TRUE},
|
||||
{EXPAND_FUNCTIONS, get_function_name, FALSE, TRUE},
|
||||
{EXPAND_USER_FUNC, get_user_func_name, FALSE, TRUE},
|
||||
{EXPAND_DISASSEMBLE, get_disassemble_argument, FALSE, TRUE},
|
||||
{EXPAND_EXPRESSION, get_expr_name, FALSE, TRUE},
|
||||
# endif
|
||||
# ifdef FEAT_MENU
|
||||
|
||||
@@ -218,7 +218,7 @@ do_debug(char_u *cmd)
|
||||
|
||||
if (last_cmd != 0)
|
||||
{
|
||||
// Execute debug command: decided where to break next and
|
||||
// Execute debug command: decide where to break next and
|
||||
// return.
|
||||
switch (last_cmd)
|
||||
{
|
||||
|
||||
@@ -2571,13 +2571,17 @@ eval_variable(
|
||||
cc = name[len];
|
||||
name[len] = NUL;
|
||||
|
||||
// Check for user-defined variables.
|
||||
v = find_var(name, NULL, flags & EVAL_VAR_NOAUTOLOAD);
|
||||
if (v != NULL)
|
||||
// Check for local variable when debugging.
|
||||
if ((tv = lookup_debug_var(name)) == NULL)
|
||||
{
|
||||
tv = &v->di_tv;
|
||||
if (dip != NULL)
|
||||
*dip = v;
|
||||
// Check for user-defined variables.
|
||||
v = find_var(name, NULL, flags & EVAL_VAR_NOAUTOLOAD);
|
||||
if (v != NULL)
|
||||
{
|
||||
tv = &v->di_tv;
|
||||
if (dip != NULL)
|
||||
*dip = v;
|
||||
}
|
||||
}
|
||||
|
||||
if (tv == NULL && (in_vim9script() || STRNCMP(name, "s:", 2) == 0))
|
||||
|
||||
@@ -253,6 +253,9 @@ addEventHandler(GtkWidget *target, BalloonEval *beval)
|
||||
if (gtk_socket_id == 0 && gui.mainwin != NULL
|
||||
&& gtk_widget_is_ancestor(target, gui.mainwin))
|
||||
{
|
||||
gtk_widget_add_events(gui.mainwin,
|
||||
GDK_LEAVE_NOTIFY_MASK);
|
||||
|
||||
g_signal_connect(G_OBJECT(gui.mainwin), "event",
|
||||
G_CALLBACK(mainwin_event_cb),
|
||||
beval);
|
||||
@@ -360,6 +363,12 @@ mainwin_event_cb(GtkWidget *widget UNUSED, GdkEvent *event, gpointer data)
|
||||
case GDK_KEY_RELEASE:
|
||||
key_event(beval, event->key.keyval, FALSE);
|
||||
break;
|
||||
case GDK_LEAVE_NOTIFY:
|
||||
// Ignore LeaveNotify events that are not "normal".
|
||||
// Apparently we also get it when somebody else grabs focus.
|
||||
if (event->crossing.mode == GDK_CROSSING_NORMAL)
|
||||
cancelBalloon(beval);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -184,6 +184,9 @@ typedef PySliceObject PySliceObject_T;
|
||||
# ifndef PyMapping_Keys
|
||||
# define PyMapping_Keys py3_PyMapping_Keys
|
||||
# endif
|
||||
# if PY_VERSION_HEX >= 0x030a00b2
|
||||
# define PyIter_Check py3_PyIter_Check
|
||||
# endif
|
||||
# define PyIter_Next py3_PyIter_Next
|
||||
# define PyObject_GetIter py3_PyObject_GetIter
|
||||
# define PyObject_Repr py3_PyObject_Repr
|
||||
@@ -358,6 +361,9 @@ static PyObject* (*py3_PyDict_GetItemString)(PyObject *, const char *);
|
||||
static int (*py3_PyDict_Next)(PyObject *, Py_ssize_t *, PyObject **, PyObject **);
|
||||
static PyObject* (*py3_PyLong_FromLong)(long);
|
||||
static PyObject* (*py3_PyDict_New)(void);
|
||||
# if PY_VERSION_HEX >= 0x030a00b2
|
||||
static int (*py3_PyIter_Check)(PyObject *o);
|
||||
# endif
|
||||
static PyObject* (*py3_PyIter_Next)(PyObject *);
|
||||
static PyObject* (*py3_PyObject_GetIter)(PyObject *);
|
||||
static PyObject* (*py3_PyObject_Repr)(PyObject *);
|
||||
@@ -538,6 +544,9 @@ static struct
|
||||
{"PyDict_Next", (PYTHON_PROC*)&py3_PyDict_Next},
|
||||
{"PyMapping_Check", (PYTHON_PROC*)&py3_PyMapping_Check},
|
||||
{"PyMapping_Keys", (PYTHON_PROC*)&py3_PyMapping_Keys},
|
||||
# if PY_VERSION_HEX >= 0x030a00b2
|
||||
{"PyIter_Check", (PYTHON_PROC*)&py3_PyIter_Check},
|
||||
# endif
|
||||
{"PyIter_Next", (PYTHON_PROC*)&py3_PyIter_Next},
|
||||
{"PyObject_GetIter", (PYTHON_PROC*)&py3_PyObject_GetIter},
|
||||
{"PyObject_Repr", (PYTHON_PROC*)&py3_PyObject_Repr},
|
||||
@@ -671,6 +680,15 @@ py3_PyType_HasFeature(PyTypeObject *type, unsigned long feature)
|
||||
# define PyType_HasFeature(t,f) py3_PyType_HasFeature(t,f)
|
||||
# endif
|
||||
|
||||
# if PY_VERSION_HEX >= 0x030a00b2
|
||||
static inline int
|
||||
py3__PyObject_TypeCheck(PyObject *ob, PyTypeObject *type)
|
||||
{
|
||||
return Py_IS_TYPE(ob, type) || PyType_IsSubtype(Py_TYPE(ob), type);
|
||||
}
|
||||
# define _PyObject_TypeCheck(o,t) py3__PyObject_TypeCheck(o,t)
|
||||
# endif
|
||||
|
||||
# ifdef MSWIN
|
||||
/*
|
||||
* Look up the library "libname" using the InstallPath registry key.
|
||||
|
||||
@@ -1531,7 +1531,7 @@ tclsetdelcmd(
|
||||
reflist = reflist->next;
|
||||
}
|
||||
// This should never happen. Famous last word?
|
||||
emsg(_("E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"));
|
||||
iemsg(_("E280: TCL FATAL ERROR: reflist corrupt!? Please report this to vim-dev@vim.org"));
|
||||
Tcl_SetResult(interp, _("cannot register callback command: buffer/window reference not found"), TCL_STATIC);
|
||||
return TCL_ERROR;
|
||||
}
|
||||
|
||||
@@ -733,8 +733,7 @@ codepage_invalid:
|
||||
|
||||
// When using Unicode, set default for 'fileencodings'.
|
||||
if (enc_utf8 && !option_was_set((char_u *)"fencs"))
|
||||
set_string_option_direct((char_u *)"fencs", -1,
|
||||
(char_u *)"ucs-bom,utf-8,default,latin1", OPT_FREE, 0);
|
||||
set_fencs_unicode();
|
||||
|
||||
#if defined(HAVE_BIND_TEXTDOMAIN_CODESET) && defined(FEAT_GETTEXT)
|
||||
// GNU gettext 0.10.37 supports this feature: set the codeset used for
|
||||
|
||||
20
src/option.c
20
src/option.c
@@ -535,6 +535,19 @@ set_init_1(int clean_arg)
|
||||
#endif
|
||||
}
|
||||
|
||||
static char_u *fencs_utf8_default = (char_u *)"ucs-bom,utf-8,default,latin1";
|
||||
|
||||
/*
|
||||
* Set the "fileencodings" option to the default value for when 'encoding' is
|
||||
* utf-8.
|
||||
*/
|
||||
void
|
||||
set_fencs_unicode()
|
||||
{
|
||||
set_string_option_direct((char_u *)"fencs", -1, fencs_utf8_default,
|
||||
OPT_FREE, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set an option to its default value.
|
||||
* This does not take care of side effects!
|
||||
@@ -558,9 +571,12 @@ set_option_default(
|
||||
dvi = ((flags & P_VI_DEF) || compatible) ? VI_DEFAULT : VIM_DEFAULT;
|
||||
if (flags & P_STRING)
|
||||
{
|
||||
// 'fencs' default value depends on 'encoding'
|
||||
if (options[opt_idx].var == (char_u *)&p_fencs && enc_utf8)
|
||||
set_fencs_unicode();
|
||||
// Use set_string_option_direct() for local options to handle
|
||||
// freeing and allocating the value.
|
||||
if (options[opt_idx].indir != PV_NONE)
|
||||
else if (options[opt_idx].indir != PV_NONE)
|
||||
set_string_option_direct(NULL, opt_idx,
|
||||
options[opt_idx].def_val[dvi], opt_flags, 0);
|
||||
else
|
||||
@@ -1684,6 +1700,8 @@ do_set(
|
||||
#endif
|
||||
newval = term_bg_default();
|
||||
}
|
||||
else if ((char_u **)varp == &p_fencs && enc_utf8)
|
||||
newval = fencs_utf8_default;
|
||||
|
||||
// expand environment variables and ~ (since the
|
||||
// default value was already expanded, only
|
||||
|
||||
221
src/po/sr.po
221
src/po/sr.po
@@ -2,7 +2,7 @@
|
||||
#
|
||||
# Do ":help uganda" in Vim to read copying and usage conditions.
|
||||
# Do ":help credits" in Vim to see a list of people who contributed.
|
||||
# Copyright (C) 2017
|
||||
# Copyright (C) 2021
|
||||
# This file is distributed under the same license as the Vim package.
|
||||
# FIRST AUTHOR Ivan Pešić <ivan.pesic@gmail.com>, 2017.
|
||||
#
|
||||
@@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Vim(Serbian)\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-02-14 01:49+0400\n"
|
||||
"PO-Revision-Date: 2021-02-14 01:54+0400\n"
|
||||
"POT-Creation-Date: 2021-06-13 13:16+0400\n"
|
||||
"PO-Revision-Date: 2021-06-13 13:50+0400\n"
|
||||
"Last-Translator: Ivan Pešić <ivan.pesic@gmail.com>\n"
|
||||
"Language-Team: Serbian\n"
|
||||
"Language: sr\n"
|
||||
@@ -97,6 +97,9 @@ msgstr "Извршавање %s"
|
||||
msgid "autocommand %s"
|
||||
msgstr "аутокоманда %s"
|
||||
|
||||
msgid "E972: Blob value does not have the right number of bytes"
|
||||
msgstr "E972: Блоб вредност нема одговарајући број бајтова"
|
||||
|
||||
msgid "E831: bf_key_init() called with empty password"
|
||||
msgstr "E831: bf_key_init() је позвана са празном лозинком"
|
||||
|
||||
@@ -731,9 +734,6 @@ msgstr "E708: [:] мора да буде последња"
|
||||
msgid "E709: [:] requires a List or Blob value"
|
||||
msgstr "E709: [:] захтева вредност типа Листа или Блоб"
|
||||
|
||||
msgid "E972: Blob value does not have the right number of bytes"
|
||||
msgstr "E972: Блоб вредност нема одговарајући број бајтова"
|
||||
|
||||
msgid "E996: Cannot lock a range"
|
||||
msgstr "E996: Опсег не може да се закључа"
|
||||
|
||||
@@ -763,9 +763,6 @@ msgstr ""
|
||||
"\n"
|
||||
"\tПоследње постављено из "
|
||||
|
||||
msgid "E808: Number or Float required"
|
||||
msgstr "E808: Захтева се Број или Покретни"
|
||||
|
||||
#, c-format
|
||||
msgid "E158: Invalid buffer name: %s"
|
||||
msgstr "E158: Неисправно име бафера: %s"
|
||||
@@ -932,6 +929,10 @@ msgstr "E135: *Филтер* Аутокоманде не смеју да мењ
|
||||
msgid "[No write since last change]\n"
|
||||
msgstr "[Нема уписа од последње промене]\n"
|
||||
|
||||
#, c-format
|
||||
msgid "E503: \"%s\" is not a file or writable device"
|
||||
msgstr "E503: „%s” није фајл или уређај на који може да се уписује"
|
||||
|
||||
msgid "Save As"
|
||||
msgstr "Сачувај као"
|
||||
|
||||
@@ -1594,6 +1595,9 @@ msgstr "E446: Под курсором се не налази име фајла"
|
||||
msgid "E447: Can't find file \"%s\" in path"
|
||||
msgstr "E447: Фајл \"%s\" не може да се пронађе у путањи"
|
||||
|
||||
msgid "E808: Number or Float required"
|
||||
msgstr "E808: Захтева се Број или Покретни"
|
||||
|
||||
msgid "E490: No fold found"
|
||||
msgstr "E490: Није пронађен ниједан свијутак"
|
||||
|
||||
@@ -4069,12 +4073,12 @@ msgstr "E531: Користите \":gui\" да покренете ГКИ"
|
||||
msgid "E589: 'backupext' and 'patchmode' are equal"
|
||||
msgstr "E589: 'backupext' и 'patchmode' су истоветни"
|
||||
|
||||
msgid "E834: Conflicts with value of 'listchars'"
|
||||
msgstr "E834: У конфликту са вредношћу 'listchars'"
|
||||
|
||||
msgid "E835: Conflicts with value of 'fillchars'"
|
||||
msgstr "E835: У конфликту са вредношћу 'fillchars'"
|
||||
|
||||
msgid "E834: Conflicts with value of 'listchars'"
|
||||
msgstr "E834: У конфликту са вредношћу 'listchars'"
|
||||
|
||||
msgid "E617: Cannot be changed in the GTK+ 2 GUI"
|
||||
msgstr "E617: Не може да се промени у GTK+ 2 ГКИ"
|
||||
|
||||
@@ -4513,7 +4517,7 @@ msgstr "E554: Синтаксна грешка у %s{...}"
|
||||
|
||||
#, c-format
|
||||
msgid "E888: (NFA regexp) cannot repeat %s"
|
||||
msgstr "E888: (НКА регизраз) не може да се понови %s"
|
||||
msgstr "E888: (НКА регуларни израз) не може да се понови %s"
|
||||
|
||||
msgid ""
|
||||
"E864: \\%#= can only be followed by 0, 1, or 2. The automatic engine will be "
|
||||
@@ -4579,15 +4583,15 @@ msgid "External submatches:\n"
|
||||
msgstr "Спољна подподударања:\n"
|
||||
|
||||
msgid "E865: (NFA) Regexp end encountered prematurely"
|
||||
msgstr "E865: (НКА) прерано је достигнут крај регизраза"
|
||||
msgstr "E865: (НКА) прерано је достигнут крај регуларног израза"
|
||||
|
||||
#, c-format
|
||||
msgid "E866: (NFA regexp) Misplaced %c"
|
||||
msgstr "E866: (НКА регизраз) %c је на погрешном месту"
|
||||
msgstr "E866: (НКА регуларни израз) %c је на погрешном месту"
|
||||
|
||||
#, c-format
|
||||
msgid "E877: (NFA regexp) Invalid character class: %d"
|
||||
msgstr "E877: (НКА регизраз) Неважећа карактер класа: %d"
|
||||
msgstr "E877: (НКА регуларни израз) Неважећа карактер класа: %d"
|
||||
|
||||
msgid "E951: \\% value too large"
|
||||
msgstr "E951: Вредност \\% је предугачка"
|
||||
@@ -4608,19 +4612,19 @@ msgid "E869: (NFA) Unknown operator '\\@%c'"
|
||||
msgstr "E869: (НКА) Непознати оператор '\\@%c'"
|
||||
|
||||
msgid "E870: (NFA regexp) Error reading repetition limits"
|
||||
msgstr "E870: (НКА регизраз) Грешка при читању граница понављања"
|
||||
msgstr "E870: (НКА регуларни израз) Грешка при читању граница понављања"
|
||||
|
||||
msgid "E871: (NFA regexp) Can't have a multi follow a multi"
|
||||
msgstr "E871: (НКА регизраз) Мулти не може следи иза мулти"
|
||||
msgstr "E871: (НКА регуларни израз) Мулти не може следи иза мулти"
|
||||
|
||||
msgid "E872: (NFA regexp) Too many '('"
|
||||
msgstr "E872: (НКА регизраз) Превише '('"
|
||||
msgstr "E872: (НКА регуларни израз) Превише '('"
|
||||
|
||||
msgid "E879: (NFA regexp) Too many \\z("
|
||||
msgstr "E879: (НКА регизраз) Превише \\z("
|
||||
msgstr "E879: (НКА регуларни израз) Превише \\z("
|
||||
|
||||
msgid "E873: (NFA regexp) proper termination error"
|
||||
msgstr "E873: (НКА регизраз) грешка правилне терминације"
|
||||
msgstr "E873: (НКА регуларни израз) грешка правилне терминације"
|
||||
|
||||
msgid "Could not open temporary log file for writing, displaying on stderr... "
|
||||
msgstr ""
|
||||
@@ -4634,12 +4638,12 @@ msgid ""
|
||||
"E875: (NFA regexp) (While converting from postfix to NFA), too many states "
|
||||
"left on stack"
|
||||
msgstr ""
|
||||
"E875: (НКА регизраз) (Док је вршена конверзија из постфикног облика у НКА), "
|
||||
"E875: (НКА регуларни израз) (Док је вршена конверзија из постфикног облика у НКА), "
|
||||
"превише стања је остало на стеку"
|
||||
|
||||
msgid "E876: (NFA regexp) Not enough space to store the whole NFA "
|
||||
msgstr ""
|
||||
"E876: (НКА регизраз) Нема довољно простора да се ускладишти комплетан НКА "
|
||||
"E876: (НКА регуларни израз) Нема довољно простора да се ускладишти комплетан НКА "
|
||||
|
||||
msgid "E878: (NFA) Could not allocate memory for branch traversal!"
|
||||
msgstr "E878: (НКА) Није могла да се алоцира меморија за обилазак грана!"
|
||||
@@ -6027,6 +6031,13 @@ msgstr "E853: Име аргумента је дуплирано: %s"
|
||||
msgid "E989: Non-default argument follows default argument"
|
||||
msgstr "E989: Неподразумевани аргумент следи иза подразумеваног аргумента"
|
||||
|
||||
msgid "E126: Missing :endfunction"
|
||||
msgstr "E126: Недостаје :endfunction"
|
||||
|
||||
#, c-format
|
||||
msgid "W22: Text found after :endfunction: %s"
|
||||
msgstr "W22: Пронађен текст након :endfunction: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E451: Expected }: %s"
|
||||
msgstr "E451: Очекује се }: %s"
|
||||
@@ -6102,17 +6113,6 @@ msgstr "E862: Овде не може да се користи g:"
|
||||
msgid "E932: Closure function should not be at top level: %s"
|
||||
msgstr "E932: Затварајућа функција не би требало да буде на највишем нивоу: %s"
|
||||
|
||||
msgid "E126: Missing :endfunction"
|
||||
msgstr "E126: Недостаје :endfunction"
|
||||
|
||||
#, c-format
|
||||
msgid "W1001: Text found after :enddef: %s"
|
||||
msgstr "W1001: Пронађен је текст након :enddef: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "W22: Text found after :endfunction: %s"
|
||||
msgstr "W22: Пронађен текст након :endfunction: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E707: Function name conflicts with variable: %s"
|
||||
msgstr "E707: Име функције је у конфликту са променљивом: %s"
|
||||
@@ -6635,25 +6635,25 @@ msgid "E366: Not allowed to enter a popup window"
|
||||
msgstr "E366: Није дозвољено да се уђе у искачући прозор"
|
||||
|
||||
msgid "Edit with &multiple Vims"
|
||||
msgstr "Уређуј са &више Vim-ова"
|
||||
msgstr "Уређуј са &више Vim програма"
|
||||
|
||||
msgid "Edit with single &Vim"
|
||||
msgstr "Уређуј са једним &Vim-ом"
|
||||
msgstr "Уређуј са једним програмом &Vim"
|
||||
|
||||
msgid "Diff with Vim"
|
||||
msgstr "Diff са Vim"
|
||||
msgstr "Diff са програмом Vim"
|
||||
|
||||
msgid "Edit with &Vim"
|
||||
msgstr "Уређуј са &Vim-ом"
|
||||
msgstr "Уређуј са програмом &Vim"
|
||||
|
||||
msgid "Edit with existing Vim"
|
||||
msgstr "Уређуј са постојећим Vim-ом"
|
||||
msgstr "Уређуј са постојећим програмом Vim"
|
||||
|
||||
msgid "Edit with existing Vim - "
|
||||
msgstr "Уређуј са постојећим Vim - "
|
||||
msgstr "Уређуј са постојећим програмом Vim - "
|
||||
|
||||
msgid "Edits the selected file(s) with Vim"
|
||||
msgstr "Уређује селектован(е) фајл(ове) са Vim-ом"
|
||||
msgstr "Уређује селектован(е) фајл(ове) програмом Vim"
|
||||
|
||||
msgid "Error creating process: Check if gvim is in your path!"
|
||||
msgstr ""
|
||||
@@ -6699,6 +6699,10 @@ msgstr ""
|
||||
"E856: \"assert_fails()\" други аргумент мора бити стринг или листа са једним "
|
||||
"или два стринга"
|
||||
|
||||
#, c-format
|
||||
msgid "E908: using an invalid value as a String: %s"
|
||||
msgstr "E908: Користи се неважећа вредност као Стринг: %s"
|
||||
|
||||
msgid "E909: Cannot index a special variable"
|
||||
msgstr "E909: Специјална променљива не може да се индексира"
|
||||
|
||||
@@ -7188,8 +7192,8 @@ msgid "E1143: Empty expression: \"%s\""
|
||||
msgstr "E1143: Празан израз: \"%s\""
|
||||
|
||||
#, c-format
|
||||
msgid "E1144: Command is not followed by white space: %s"
|
||||
msgstr "E1144: Иза команде се не налази празан простор: %s"
|
||||
msgid "E1144: Command \"%s\" is not followed by white space: %s"
|
||||
msgstr "E1144: Иза команде „%s” се не налази празан простор: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E1145: Missing heredoc end marker: %s"
|
||||
@@ -7242,7 +7246,8 @@ msgid "E1159: Cannot split a window when closing the buffer"
|
||||
msgstr "E1159: Прозор не може да се подели када се затвара бафер"
|
||||
|
||||
msgid "E1160: Cannot use a default for variable arguments"
|
||||
msgstr "E1160: За аргументе променљиве не може да се користи подразумевана вредност"
|
||||
msgstr ""
|
||||
"E1160: За аргументе променљиве не може да се користи подразумевана вредност"
|
||||
|
||||
#, c-format
|
||||
msgid "E1161: Cannot json encode a %s"
|
||||
@@ -7254,7 +7259,116 @@ msgstr "E1162: Име регистра мора бити један каракт
|
||||
|
||||
#, c-format
|
||||
msgid "E1163: Variable %d: type mismatch, expected %s but got %s"
|
||||
msgstr "E1163: Променљива %d: неодговарајући тип, очекује се %s али је наведено %s"
|
||||
msgstr ""
|
||||
"E1163: Променљива %d: неодговарајући тип, очекује се %s али је наведено %s"
|
||||
|
||||
msgid "E1164: vim9cmd must be followed by a command"
|
||||
msgstr "E1164: Иза vim9cmd мора да следи команда"
|
||||
|
||||
#, c-format
|
||||
msgid "E1165: Cannot use a range with an assignment: %s"
|
||||
msgstr "E1165: Опсег не може да се користи са доделом: %s"
|
||||
|
||||
msgid "E1166: Cannot use a range with a dictionary"
|
||||
msgstr "E1166: Опсег не може да се користи са речником"
|
||||
|
||||
#, c-format
|
||||
msgid "E1167: Argument name shadows existing variable: %s"
|
||||
msgstr "E1167: Име аргумента заклања постојећу променљиву: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E1168: Argument already declared in the script: %s"
|
||||
msgstr "E1168: Аргумент је већ декларисан у скрипти: %s"
|
||||
|
||||
msgid "E1169: 'import * as {name}' not supported here"
|
||||
msgstr "E1169: Овде се не подржава 'import * as {име}'"
|
||||
|
||||
msgid "E1170: Cannot use #{ to start a comment"
|
||||
msgstr "E1170: #{ не може да се користи за почетак коментара"
|
||||
|
||||
msgid "E1171: Missing } after inline function"
|
||||
msgstr "E1171: Након inline функције недостаје }"
|
||||
|
||||
msgid "E1172: Cannot use default values in a lambda"
|
||||
msgstr "E1172: Није могућа употреба подразумеваних вредности у ламбди"
|
||||
|
||||
#, c-format
|
||||
msgid "E1173: Text found after enddef: %s"
|
||||
msgstr "E1173: Пронађен је текст након enddef: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E1174: String required for argument %d"
|
||||
msgstr "E1174: Неопходан је стринг за аргумент %d"
|
||||
|
||||
#, c-format
|
||||
msgid "E1175: Non-empty string required for argument %d"
|
||||
msgstr "E1175: Неопходан је непразни стринг за аргумент %d"
|
||||
|
||||
msgid "E1176: Misplaced command modifier"
|
||||
msgstr "E1176: Модификатор команде није на одговарајућем месту"
|
||||
|
||||
#, c-format
|
||||
msgid "E1177: For loop on %s not supported"
|
||||
msgstr "E1177: Не подржава се for петља над %s"
|
||||
|
||||
msgid "E1178: Cannot lock or unlock a local variable"
|
||||
msgstr "E1178: Локална променљива не може да се закључа или откључа"
|
||||
|
||||
#, c-format
|
||||
msgid ""
|
||||
"E1179: Failed to extract PWD from %s, check your shell's config related to "
|
||||
"OSC 7"
|
||||
msgstr ""
|
||||
"E1179: Није успело издвајање PWD из %s, проверите подешавање командног окружења "
|
||||
"које се тиче OSC 7"
|
||||
|
||||
#, c-format
|
||||
msgid "E1180: Variable arguments type must be a list: %s"
|
||||
msgstr "E1180: Тип променљивих аргумената мора бити листа: %s"
|
||||
|
||||
msgid "E1181: Cannot use an underscore here"
|
||||
msgstr "E1181: Овде не може да се користи доња црта"
|
||||
|
||||
msgid "E1182: Blob required"
|
||||
msgstr "E1182: Потребан је Блоб"
|
||||
|
||||
#, c-format
|
||||
msgid "E1183: Cannot use a range with an assignment operator: %s"
|
||||
msgstr "E1183: Опсег не може да се користи са оператором доделе: %s"
|
||||
|
||||
msgid "E1184: Blob not set"
|
||||
msgstr "E1184: Blob није постављен"
|
||||
|
||||
msgid "E1185: Cannot nest :redir"
|
||||
msgstr "E1185: :redir не може да се угњеждава"
|
||||
|
||||
msgid "E1185: Missing :redir END"
|
||||
msgstr "E1185: Недостаје :redir END"
|
||||
|
||||
#, c-format
|
||||
msgid "E1186: Expression does not result in a value: %s"
|
||||
msgstr "E1186: Резултат израза није вредност: %s"
|
||||
|
||||
msgid "E1187: Failed to source defaults.vim"
|
||||
msgstr "E1187: Није успело учитавање defaults.vim"
|
||||
|
||||
msgid "E1188: Cannot open a terminal from the command line window"
|
||||
msgstr "E1188: Из прозора командне линије не може да се отвори терминал"
|
||||
|
||||
#, c-format
|
||||
msgid "E1189: Cannot use :legacy with this command: %s"
|
||||
msgstr "E1189: :legacy не може да се користи са овом командом: %s"
|
||||
|
||||
msgid "E1190: One argument too few"
|
||||
msgstr "E1190: Фали један аргумент"
|
||||
|
||||
#, c-format
|
||||
msgid "E1190: %d arguments too few"
|
||||
msgstr "E1190: фали %d аргумената"
|
||||
|
||||
#, c-format
|
||||
msgid "E1191: Call to function that failed to compile: %s"
|
||||
msgstr "E1191: Позив функције која није успела да се компајлира: %s"
|
||||
|
||||
msgid "--No lines in buffer--"
|
||||
msgstr "--У баферу нема линија--"
|
||||
@@ -7355,8 +7469,8 @@ msgid "E475: Invalid value for argument %s: %s"
|
||||
msgstr "E475: Неважећа вредност за аргумент %s: %s"
|
||||
|
||||
#, c-format
|
||||
msgid "E15: Invalid expression: %s"
|
||||
msgstr "E15: Неважећи израз: %s"
|
||||
msgid "E15: Invalid expression: \"%s\""
|
||||
msgstr "E15: Неважећи израз: „%s”"
|
||||
|
||||
msgid "E16: Invalid range"
|
||||
msgstr "E16: Неважећи опсег"
|
||||
@@ -7591,9 +7705,6 @@ msgstr "E896: Аргумент за %s мора бити Листа, Речни
|
||||
msgid "E804: Cannot use '%' with Float"
|
||||
msgstr "E804: '%' не може да се користи са Покретни"
|
||||
|
||||
msgid "E908: using an invalid value as a String"
|
||||
msgstr "E908: Користи се недозвољена вредност као Стринг"
|
||||
|
||||
msgid "E996: Cannot lock an option"
|
||||
msgstr "E996: Опција не може да се закључа"
|
||||
|
||||
@@ -8133,6 +8244,9 @@ msgstr "Уређујте текст фајлове"
|
||||
msgid "Text;editor;"
|
||||
msgstr "Текст;едитор;"
|
||||
|
||||
msgid "gvim"
|
||||
msgstr "gvim"
|
||||
|
||||
msgid "Vim"
|
||||
msgstr "Vim"
|
||||
|
||||
@@ -8233,6 +8347,9 @@ msgstr "листа имена директоријума који се кори
|
||||
msgid "change to directory of file in buffer"
|
||||
msgstr "мења на директоријум фајла у баферу"
|
||||
|
||||
msgid "change to pwd of shell in terminal buffer"
|
||||
msgstr "мења на pwd командног окружења терминал баферу"
|
||||
|
||||
msgid "search commands wrap around the end of the buffer"
|
||||
msgstr "команде претраге се обавијају око краја бафера"
|
||||
|
||||
@@ -8245,7 +8362,7 @@ msgstr ""
|
||||
"претраге"
|
||||
|
||||
msgid "select the default regexp engine used"
|
||||
msgstr "бира подразумевани регизраз механизам"
|
||||
msgstr "бира подразумевани механизам регуларних израза"
|
||||
|
||||
msgid "ignore case when using a search pattern"
|
||||
msgstr "не прави разлику у величини слова када се користи шаблон претраге"
|
||||
@@ -8837,7 +8954,7 @@ msgid ""
|
||||
"\"autoselect\" to always put selected text on the clipboard"
|
||||
msgstr ""
|
||||
"„unnamed” да се користи * регистар као неименовани регистар\n"
|
||||
"„autoselect” да се изабрани текст увек ставља у клипборд"
|
||||
"„autoselect” да се изабрани текст увек ставља у системску оставу"
|
||||
|
||||
msgid "\"startsel\" and/or \"stopsel\"; what special keys can do"
|
||||
msgstr "„startsel” и/или „stopsel”; шта могу да ураде специјални тастери"
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
/* option.c */
|
||||
void set_init_1(int clean_arg);
|
||||
void set_fencs_unicode(void);
|
||||
void set_string_default(char *name, char_u *val);
|
||||
void set_number_default(char *name, long val);
|
||||
void set_local_options_default(win_T *wp, int do_buffer);
|
||||
|
||||
@@ -4,9 +4,12 @@ void funcstack_check_refcount(funcstack_T *funcstack);
|
||||
char_u *char_from_string(char_u *str, varnumber_T index);
|
||||
char_u *string_slice(char_u *str, varnumber_T first, varnumber_T last, int exclusive);
|
||||
int fill_partial_and_closure(partial_T *pt, ufunc_T *ufunc, ectx_T *ectx);
|
||||
typval_T *lookup_debug_var(char_u *name);
|
||||
int exe_typval_instr(typval_T *tv, typval_T *rettv);
|
||||
char_u *exe_substitute_instr(void);
|
||||
int call_def_function(ufunc_T *ufunc, int argc_arg, typval_T *argv, partial_T *partial, typval_T *rettv);
|
||||
void set_context_in_disassemble_cmd(expand_T *xp, char_u *arg);
|
||||
char_u *get_disassemble_argument(expand_T *xp, int idx);
|
||||
void ex_disassemble(exarg_T *eap);
|
||||
int tv2bool(typval_T *tv);
|
||||
void emsg_using_string_as(typval_T *tv, int as_number);
|
||||
|
||||
@@ -804,6 +804,22 @@ func Test_cmdline_complete_various()
|
||||
call feedkeys(":topleft new\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"topleft new", @:)
|
||||
|
||||
" completion for vim9 and legacy commands
|
||||
call feedkeys(":vim9 call strle\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"vim9 call strlen(", @:)
|
||||
call feedkeys(":legac call strle\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"legac call strlen(", @:)
|
||||
|
||||
" completion for the :disassemble command
|
||||
call feedkeys(":disas deb\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"disas debug", @:)
|
||||
call feedkeys(":disas pro\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"disas profile", @:)
|
||||
call feedkeys(":disas debug Test_cmdline_complete_var\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"disas debug Test_cmdline_complete_various", @:)
|
||||
call feedkeys(":disas profile Test_cmdline_complete_var\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"disas profile Test_cmdline_complete_various", @:)
|
||||
|
||||
" completion for the :match command
|
||||
call feedkeys(":match Search /pat/\<C-A>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal("\"match Search /pat/\<C-A>", @:)
|
||||
|
||||
@@ -853,6 +853,7 @@ func Test_Backtrace_DefFunction()
|
||||
enddef
|
||||
|
||||
def g:GlobalFunction()
|
||||
var some = "some var"
|
||||
CallAFunction()
|
||||
enddef
|
||||
|
||||
@@ -884,19 +885,21 @@ func Test_Backtrace_DefFunction()
|
||||
\ ':debug call GlobalFunction()',
|
||||
\ ['cmd: call GlobalFunction()'])
|
||||
|
||||
call RunDbgCmd(buf, 'step', ['line 1: CallAFunction()'])
|
||||
call RunDbgCmd(buf, 'step', ['line 1: var some = "some var"'])
|
||||
call RunDbgCmd(buf, 'step', ['line 2: CallAFunction()'])
|
||||
call RunDbgCmd(buf, 'echo some', ['some var'])
|
||||
|
||||
" FIXME: not quite right
|
||||
call RunDbgCmd(buf, 'backtrace', [
|
||||
\ '\V>backtrace',
|
||||
\ '\V->0 function GlobalFunction',
|
||||
\ '\Vline 1: CallAFunction()',
|
||||
\ '\Vline 2: CallAFunction()',
|
||||
\ ],
|
||||
\ #{match: 'pattern'})
|
||||
|
||||
call RunDbgCmd(buf, 'step', ['line 1: SourceAnotherFile()'])
|
||||
call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim'])
|
||||
" FIXME: repeated line
|
||||
" Repeated line, because we fist are in the compiled function before the
|
||||
" EXEC and then in do_cmdline() before the :source command.
|
||||
call RunDbgCmd(buf, 'step', ['line 1: source Xtest2.vim'])
|
||||
call RunDbgCmd(buf, 'step', ['line 1: vim9script'])
|
||||
call RunDbgCmd(buf, 'step', ['line 3: def DoAThing(): number'])
|
||||
@@ -906,7 +909,7 @@ func Test_Backtrace_DefFunction()
|
||||
call RunDbgCmd(buf, 'step', ['line 14: File2Function()'])
|
||||
call RunDbgCmd(buf, 'backtrace', [
|
||||
\ '\V>backtrace',
|
||||
\ '\V 3 function GlobalFunction[1]',
|
||||
\ '\V 3 function GlobalFunction[2]',
|
||||
\ '\V 2 <SNR>\.\*_CallAFunction[1]',
|
||||
\ '\V 1 <SNR>\.\*_SourceAnotherFile[1]',
|
||||
\ '\V->0 script ' .. getcwd() .. '/Xtest2.vim',
|
||||
@@ -917,7 +920,7 @@ func Test_Backtrace_DefFunction()
|
||||
call RunDbgCmd(buf, 'next', ['line 15: End of sourced file'])
|
||||
call RunDbgCmd(buf, 'backtrace', [
|
||||
\ '\V>backtrace',
|
||||
\ '\V 3 function GlobalFunction[1]',
|
||||
\ '\V 3 function GlobalFunction[2]',
|
||||
\ '\V 2 <SNR>\.\*_CallAFunction[1]',
|
||||
\ '\V 1 <SNR>\.\*_SourceAnotherFile[1]',
|
||||
\ '\V->0 script ' .. getcwd() .. '/Xtest2.vim',
|
||||
@@ -929,6 +932,33 @@ func Test_Backtrace_DefFunction()
|
||||
call delete('Xtest2.vim')
|
||||
endfunc
|
||||
|
||||
func Test_debug_def_function()
|
||||
CheckCWD
|
||||
let file =<< trim END
|
||||
vim9script
|
||||
def g:Func()
|
||||
var n: number
|
||||
def Closure(): number
|
||||
return n + 3
|
||||
enddef
|
||||
n += Closure()
|
||||
echo 'result: ' .. n
|
||||
enddef
|
||||
END
|
||||
call writefile(file, 'Xtest.vim')
|
||||
|
||||
let buf = RunVimInTerminal('-S Xtest.vim', {})
|
||||
|
||||
call RunDbgCmd(buf,
|
||||
\ ':debug call Func()',
|
||||
\ ['cmd: call Func()'])
|
||||
call RunDbgCmd(buf, 'next', ['result: 3'])
|
||||
call term_sendkeys(buf, "\r")
|
||||
|
||||
call StopVimInTerminal(buf)
|
||||
call delete('Xtest.vim')
|
||||
endfunc
|
||||
|
||||
func Test_debug_backtrace_level()
|
||||
CheckCWD
|
||||
let lines =<< trim END
|
||||
|
||||
@@ -596,7 +596,7 @@ func Sandbox_tests()
|
||||
" some options cannot be changed in a sandbox
|
||||
call assert_fails('set exrc', 'E48:')
|
||||
call assert_fails('set cdpath', 'E48:')
|
||||
if has('xim')
|
||||
if has('xim') && has('gui_gtk')
|
||||
call assert_fails('set imstyle', 'E48:')
|
||||
endif
|
||||
endfunc
|
||||
|
||||
@@ -257,7 +257,7 @@ let s:filename_checks = {
|
||||
\ 'jgraph': ['file.jgr'],
|
||||
\ 'jovial': ['file.jov', 'file.j73', 'file.jovial'],
|
||||
\ 'jproperties': ['file.properties', 'file.properties_xx', 'file.properties_xx_xx', 'some.properties_xx_xx_file'],
|
||||
\ 'json': ['file.json', 'file.jsonp', 'file.webmanifest', 'Pipfile.lock'],
|
||||
\ 'json': ['file.json', 'file.jsonp', 'file.webmanifest', 'Pipfile.lock', 'file.ipynb'],
|
||||
\ 'jsp': ['file.jsp'],
|
||||
\ 'kconfig': ['Kconfig', 'Kconfig.debug', 'Kconfig.file'],
|
||||
\ 'kivy': ['file.kv'],
|
||||
|
||||
@@ -485,6 +485,11 @@ func Test_list_mappings()
|
||||
call assert_equal(['n ,k <Nop>'],
|
||||
\ execute('nmap ,k')->trim()->split("\n"))
|
||||
|
||||
" map with space at the beginning
|
||||
exe "nmap \<C-V> w <Nop>"
|
||||
call assert_equal(['n <Space>w <Nop>'],
|
||||
\ execute("nmap \<C-V> w")->trim()->split("\n"))
|
||||
|
||||
nmapclear
|
||||
endfunc
|
||||
|
||||
@@ -1411,4 +1416,19 @@ func Test_abbreviate_multi_byte()
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Test for abbreviations with 'latin1' encoding
|
||||
func Test_abbreviate_latin1_encoding()
|
||||
set encoding=latin1
|
||||
call assert_fails('abbr ab#$c ABC', 'E474:')
|
||||
new
|
||||
iabbr <buffer> #i #include
|
||||
iabbr <buffer> ## #enddef
|
||||
exe "normal i#i\<C-]>"
|
||||
call assert_equal('#include', getline(1))
|
||||
exe "normal 0Di##\<C-]>"
|
||||
call assert_equal('#enddef', getline(1))
|
||||
%bw!
|
||||
set encoding=utf-8
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@@ -334,4 +334,30 @@ func Test_modeline_setoption_verbose()
|
||||
call delete('Xmodeline')
|
||||
endfunc
|
||||
|
||||
" Test for the 'modeline' default value in compatible and non-compatible modes
|
||||
" for root and non-root accounts
|
||||
func Test_modeline_default()
|
||||
set compatible
|
||||
call assert_false(&modeline)
|
||||
set nocompatible
|
||||
call assert_equal(IsRoot() ? 0 : 1, &modeline)
|
||||
set compatible&vi
|
||||
call assert_false(&modeline)
|
||||
set compatible&vim
|
||||
call assert_equal(IsRoot() ? 0 : 1, &modeline)
|
||||
set compatible& modeline&
|
||||
endfunc
|
||||
|
||||
" Some options cannot be set from the modeline when 'diff' option is set
|
||||
func Test_modeline_diff_buffer()
|
||||
call writefile(['vim: diff foldmethod=marker wrap'], 'Xfile')
|
||||
set foldmethod& nowrap
|
||||
new Xfile
|
||||
call assert_equal('manual', &foldmethod)
|
||||
call assert_false(&wrap)
|
||||
set wrap&
|
||||
call delete('Xfile')
|
||||
bw
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@@ -1140,6 +1140,14 @@ func Test_opt_default()
|
||||
call assert_equal('vt', &formatoptions)
|
||||
set formatoptions&vim
|
||||
call assert_equal('tcq', &formatoptions)
|
||||
|
||||
call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
|
||||
set fencs=latin1
|
||||
set fencs&
|
||||
call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
|
||||
set fencs=latin1
|
||||
set all&
|
||||
call assert_equal('ucs-bom,utf-8,default,latin1', &fencs)
|
||||
endfunc
|
||||
|
||||
" Test for the 'cmdheight' option
|
||||
@@ -1152,4 +1160,21 @@ func Test_cmdheight()
|
||||
set cmdheight&
|
||||
endfunc
|
||||
|
||||
" To specify a control character as a option value, '^' can be used
|
||||
func Test_opt_control_char()
|
||||
set wildchar=^v
|
||||
call assert_equal("\<C-V>", nr2char(&wildchar))
|
||||
set wildcharm=^r
|
||||
call assert_equal("\<C-R>", nr2char(&wildcharm))
|
||||
" Bug: This doesn't work for the 'cedit' and 'termwinkey' options
|
||||
set wildchar& wildcharm&
|
||||
endfunc
|
||||
|
||||
" Test for the 'errorbells' option
|
||||
func Test_opt_errorbells()
|
||||
set errorbells
|
||||
call assert_beeps('s/a1b2/x1y2/')
|
||||
set noerrorbells
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@@ -159,8 +159,68 @@ func Test_pastetoggle()
|
||||
call feedkeys("i\<F4>", 'xt')
|
||||
call assert_false(&paste)
|
||||
call assert_equal('Hello', getline(1))
|
||||
" command-line completion for 'pastetoggle' value
|
||||
call feedkeys(":set pastetoggle=\<Tab>\<C-B>\"\<CR>", 'xt')
|
||||
call assert_equal('"set pastetoggle=<F4>', @:)
|
||||
set pastetoggle&
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Test for restoring option values when 'paste' is disabled
|
||||
func Test_paste_opt_restore()
|
||||
set autoindent expandtab ruler showmatch
|
||||
if has('rightleft')
|
||||
set revins hkmap
|
||||
endif
|
||||
set smarttab softtabstop=3 textwidth=27 wrapmargin=12
|
||||
if has('vartabs')
|
||||
set varsofttabstop=10,20
|
||||
endif
|
||||
|
||||
" enabling 'paste' should reset the above options
|
||||
set paste
|
||||
call assert_false(&autoindent)
|
||||
call assert_false(&expandtab)
|
||||
if has('rightleft')
|
||||
call assert_false(&revins)
|
||||
call assert_false(&hkmap)
|
||||
endif
|
||||
call assert_false(&ruler)
|
||||
call assert_false(&showmatch)
|
||||
call assert_false(&smarttab)
|
||||
call assert_equal(0, &softtabstop)
|
||||
call assert_equal(0, &textwidth)
|
||||
call assert_equal(0, &wrapmargin)
|
||||
if has('vartabs')
|
||||
call assert_equal('', &varsofttabstop)
|
||||
endif
|
||||
|
||||
" disabling 'paste' should restore the option values
|
||||
set nopaste
|
||||
call assert_true(&autoindent)
|
||||
call assert_true(&expandtab)
|
||||
if has('rightleft')
|
||||
call assert_true(&revins)
|
||||
call assert_true(&hkmap)
|
||||
endif
|
||||
call assert_true(&ruler)
|
||||
call assert_true(&showmatch)
|
||||
call assert_true(&smarttab)
|
||||
call assert_equal(3, &softtabstop)
|
||||
call assert_equal(27, &textwidth)
|
||||
call assert_equal(12, &wrapmargin)
|
||||
if has('vartabs')
|
||||
call assert_equal('10,20', &varsofttabstop)
|
||||
endif
|
||||
|
||||
set autoindent& expandtab& ruler& showmatch&
|
||||
if has('rightleft')
|
||||
set revins& hkmap&
|
||||
endif
|
||||
set smarttab& softtabstop& textwidth& wrapmargin&
|
||||
if has('vartabs')
|
||||
set varsofttabstop&
|
||||
endif
|
||||
endfunc
|
||||
|
||||
" vim: shiftwidth=2 sts=2 expandtab
|
||||
|
||||
@@ -2146,6 +2146,7 @@ enddef
|
||||
|
||||
def s:Profiled(): string
|
||||
echo "profiled"
|
||||
var some = "some text"
|
||||
return "done"
|
||||
enddef
|
||||
|
||||
@@ -2159,12 +2160,17 @@ def Test_profiled()
|
||||
'\d PROFILE START line 1\_s*' ..
|
||||
'\d PUSHS "profiled"\_s*' ..
|
||||
'\d ECHO 1\_s*' ..
|
||||
'return "done"\_s*' ..
|
||||
'var some = "some text"\_s*' ..
|
||||
'\d PROFILE END\_s*' ..
|
||||
'\d PROFILE START line 2\_s*' ..
|
||||
'\d PUSHS "some text"\_s*' ..
|
||||
'\d STORE $0\_s*' ..
|
||||
'return "done"\_s*' ..
|
||||
'\d PROFILE END\_s*' ..
|
||||
'\d PROFILE START line 3\_s*' ..
|
||||
'\d PUSHS "done"\_s*' ..
|
||||
'\d RETURN\_s*' ..
|
||||
'\d PROFILE END',
|
||||
'\d\+ RETURN\_s*' ..
|
||||
'\d\+ PROFILE END',
|
||||
res)
|
||||
enddef
|
||||
|
||||
@@ -2172,11 +2178,15 @@ def Test_debugged()
|
||||
var res = execute('disass debug s:Profiled')
|
||||
assert_match('<SNR>\d*_Profiled\_s*' ..
|
||||
'echo "profiled"\_s*' ..
|
||||
'\d DEBUG line 1\_s*' ..
|
||||
'\d DEBUG line 1 varcount 0\_s*' ..
|
||||
'\d PUSHS "profiled"\_s*' ..
|
||||
'\d ECHO 1\_s*' ..
|
||||
'var some = "some text"\_s*' ..
|
||||
'\d DEBUG line 2 varcount 0\_s*' ..
|
||||
'\d PUSHS "some text"\_s*' ..
|
||||
'\d STORE $0\_s*' ..
|
||||
'return "done"\_s*' ..
|
||||
'\d DEBUG line 2\_s*' ..
|
||||
'\d DEBUG line 3 varcount 1\_s*' ..
|
||||
'\d PUSHS "done"\_s*' ..
|
||||
'\d RETURN\_s*',
|
||||
res)
|
||||
|
||||
@@ -750,6 +750,40 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
3003,
|
||||
/**/
|
||||
3002,
|
||||
/**/
|
||||
3001,
|
||||
/**/
|
||||
3000,
|
||||
/**/
|
||||
2999,
|
||||
/**/
|
||||
2998,
|
||||
/**/
|
||||
2997,
|
||||
/**/
|
||||
2996,
|
||||
/**/
|
||||
2995,
|
||||
/**/
|
||||
2994,
|
||||
/**/
|
||||
2993,
|
||||
/**/
|
||||
2992,
|
||||
/**/
|
||||
2991,
|
||||
/**/
|
||||
2990,
|
||||
/**/
|
||||
2989,
|
||||
/**/
|
||||
2988,
|
||||
/**/
|
||||
2987,
|
||||
/**/
|
||||
2986,
|
||||
/**/
|
||||
|
||||
@@ -777,6 +777,7 @@ extern int (*dyn_libintl_wputenv)(const wchar_t *envstring);
|
||||
#define EXPAND_MAPCLEAR 47
|
||||
#define EXPAND_ARGLIST 48
|
||||
#define EXPAND_DIFF_BUFFERS 49
|
||||
#define EXPAND_DISASSEMBLE 50
|
||||
|
||||
// Values for exmode_active (0 is no exmode)
|
||||
#define EXMODE_NORMAL 1
|
||||
@@ -1801,6 +1802,7 @@ typedef enum {
|
||||
CT_DEBUG // use df_instr_debug, overrules CT_PROFILE
|
||||
} compiletype_T;
|
||||
|
||||
// Keep in sync with INSTRUCTIONS().
|
||||
#ifdef FEAT_PROFILE
|
||||
# define COMPILE_TYPE(ufunc) (debug_break_level > 0 ? CT_DEBUG : do_profiling == PROF_YES && (ufunc)->uf_profiling ? CT_PROFILE : CT_NONE)
|
||||
#else
|
||||
|
||||
17
src/vim9.h
17
src/vim9.h
@@ -168,7 +168,8 @@ typedef enum {
|
||||
ISN_PROF_START, // start a line for profiling
|
||||
ISN_PROF_END, // end a line for profiling
|
||||
|
||||
ISN_DEBUG, // check for debug breakpoint
|
||||
ISN_DEBUG, // check for debug breakpoint, isn_arg.number is current
|
||||
// number of local variables
|
||||
|
||||
ISN_UNPACK, // unpack list into items, uses isn_arg.unpack
|
||||
ISN_SHUFFLE, // move item on stack up or down
|
||||
@@ -447,6 +448,7 @@ struct dfunc_S {
|
||||
// was compiled.
|
||||
|
||||
garray_T df_def_args_isn; // default argument instructions
|
||||
garray_T df_var_names; // names of local vars
|
||||
|
||||
// After compiling "df_instr" and/or "df_instr_prof" is not NULL.
|
||||
isn_T *df_instr; // function body to be executed
|
||||
@@ -493,10 +495,17 @@ extern garray_T def_functions;
|
||||
// Used for "lnum" when a range is to be taken from the stack and "!" is used.
|
||||
#define LNUM_VARIABLE_RANGE_ABOVE -888
|
||||
|
||||
// Keep in sync with COMPILE_TYPE()
|
||||
#ifdef FEAT_PROFILE
|
||||
# define INSTRUCTIONS(dfunc) \
|
||||
((do_profiling == PROF_YES && (dfunc->df_ufunc)->uf_profiling) \
|
||||
? (dfunc)->df_instr_prof : (dfunc)->df_instr)
|
||||
(debug_break_level > 0 \
|
||||
? (dfunc)->df_instr_debug \
|
||||
: ((do_profiling == PROF_YES && (dfunc->df_ufunc)->uf_profiling) \
|
||||
? (dfunc)->df_instr_prof \
|
||||
: (dfunc)->df_instr))
|
||||
#else
|
||||
# define INSTRUCTIONS(dfunc) ((dfunc)->df_instr)
|
||||
# define INSTRUCTIONS(dfunc) \
|
||||
(debug_break_level > 0 \
|
||||
? (dfunc)->df_instr_debug \
|
||||
: (dfunc)->df_instr)
|
||||
#endif
|
||||
|
||||
@@ -177,7 +177,6 @@ struct cctx_S {
|
||||
compiletype_T ctx_compile_type;
|
||||
|
||||
garray_T ctx_locals; // currently visible local variables
|
||||
int ctx_locals_count; // total number of local variables
|
||||
|
||||
int ctx_has_closure; // set to one if a closures was created in
|
||||
// the function
|
||||
@@ -454,7 +453,7 @@ item_exists(char_u *name, size_t len, int cmd UNUSED, cctx_T *cctx)
|
||||
if (name[len] == '(' || (p[0] == '-' && p[1] == '>'))
|
||||
{
|
||||
// Do not check for an internal function, since it might also be a
|
||||
// valid command, such as ":split" versuse "split()".
|
||||
// valid command, such as ":split" versus "split()".
|
||||
// Skip "g:" before a function name.
|
||||
is_global = (name[0] == 'g' && name[1] == ':');
|
||||
return find_func(is_global ? name + 2 : name, is_global, cctx) != NULL;
|
||||
@@ -574,6 +573,22 @@ generate_instr_type(cctx_T *cctx, isntype_T isn_type, type_T *type)
|
||||
return isn;
|
||||
}
|
||||
|
||||
/*
|
||||
* Generate an ISN_DEBUG instruction.
|
||||
*/
|
||||
static isn_T *
|
||||
generate_instr_debug(cctx_T *cctx)
|
||||
{
|
||||
isn_T *isn;
|
||||
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
|
||||
+ cctx->ctx_ufunc->uf_dfunc_idx;
|
||||
|
||||
if ((isn = generate_instr(cctx, ISN_DEBUG)) == NULL)
|
||||
return NULL;
|
||||
isn->isn_arg.number = dfunc->df_var_names.ga_len;
|
||||
return isn;
|
||||
}
|
||||
|
||||
/*
|
||||
* If type at "offset" isn't already VAR_STRING then generate ISN_2STRING.
|
||||
* But only for simple types.
|
||||
@@ -2365,6 +2380,7 @@ reserve_local(
|
||||
type_T *type)
|
||||
{
|
||||
lvar_T *lvar;
|
||||
dfunc_T *dfunc;
|
||||
|
||||
if (arg_exists(name, len, NULL, NULL, NULL, cctx) == OK)
|
||||
{
|
||||
@@ -2381,12 +2397,20 @@ reserve_local(
|
||||
// the last ones when leaving a scope, but then variables used in a closure
|
||||
// might get overwritten. To keep things simple do not re-use stack
|
||||
// entries. This is less efficient, but memory is cheap these days.
|
||||
lvar->lv_idx = cctx->ctx_locals_count++;
|
||||
dfunc = ((dfunc_T *)def_functions.ga_data) + cctx->ctx_ufunc->uf_dfunc_idx;
|
||||
lvar->lv_idx = dfunc->df_var_names.ga_len;
|
||||
|
||||
lvar->lv_name = vim_strnsave(name, len == 0 ? STRLEN(name) : len);
|
||||
lvar->lv_const = isConst;
|
||||
lvar->lv_type = type;
|
||||
|
||||
// Remember the name for debugging.
|
||||
if (ga_grow(&dfunc->df_var_names, 1) == FAIL)
|
||||
return NULL;
|
||||
((char_u **)dfunc->df_var_names.ga_data)[lvar->lv_idx] =
|
||||
vim_strsave(lvar->lv_name);
|
||||
++dfunc->df_var_names.ga_len;
|
||||
|
||||
return lvar;
|
||||
}
|
||||
|
||||
@@ -7486,7 +7510,7 @@ compile_elseif(char_u *arg, cctx_T *cctx)
|
||||
if (cctx->ctx_compile_type == CT_DEBUG)
|
||||
{
|
||||
// the previous block was skipped, may want to debug this line
|
||||
generate_instr(cctx, ISN_DEBUG);
|
||||
generate_instr_debug(cctx);
|
||||
instr_count = instr->ga_len;
|
||||
}
|
||||
}
|
||||
@@ -8239,7 +8263,7 @@ compile_catch(char_u *arg, cctx_T *cctx UNUSED)
|
||||
}
|
||||
#endif
|
||||
if (cctx->ctx_compile_type == CT_DEBUG)
|
||||
generate_instr(cctx, ISN_DEBUG);
|
||||
generate_instr_debug(cctx);
|
||||
}
|
||||
|
||||
p = skipwhite(arg);
|
||||
@@ -8976,6 +9000,7 @@ add_def_function(ufunc_T *ufunc)
|
||||
ufunc->uf_dfunc_idx = dfunc->df_idx;
|
||||
dfunc->df_ufunc = ufunc;
|
||||
dfunc->df_name = vim_strsave(ufunc->uf_name);
|
||||
ga_init2(&dfunc->df_var_names, sizeof(char_u *), 10);
|
||||
++dfunc->df_refcount;
|
||||
++def_functions.ga_len;
|
||||
return OK;
|
||||
@@ -9026,7 +9051,21 @@ compile_def_function(
|
||||
{
|
||||
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
|
||||
+ ufunc->uf_dfunc_idx;
|
||||
delete_def_function_contents(dfunc, FALSE);
|
||||
isn_T *instr_dest = NULL;
|
||||
|
||||
switch (compile_type)
|
||||
{
|
||||
case CT_PROFILE:
|
||||
#ifdef FEAT_PROFILE
|
||||
instr_dest = dfunc->df_instr_prof; break;
|
||||
#endif
|
||||
case CT_NONE: instr_dest = dfunc->df_instr; break;
|
||||
case CT_DEBUG: instr_dest = dfunc->df_instr_debug; break;
|
||||
}
|
||||
if (instr_dest != NULL)
|
||||
// Was compiled in this mode before: Free old instructions.
|
||||
delete_def_function_contents(dfunc, FALSE);
|
||||
ga_clear_strings(&dfunc->df_var_names);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -9202,7 +9241,7 @@ compile_def_function(
|
||||
&& cctx.ctx_skip != SKIP_YES)
|
||||
{
|
||||
debug_lnum = cctx.ctx_lnum;
|
||||
generate_instr(&cctx, ISN_DEBUG);
|
||||
generate_instr_debug(&cctx);
|
||||
}
|
||||
|
||||
// Some things can be recognized by the first character.
|
||||
@@ -9670,7 +9709,7 @@ nextline:
|
||||
dfunc->df_instr = instr->ga_data;
|
||||
dfunc->df_instr_count = instr->ga_len;
|
||||
}
|
||||
dfunc->df_varcount = cctx.ctx_locals_count;
|
||||
dfunc->df_varcount = dfunc->df_var_names.ga_len;
|
||||
dfunc->df_has_closure = cctx.ctx_has_closure;
|
||||
if (cctx.ctx_outer_used)
|
||||
ufunc->uf_flags |= FC_CLOSURE;
|
||||
@@ -9685,8 +9724,10 @@ erret:
|
||||
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data)
|
||||
+ ufunc->uf_dfunc_idx;
|
||||
|
||||
// Compiling aborted, free the generated instructions.
|
||||
clear_instr_ga(instr);
|
||||
VIM_CLEAR(dfunc->df_name);
|
||||
ga_clear_strings(&dfunc->df_var_names);
|
||||
|
||||
// If using the last entry in the table and it was added above, we
|
||||
// might as well remove it.
|
||||
@@ -10037,6 +10078,7 @@ delete_def_function_contents(dfunc_T *dfunc, int mark_deleted)
|
||||
int idx;
|
||||
|
||||
ga_clear(&dfunc->df_def_args_isn);
|
||||
ga_clear_strings(&dfunc->df_var_names);
|
||||
|
||||
if (dfunc->df_instr != NULL)
|
||||
{
|
||||
@@ -10045,6 +10087,13 @@ delete_def_function_contents(dfunc_T *dfunc, int mark_deleted)
|
||||
VIM_CLEAR(dfunc->df_instr);
|
||||
dfunc->df_instr = NULL;
|
||||
}
|
||||
if (dfunc->df_instr_debug != NULL)
|
||||
{
|
||||
for (idx = 0; idx < dfunc->df_instr_debug_count; ++idx)
|
||||
delete_instr(dfunc->df_instr_debug + idx);
|
||||
VIM_CLEAR(dfunc->df_instr_debug);
|
||||
dfunc->df_instr_debug = NULL;
|
||||
}
|
||||
#ifdef FEAT_PROFILE
|
||||
if (dfunc->df_instr_prof != NULL)
|
||||
{
|
||||
|
||||
@@ -172,6 +172,7 @@ call_dfunc(
|
||||
int argcount = argcount_arg;
|
||||
dfunc_T *dfunc = ((dfunc_T *)def_functions.ga_data) + cdf_idx;
|
||||
ufunc_T *ufunc = dfunc->df_ufunc;
|
||||
int did_emsg_before = did_emsg_cumul + did_emsg;
|
||||
int arg_to_add;
|
||||
int vararg_count = 0;
|
||||
int varcount;
|
||||
@@ -211,6 +212,19 @@ call_dfunc(
|
||||
}
|
||||
#endif
|
||||
|
||||
// When debugging and using "cont" switches to the not-debugged
|
||||
// instructions, may need to still compile them.
|
||||
if ((func_needs_compiling(ufunc, COMPILE_TYPE(ufunc))
|
||||
&& compile_def_function(ufunc, FALSE, COMPILE_TYPE(ufunc), NULL)
|
||||
== FAIL)
|
||||
|| INSTRUCTIONS(dfunc) == NULL)
|
||||
{
|
||||
if (did_emsg_cumul + did_emsg == did_emsg_before)
|
||||
semsg(_(e_function_is_not_compiled_str),
|
||||
printable_func_name(ufunc));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
if (ufunc->uf_va_name != NULL)
|
||||
{
|
||||
// Need to make a list out of the vararg arguments.
|
||||
@@ -738,12 +752,7 @@ call_ufunc(
|
||||
int error;
|
||||
int idx;
|
||||
int did_emsg_before = did_emsg;
|
||||
#ifdef FEAT_PROFILE
|
||||
compiletype_T compile_type = do_profiling == PROF_YES
|
||||
&& ufunc->uf_profiling ? CT_PROFILE : CT_NONE;
|
||||
#else
|
||||
# define compile_type CT_NONE
|
||||
#endif
|
||||
compiletype_T compile_type = COMPILE_TYPE(ufunc);
|
||||
|
||||
if (func_needs_compiling(ufunc, compile_type)
|
||||
&& compile_def_function(ufunc, FALSE, compile_type, NULL)
|
||||
@@ -1383,6 +1392,36 @@ typedef struct subs_expr_S {
|
||||
// Get pointer to a local variable on the stack. Negative for arguments.
|
||||
#define STACK_TV_VAR(idx) (((typval_T *)ectx->ec_stack.ga_data) + ectx->ec_frame_idx + STACK_FRAME_SIZE + idx)
|
||||
|
||||
// Set when calling do_debug().
|
||||
static ectx_T *debug_context = NULL;
|
||||
static int debug_arg_count;
|
||||
|
||||
/*
|
||||
* When debugging lookup "name" and return the typeval.
|
||||
* When not found return NULL.
|
||||
*/
|
||||
typval_T *
|
||||
lookup_debug_var(char_u *name)
|
||||
{
|
||||
int idx;
|
||||
dfunc_T *dfunc;
|
||||
ectx_T *ectx = debug_context;
|
||||
|
||||
if (ectx == NULL)
|
||||
return NULL;
|
||||
dfunc = ((dfunc_T *)def_functions.ga_data) + ectx->ec_dfunc_idx;
|
||||
|
||||
// Go through the local variable names, from last to first.
|
||||
for (idx = debug_arg_count - 1; idx >= 0; --idx)
|
||||
{
|
||||
char_u *s = ((char_u **)dfunc->df_var_names.ga_data)[idx];
|
||||
if (STRCMP(s, name) == 0)
|
||||
return STACK_TV_VAR(idx);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* Execute instructions in execution context "ectx".
|
||||
* Return OK or FAIL;
|
||||
@@ -4088,7 +4127,7 @@ exec_instructions(ectx_T *ectx)
|
||||
funccall_T cookie;
|
||||
ufunc_T *cur_ufunc =
|
||||
(((dfunc_T *)def_functions.ga_data)
|
||||
+ ectx->ec_dfunc_idx)->df_ufunc;
|
||||
+ ectx->ec_dfunc_idx)->df_ufunc;
|
||||
|
||||
cookie.func = cur_ufunc;
|
||||
if (iptr->isn_type == ISN_PROF_START)
|
||||
@@ -4111,11 +4150,14 @@ exec_instructions(ectx_T *ectx)
|
||||
+ ectx->ec_dfunc_idx)->df_ufunc;
|
||||
|
||||
SOURCING_LNUM = iptr->isn_lnum;
|
||||
debug_context = ectx;
|
||||
debug_arg_count = iptr->isn_arg.number;
|
||||
line = ((char_u **)ufunc->uf_lines.ga_data)[
|
||||
iptr->isn_lnum - 1];
|
||||
if (line == NULL)
|
||||
line = (char_u *)"[empty]";
|
||||
do_debug(line);
|
||||
debug_context = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
@@ -5347,7 +5389,8 @@ list_instructions(char *pfx, isn_T *instr, int instr_count, ufunc_T *ufunc)
|
||||
break;
|
||||
|
||||
case ISN_DEBUG:
|
||||
smsg("%s%4d DEBUG line %d", pfx, current, iptr->isn_lnum);
|
||||
smsg("%s%4d DEBUG line %d varcount %lld", pfx, current,
|
||||
iptr->isn_lnum, iptr->isn_arg.number);
|
||||
break;
|
||||
|
||||
case ISN_UNPACK: smsg("%s%4d UNPACK %d%s", pfx, current,
|
||||
@@ -5371,6 +5414,40 @@ list_instructions(char *pfx, isn_T *instr, int instr_count, ufunc_T *ufunc)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle command line completion for the :disassemble command.
|
||||
*/
|
||||
void
|
||||
set_context_in_disassemble_cmd(expand_T *xp, char_u *arg)
|
||||
{
|
||||
char_u *p;
|
||||
|
||||
// Default: expand user functions, "debug" and "profile"
|
||||
xp->xp_context = EXPAND_DISASSEMBLE;
|
||||
xp->xp_pattern = arg;
|
||||
|
||||
// first argument already typed: only user function names
|
||||
if (*arg != NUL && *(p = skiptowhite(arg)) != NUL)
|
||||
{
|
||||
xp->xp_context = EXPAND_USER_FUNC;
|
||||
xp->xp_pattern = skipwhite(p);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Function given to ExpandGeneric() to obtain the list of :disassemble
|
||||
* arguments.
|
||||
*/
|
||||
char_u *
|
||||
get_disassemble_argument(expand_T *xp, int idx)
|
||||
{
|
||||
if (idx == 0)
|
||||
return (char_u *)"debug";
|
||||
if (idx == 1)
|
||||
return (char_u *)"profile";
|
||||
return get_user_func_name(xp, idx - 2);
|
||||
}
|
||||
|
||||
/*
|
||||
* ":disassemble".
|
||||
* We don't really need this at runtime, but we do have tests that require it,
|
||||
|
||||
Reference in New Issue
Block a user