mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 03:18:16 +00:00
@@ -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
|
||||||
|
@@ -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.
|
||||||
|
|
||||||
|
@@ -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'
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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.
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
180
runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
vendored
180
runtime/pack/dist/opt/termdebug/plugin/termdebug.vim
vendored
@@ -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
|
||||||
|
@@ -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\)\)'
|
||||||
|
Reference in New Issue
Block a user