vim-patch:88a4205f1cfb (#16399)

Update runtime files
88a4205f1c
This commit is contained in:
Christian Clason
2021-11-22 10:53:57 +01:00
committed by GitHub
parent 64abd7be79
commit e6c46bac3f
10 changed files with 193 additions and 112 deletions

View File

@@ -57,7 +57,7 @@ The special pattern <buffer> or <buffer=N> defines a buffer-local autocommand.
See |autocmd-buflocal|. See |autocmd-buflocal|.
Note: The ":autocmd" command can only be followed by another command when the Note: The ":autocmd" command can only be followed by another command when the
'|' appears before {cmd}. This works: > '|' appears where the pattern is expected. This works: >
:augroup mine | au! BufRead | augroup END :augroup mine | au! BufRead | augroup END
But this sees "augroup" as part of the defined command: > But this sees "augroup" as part of the defined command: >
:augroup mine | au! BufRead * | augroup END :augroup mine | au! BufRead * | augroup END

View File

@@ -5136,8 +5136,8 @@ getline({lnum} [, {end}])
digit, |line()| is called to translate the String into a Number. digit, |line()| is called to translate the String into a Number.
To get the line under the cursor: > To get the line under the cursor: >
getline(".") getline(".")
< When {lnum} is smaller than 1 or bigger than the number of < When {lnum} is a number smaller than 1 or bigger than the
lines in the buffer, an empty string is returned. number of lines in the buffer, an empty string is returned.
When {end} is given the result is a |List| where each item is When {end} is given the result is a |List| where each item is
a line from the current buffer in the range {lnum} to {end}, a line from the current buffer in the range {lnum} to {end},
@@ -7464,15 +7464,18 @@ printf({fmt}, {expr1} ...) *printf()*
field width. If the converted value has fewer bytes field width. If the converted value has fewer bytes
than the field width, it will be padded with spaces on than the field width, it will be padded with spaces on
the left (or right, if the left-adjustment flag has the left (or right, if the left-adjustment flag has
been given) to fill out the field width. been given) to fill out the field width. For the S
conversion the count is in cells.
.precision .precision
An optional precision, in the form of a period '.' An optional precision, in the form of a period '.'
followed by an optional digit string. If the digit followed by an optional digit string. If the digit
string is omitted, the precision is taken as zero. string is omitted, the precision is taken as zero.
This gives the minimum number of digits to appear for This gives the minimum number of digits to appear for
d, o, x, and X conversions, or the maximum number of d, o, x, and X conversions, the maximum number of
bytes to be printed from a string for s conversions. bytes to be printed from a string for s conversions,
or the maximum number of cells to be printed from a
string for S conversions.
For floating point it is the number of digits after For floating point it is the number of digits after
the decimal point. the decimal point.

View File

@@ -319,7 +319,7 @@ Hints for translators:
3. Writing help files *help-writing* 3. Writing help files *help-writing*
For ease of use, a Vim help file for a plugin should follow the format of the For ease of use, a Vim help file for a plugin should follow the format of the
standard Vim help files, except fot the fist line. If you are writing a new standard Vim help files, except for the first line. If you are writing a new
help file it's best to copy one of the existing files and use it as a help file it's best to copy one of the existing files and use it as a
template. template.
@@ -332,7 +332,7 @@ remainder of the line, after a Tab, describes the plugin purpose in a short
way. This will show up in the "LOCAL ADDITIONS" section of the main help way. This will show up in the "LOCAL ADDITIONS" section of the main help
file. Check there that it shows up properly: |local-additions|. file. Check there that it shows up properly: |local-additions|.
If you want to add a version number of last modification date, put it in the If you want to add a version number or last modification date, put it in the
second line, right aligned. second line, right aligned.
At the bottom of the help file, place a Vim modeline to set the 'textwidth' At the bottom of the help file, place a Vim modeline to set the 'textwidth'

View File

@@ -81,6 +81,9 @@ modes.
Remove the mapping of {lhs} for the modes where the Remove the mapping of {lhs} for the modes where the
map command applies. The mapping may remain defined map command applies. The mapping may remain defined
for other modes where it applies. for other modes where it applies.
It also works when {lhs} matches the {rhs} of a
mapping. This is for when when an abbreviation
applied.
Note: Trailing spaces are included in the {lhs}. This Note: Trailing spaces are included in the {lhs}. This
unmap does NOT work: > unmap does NOT work: >
:map @@ foo :map @@ foo
@@ -320,6 +323,8 @@ Note:
- For the same reason, |keycodes| like <C-R><C-W> are interpreted as plain, - For the same reason, |keycodes| like <C-R><C-W> are interpreted as plain,
unmapped keys. unmapped keys.
- The command is not echo'ed, no need for <silent>. - The command is not echo'ed, no need for <silent>.
- The {rhs} is not subject to abbreviations nor to other mappings, even if the
mapping is recursive.
- In Visual mode you can use `line('v')` and `col('v')` to get one end of the - In Visual mode you can use `line('v')` and `col('v')` to get one end of the
Visual area, the cursor is at the other end. Visual area, the cursor is at the other end.
- In select-mode, |:map| and |:vmap| command mappings are executed in - In select-mode, |:map| and |:vmap| command mappings are executed in

View File

@@ -292,7 +292,7 @@ to newer commands.
There are actually five histories. The ones we will mention here are for ":" There are actually five histories. The ones we will mention here are for ":"
commands and for "/" and "?" search commands. The "/" and "?" commands share commands and for "/" and "?" search commands. The "/" and "?" commands share
the same history, because they are both search commands. The three other the same history, because they are both search commands. The three other
histories are for expressions, debug more commands and input lines for the histories are for expressions, debug mode commands and input lines for the
input() function. |cmdline-history| input() function. |cmdline-history|
Suppose you have done a ":set" command, typed ten more colon commands and then Suppose you have done a ":set" command, typed ten more colon commands and then

View File

@@ -360,7 +360,8 @@ same amount of text as the last time:
last line the same number of characters as in the last line the last time. last line the same number of characters as in the last line the last time.
The start of the text is the Cursor position. If the "$" command was used as The start of the text is the Cursor position. If the "$" command was used as
one of the last commands to extend the highlighted text, the repeating will one of the last commands to extend the highlighted text, the repeating will
be applied up to the rightmost column of the longest line. be applied up to the rightmost column of the longest line. Any count passed
to the `.` command is not used.
============================================================================== ==============================================================================

View File

@@ -1,7 +1,8 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: indent(1) configuration file " Language: indent(1) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Latest Revision: 2008-07-09 " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Latest Revision: 2008-07-09
if exists("b:did_ftplugin") if exists("b:did_ftplugin")
finish finish

View File

@@ -1,44 +1,70 @@
" Vim filetype plugin file " Vim filetype plugin file
" Language: VisualBasic (ft=vb) " Language: Visual Basic (ft=vb)
" Maintainer: Johannes Zellner <johannes@zellner.org> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Last Change: Thu, 22 Nov 2001 12:56:14 W. Europe Standard Time " Previous Maintainer: Johannes Zellner <johannes@zellner.org>
" Last Change: 2021 Nov 17
if exists("b:did_ftplugin") | finish | endif if exists("b:did_ftplugin")
finish
endif
let b:did_ftplugin = 1 let b:did_ftplugin = 1
setlocal com=sr:'\ -,mb:'\ \ ,el:'\ \ ,:' let s:cpo_save = &cpo
set cpo&vim
setlocal comments=sr:'\ -,mb:'\ \ ,el:'\ \ ,:'
setlocal commentstring='\ %s
setlocal formatoptions-=t formatoptions+=croql
let b:undo_ftplugin = "setlocal com< cms< fo<"
" we need this wrapper, as call doesn't allow a count " we need this wrapper, as call doesn't allow a count
fun! <SID>VbSearch(pattern, flags) function! s:VbSearch(pattern, flags)
let cnt = v:count1 let cnt = v:count1
while cnt > 0 while cnt > 0
call search(a:pattern, a:flags) call search(a:pattern, a:flags)
let cnt = cnt - 1 let cnt = cnt - 1
endwhile endwhile
endfun endfunction
let s:cpo_save = &cpo if !exists("no_plugin_maps") && !exists("no_vb_maps")
set cpo&vim nnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR>
vnoremap <buffer> <silent> [[ <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sbW')<CR>
nnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR>
vnoremap <buffer> <silent> ]] <Cmd>call <SID>VbSearch('^\s*\%(\%(private\<Bar>public\)\s\+\)\=\%(function\<Bar>sub\)', 'sW')<CR>
nnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR>
vnoremap <buffer> <silent> [] <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sbW')<CR>
nnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR>
vnoremap <buffer> <silent> ][ <Cmd>call <SID>VbSearch('^\s*end\s\+\%(function\<Bar>sub\)', 'sW')<CR>
let b:undo_ftplugin .= " | sil! exe 'nunmap <buffer> [[' | sil! exe 'vunmap <buffer> [['" .
\ " | sil! exe 'nunmap <buffer> ]]' | sil! exe 'vunmap <buffer> ]]'" .
\ " | sil! exe 'nunmap <buffer> []' | sil! exe 'vunmap <buffer> []'" .
\ " | sil! exe 'nunmap <buffer> ][' | sil! exe 'vunmap <buffer> ]['"
endif
" NOTE the double escaping \\| " TODO: line start anchors are almost certainly overly restrictive - allow
nnoremap <buffer> <silent> [[ :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'bW')<cr> " after statement separators. Even in QuickBasic only block IF statements
nnoremap <buffer> <silent> ]] :call <SID>VbSearch('^\s*\(\(private\|public\)\s\+\)\=\(function\\|sub\)', 'W')<cr> " were required to be at the start of a line.
nnoremap <buffer> <silent> [] :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'bW')<cr> if exists("loaded_matchit") && !exists("b:match_words")
nnoremap <buffer> <silent> ][ :call <SID>VbSearch('^\s*\<end\>\s\+\(function\\|sub\)', 'W')<cr> let b:match_ignorecase = 1
let b:match_words =
\ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*\%($\|''\):\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' .
\ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' .
\ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' .
\ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' .
\ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' .
\ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' .
\ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' .
\ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' .
\ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>'
let b:undo_ftplugin .= " | unlet! b:match_words b:match_ignorecase"
endif
" matchit support if (has("gui_win32") || has("gui_gtk")) && !exists("b:browsefilter")
if exists("loaded_matchit") let b:browsefilter = "Visual Basic Source Files (*.bas)\t*.bas\n" .
let b:match_ignorecase=1 \ "Visual Basic Form Files (*.frm)\t*.frm\n" .
let b:match_words= \ "All Files (*.*)\t*.*\n"
\ '\%(^\s*\)\@<=\<if\>.*\<then\>\s*$:\%(^\s*\)\@<=\<else\>:\%(^\s*\)\@<=\<elseif\>:\%(^\s*\)\@<=\<end\>\s\+\<if\>,' . let b:undo_ftplugin .= " | unlet! b:browsefilter"
\ '\%(^\s*\)\@<=\<for\>:\%(^\s*\)\@<=\<next\>,' .
\ '\%(^\s*\)\@<=\<while\>:\%(^\s*\)\@<=\<wend\>,' .
\ '\%(^\s*\)\@<=\<do\>:\%(^\s*\)\@<=\<loop\>\s\+\<while\>,' .
\ '\%(^\s*\)\@<=\<select\>\s\+\<case\>:\%(^\s*\)\@<=\<case\>:\%(^\s*\)\@<=\<end\>\s\+\<select\>,' .
\ '\%(^\s*\)\@<=\<enum\>:\%(^\s*\)\@<=\<end\>\s\<enum\>,' .
\ '\%(^\s*\)\@<=\<with\>:\%(^\s*\)\@<=\<end\>\s\<with\>,' .
\ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<function\>\s\+\([^ \t(]\+\):\%(^\s*\)\@<=\<\1\>\s*=:\%(^\s*\)\@<=\<end\>\s\+\<function\>,' .
\ '\%(^\s*\)\@<=\%(\<\%(private\|public\)\>\s\+\)\=\<sub\>\s\+:\%(^\s*\)\@<=\<end\>\s\+\<sub\>'
endif endif
let &cpo = s:cpo_save let &cpo = s:cpo_save

View File

@@ -2,7 +2,7 @@
" "
" Author: Bram Moolenaar " Author: Bram Moolenaar
" Copyright: Vim license applies, see ":help license" " Copyright: Vim license applies, see ":help license"
" Last Change: 2021 Nov 14 " Last Change: 2021 Nov 21
" "
" WORK IN PROGRESS - Only the basics work " WORK IN PROGRESS - Only the basics work
" Note: On MS-Windows you need a recent version of gdb. The one included with " Note: On MS-Windows you need a recent version of gdb. The one included with
@@ -289,8 +289,9 @@ func s:StartDebug_term(dict)
call chansend(s:gdb_job_id, 'set args ' . join(proc_args) . "\r") call chansend(s:gdb_job_id, 'set args ' . join(proc_args) . "\r")
endif endif
" Connect gdb to the communication pty, using the GDB/MI interface " Connect gdb to the communication pty, using the GDB/MI interface.
call chansend(s:gdb_job_id, 'new-ui mi ' . commpty . "\r") " Prefix "server" to avoid adding this to the history.
call chansend(s:gdb_job_id, 'server new-ui mi ' . commpty . "\r")
" Wait for the response to show up, users may not notice the error and wonder " Wait for the response to show up, users may not notice the error and wonder
" why the debugger doesn't work. " why the debugger doesn't work.
@@ -309,7 +310,7 @@ func s:StartDebug_term(dict)
let response = line1 . line2 let response = line1 . line2
if response =~ 'Undefined command' if response =~ 'Undefined command'
echoerr 'Sorry, your gdb is too old, gdb 7.12 is required' echoerr 'Sorry, your gdb is too old, gdb 7.12 is required'
call s:CloseBuffers() call s:CloseBuffers()
return return
endif endif
if response =~ 'New UI allocated' if response =~ 'New UI allocated'
@@ -504,7 +505,7 @@ func TermDebugSendCommand(cmd)
" needed once. " needed once.
call jobstop(s:gdbjob) call jobstop(s:gdbjob)
else else
call s:SendCommand('-exec-interrupt') Stop
endif endif
sleep 10m sleep 10m
endif endif
@@ -595,14 +596,14 @@ func s:DecodeMessage(quotedText)
if a:quotedText[i] == '\' if a:quotedText[i] == '\'
let i += 1 let i += 1
if a:quotedText[i] == 'n' if a:quotedText[i] == 'n'
" drop \n " drop \n
let i += 1 let i += 1
continue continue
elseif a:quotedText[i] == 't' elseif a:quotedText[i] == 't'
" append \t " append \t
let i += 1 let i += 1
let result .= "\t" let result .= "\t"
continue continue
endif endif
endif endif
let result .= a:quotedText[i] let result .= a:quotedText[i]
@@ -657,8 +658,8 @@ func s:EndDebugCommon()
if bufexists(bufnr) if bufexists(bufnr)
exe bufnr .. "buf" exe bufnr .. "buf"
if exists('b:save_signcolumn') if exists('b:save_signcolumn')
let &signcolumn = b:save_signcolumn let &signcolumn = b:save_signcolumn
unlet b:save_signcolumn unlet b:save_signcolumn
endif endif
endif endif
endfor endfor
@@ -769,7 +770,7 @@ func s:CommOutput(job_id, msgs, event)
elseif msg != '' elseif msg != ''
if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)' if msg =~ '^\(\*stopped\|\*running\|=thread-selected\)'
call s:HandleCursor(msg) call s:HandleCursor(msg)
elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,' elseif msg =~ '^\^done,bkpt=' || msg =~ '^=breakpoint-created,' || msg =~ '^=breakpoint-modified,'
call s:HandleNewBreakpoint(msg) call s:HandleNewBreakpoint(msg)
elseif msg =~ '^=breakpoint-deleted,' elseif msg =~ '^=breakpoint-deleted,'
call s:HandleBreakpointDelete(msg) call s:HandleBreakpointDelete(msg)
@@ -809,12 +810,15 @@ func s:InstallCommands()
command Finish call s:SendCommand('-exec-finish') command Finish call s:SendCommand('-exec-finish')
command -nargs=* Run call s:Run(<q-args>) command -nargs=* Run call s:Run(<q-args>)
command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>) command -nargs=* Arguments call s:SendCommand('-exec-arguments ' . <q-args>)
command Stop call s:SendCommand('-exec-interrupt')
" using -exec-continue results in CTRL-C in gdb window not working
if s:way == 'prompt' if s:way == 'prompt'
command Stop call s:PromptInterrupt()
command Continue call s:SendCommand('continue') command Continue call s:SendCommand('continue')
else else
command Stop call s:SendCommand('-exec-interrupt')
" using -exec-continue results in CTRL-C in the gdb window not working,
" communicating via commbuf (= use of SendCommand) has the same result
"command Continue call s:SendCommand('-exec-continue')
command Continue call chansend(s:gdb_job_id, "continue\r") command Continue call chansend(s:gdb_job_id, "continue\r")
endif endif
@@ -913,20 +917,16 @@ func s:SetBreakpoint(at)
let do_continue = 0 let do_continue = 0
if !s:stopped if !s:stopped
let do_continue = 1 let do_continue = 1
if s:way == 'prompt' Stop
call s:PromptInterrupt()
else
call s:SendCommand('-exec-interrupt')
endif
sleep 10m sleep 10m
endif endif
" Use the fname:lnum format, older gdb can't handle --source. " Use the fname:lnum format, older gdb can't handle --source.
let at = empty(a:at) ? let at = empty(a:at) ?
\ fnameescape(expand('%:p')) . ':' . line('.') : a:at \ fnameescape(expand('%:p')) . ':' . line('.') : a:at
call s:SendCommand('-break-insert ' . at) call s:SendCommand('-break-insert ' . at)
if do_continue if do_continue
call s:SendCommand('-exec-continue') Continue
endif endif
endfunc endfunc
@@ -937,23 +937,32 @@ func s:ClearBreakpoint()
let bploc = printf('%s:%d', fname, lnum) let bploc = printf('%s:%d', fname, lnum)
if has_key(s:breakpoint_locations, bploc) if has_key(s:breakpoint_locations, bploc)
let idx = 0 let idx = 0
let nr = 0
for id in s:breakpoint_locations[bploc] for id in s:breakpoint_locations[bploc]
if has_key(s:breakpoints, id) if has_key(s:breakpoints, id)
" Assume this always works, the reply is simply "^done". " Assume this always works, the reply is simply "^done".
call s:SendCommand('-break-delete ' . id) call s:SendCommand('-break-delete ' . id)
for subid in keys(s:breakpoints[id]) for subid in keys(s:breakpoints[id])
exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid)
endfor endfor
unlet s:breakpoints[id] unlet s:breakpoints[id]
unlet s:breakpoint_locations[bploc][idx] unlet s:breakpoint_locations[bploc][idx]
break let nr = id
break
else else
let idx += 1 let idx += 1
endif endif
endfor endfor
if empty(s:breakpoint_locations[bploc]) if nr != 0
unlet s:breakpoint_locations[bploc] if empty(s:breakpoint_locations[bploc])
unlet s:breakpoint_locations[bploc]
endif
echomsg 'Breakpoint ' . id . ' cleared from line ' . lnum . '.'
else
echoerr 'Internal error trying to remove breakpoint at line ' . lnum . '!'
endif endif
else
echomsg 'No breakpoint to remove at line ' . lnum . '.'
endif endif
endfunc endfunc
@@ -965,44 +974,72 @@ func s:Run(args)
endfunc endfunc
func s:SendEval(expr) func s:SendEval(expr)
" clean up expression that may got in because of range " check for "likely" boolean expressions, in which case we take it as lhs
" (newlines and surrounding spaces) if a:expr =~ "[=!<>]="
let expr = a:expr let exprLHS = a:expr
if &filetype ==# 'cobol'
" extra cleanup for COBOL: _every: expression ends with a period,
" a trailing comma is ignored as it commonly separates multiple expr.
let expr = substitute(expr, '\..*', '', '')
let expr = substitute(expr, '[;\n]', ' ', 'g')
let expr = substitute(expr, ',*$', '', '')
else else
let expr = substitute(expr, '\n', ' ', 'g') " remove text that is likely an assignment
let exprLHS = substitute(a:expr, ' *=.*', '', '')
endif endif
let expr = substitute(expr, '^ *\(.*\) *', '\1', '')
" encoding expression to prevent bad errors
let expr = a:expr
let expr = substitute(expr, '\\', '\\\\', 'g')
let expr = substitute(expr, '"', '\\"', 'g')
call s:SendCommand('-data-evaluate-expression "' . expr . '"') call s:SendCommand('-data-evaluate-expression "' . expr . '"')
let s:evalexpr = expr let s:evalexpr = exprLHS
endfunc endfunc
" :Evaluate - evaluate what is under the cursor " :Evaluate - evaluate what is specified / under the cursor
func s:Evaluate(range, arg) func s:Evaluate(range, arg)
let expr = s:GetEvaluationExpression(a:range, a:arg)
let s:ignoreEvalError = 0
call s:SendEval(expr)
endfunc
" get what is specified / under the cursor
func s:GetEvaluationExpression(range, arg)
if a:arg != '' if a:arg != ''
let expr = a:arg " user supplied evaluation
let s:evalFromBalloonExpr = 0 let expr = s:CleanupExpr(a:arg)
" DSW: replace "likely copy + paste" assignment
let expr = substitute(expr, '"\([^"]*\)": *', '\1=', 'g')
elseif a:range == 2 elseif a:range == 2
let pos = getcurpos() let pos = getcurpos()
let reg = getreg('v', 1, 1) let reg = getreg('v', 1, 1)
let regt = getregtype('v') let regt = getregtype('v')
normal! gv"vy normal! gv"vy
let expr = @v let expr = s:CleanupExpr(@v)
call setpos('.', pos) call setpos('.', pos)
call setreg('v', reg, regt) call setreg('v', reg, regt)
let s:evalFromBalloonExpr = 1 let s:evalFromBalloonExpr = 1
else else
" no evaluation provided: get from C-expression under cursor
" TODO: allow filetype specific lookup #9057
let expr = expand('<cexpr>') let expr = expand('<cexpr>')
let s:evalFromBalloonExpr = 1 let s:evalFromBalloonExpr = 1
endif endif
let s:ignoreEvalError = 0 return expr
call s:SendEval(expr) endfunc
" clean up expression that may got in because of range
" (newlines and surrounding whitespace)
func s:CleanupExpr(expr)
" replace all embedded newlines/tabs/...
let expr = substitute( a:expr, '\s', ' ', 'g')
if &filetype ==# 'cobol'
" extra cleanup for COBOL: _every: expression ends with a period,
" a semicolon nmay be used instead of a space
" a trailing comma is ignored as it commonly separates multiple expr
let expr = substitute(expr, '\..*', '', '')
let expr = substitute(expr, ';', ' ', 'g')
let expr = substitute(expr, ',*$', '', '')
endif
" get rid of surrounding spaces
let expr = substitute(expr, '^ *\(.*\) *', '\1', '')
return expr
endfunc endfunc
let s:ignoreEvalError = 0 let s:ignoreEvalError = 0
@@ -1246,15 +1283,15 @@ func s:HandleCursor(msg)
let s:asm_addr = asm_addr let s:asm_addr = asm_addr
let curwinid = win_getid(winnr()) let curwinid = win_getid(winnr())
if win_gotoid(s:asmwin) if win_gotoid(s:asmwin)
let lnum = search('^' . s:asm_addr) let lnum = search('^' . s:asm_addr)
if lnum == 0 if lnum == 0
call s:SendCommand('disassemble $pc') call s:SendCommand('disassemble $pc')
else else
exe 'sign unplace ' . s:asm_id exe 'sign unplace ' . s:asm_id
exe 'sign place ' . s:asm_id . ' line=' . lnum . ' name=debugPC' exe 'sign place ' . s:asm_id . ' line=' . lnum . ' name=debugPC'
endif endif
call win_gotoid(curwinid) call win_gotoid(curwinid)
endif endif
endif endif
@@ -1278,8 +1315,8 @@ func s:HandleCursor(msg)
normal! zv normal! zv
exe 'sign unplace ' . s:pc_id exe 'sign unplace ' . s:pc_id
exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname exe 'sign place ' . s:pc_id . ' line=' . lnum . ' name=debugPC file=' . fname
if !exists('b:save_signcolumn') if !exists('b:save_signcolumn')
let b:save_signcolumn = &signcolumn let b:save_signcolumn = &signcolumn
call add(s:signcolumn_buflist, bufnr()) call add(s:signcolumn_buflist, bufnr())
endif endif
setlocal signcolumn=yes setlocal signcolumn=yes
@@ -1308,7 +1345,12 @@ endfunction
" Handle setting a breakpoint " Handle setting a breakpoint
" Will update the sign that shows the breakpoint " Will update the sign that shows the breakpoint
func s:HandleNewBreakpoint(msg) func s:HandleNewBreakpoint(msg)
if a:msg !~ 'fullname=' if a:msg !~ 'fullname='
" a watch or a pending breakpoint does not have a file name
if a:msg =~ 'pending='
let nr = substitute(a:msg, '.*number=\"\([0-9.]*\)\".*', '\1', '')
let target = substitute(a:msg, '.*pending=\"\([^"]*\)\".*', '\1', '')
echomsg 'Breakpoint ' . nr . ' (' . target . ') pending.'
endif endif
return return
endif endif
@@ -1352,6 +1394,7 @@ func s:HandleNewBreakpoint(msg)
if bufloaded(fname) if bufloaded(fname)
call s:PlaceSign(id, subid, entry) call s:PlaceSign(id, subid, entry)
endif
echomsg 'Breakpoint ' . nr . ' created at line ' . lnum . '.' echomsg 'Breakpoint ' . nr . ' created at line ' . lnum . '.'
endfor endfor
endfunc endfunc
@@ -1371,11 +1414,12 @@ func s:HandleBreakpointDelete(msg)
endif endif
if has_key(s:breakpoints, id) if has_key(s:breakpoints, id)
for [subid, entry] in items(s:breakpoints[id]) for [subid, entry] in items(s:breakpoints[id])
if has_key(entry, 'placed') if has_key(entry, 'placed')
exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid) exe 'sign unplace ' . s:Breakpoint2SignNumber(id, subid)
unlet entry['placed'] unlet entry['placed']
endif endif
endfor endfor
unlet s:breakpoints[id]
echomsg 'Breakpoint ' . id . ' cleared.' echomsg 'Breakpoint ' . id . ' cleared.'
endif endif
endfunc endfunc
@@ -1396,7 +1440,7 @@ func s:BufRead()
let fname = expand('<afile>:p') let fname = expand('<afile>:p')
for [id, entries] in items(s:breakpoints) for [id, entries] in items(s:breakpoints)
for [subid, entry] in items(entries) for [subid, entry] in items(entries)
if entry['fname'] == fname if entry['fname'] == fname
call s:PlaceSign(id, subid, entry) call s:PlaceSign(id, subid, entry)
endif endif
endfor endfor
@@ -1408,7 +1452,7 @@ func s:BufUnloaded()
let fname = expand('<afile>:p') let fname = expand('<afile>:p')
for [id, entries] in items(s:breakpoints) for [id, entries] in items(s:breakpoints)
for [subid, entry] in items(entries) for [subid, entry] in items(entries)
if entry['fname'] == fname if entry['fname'] == fname
let entry['placed'] = 0 let entry['placed'] = 0
endif endif
endfor endfor

View File

@@ -1,7 +1,8 @@
" Vim syntax file " Vim syntax file
" Language: indent(1) configuration file " Language: indent(1) configuration file
" Previous Maintainer: Nikolai Weibull <now@bitwi.se> " Maintainer: Doug Kearns <dougkearns@gmail.com>
" Latest Revision: 2010-01-23 " Previous Maintainer: Nikolai Weibull <now@bitwi.se>
" Last Change: 2021 Nov 17
" indent_is_bsd: If exists, will change somewhat to match BSD implementation " indent_is_bsd: If exists, will change somewhat to match BSD implementation
" "
" TODO: is the deny-all (a la lilo.vim nice or no?)... " TODO: is the deny-all (a la lilo.vim nice or no?)...
@@ -27,7 +28,7 @@ syn region indentComment start='//' skip='\\$' end='$'
\ contains=indentTodo,@Spell \ contains=indentTodo,@Spell
if !exists("indent_is_bsd") if !exists("indent_is_bsd")
syn match indentOptions '-i\|--indentation-level\|-il\|--indent-level' syn match indentOptions '-i\|--indent-level\|-il\|--indent-label'
\ nextgroup=indentNumber skipwhite skipempty \ nextgroup=indentNumber skipwhite skipempty
endif endif
syn match indentOptions '-\%(bli\|c\%([bl]i\|[dip]\)\=\|di\=\|ip\=\|lc\=\|pp\=i\|sbi\|ts\|-\%(brace-indent\|comment-indentation\|case-brace-indentation\|declaration-comment-column\|continuation-indentation\|case-indentation\|else-endif-column\|line-comments-indentation\|declaration-indentation\|indent-level\|parameter-indentation\|line-length\|comment-line-length\|paren-indentation\|preprocessor-indentation\|struct-brace-indentation\|tab-size\)\)' syn match indentOptions '-\%(bli\|c\%([bl]i\|[dip]\)\=\|di\=\|ip\=\|lc\=\|pp\=i\|sbi\|ts\|-\%(brace-indent\|comment-indentation\|case-brace-indentation\|declaration-comment-column\|continuation-indentation\|case-indentation\|else-endif-column\|line-comments-indentation\|declaration-indentation\|indent-level\|parameter-indentation\|line-length\|comment-line-length\|paren-indentation\|preprocessor-indentation\|struct-brace-indentation\|tab-size\)\)'