view runtime/indent/testdir/vim.ok @ 31406:627d4f236ac8 v9.0.1036

patch 9.0.1036: undo misbehaves when writing from an insert mode mapping Commit: https://github.com/vim/vim/commit/3f8f82772313af9f2417b06651f30988b63e1c96 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Dec 8 21:49:35 2022 +0000 patch 9.0.1036: undo misbehaves when writing from an insert mode mapping Problem: Undo misbehaves when writing from an insert mode mapping. Solution: Sync undo when writing. (closes https://github.com/vim/vim/issues/11674)
author Bram Moolenaar <Bram@vim.org>
date Thu, 08 Dec 2022 23:00:03 +0100
parents 3295247d97a5
children cc751d944b7e
line wrap: on
line source

" vim: set ft=vim sw=4 :

" START_INDENT
func Some()
    let x = 1
endfunc

let cmd =
	    \ 'some '
	    \ 'string'

if 1
    let x = [
		\ ]
endif

for x in [
	{key: 'value'},
	]
    eval 0
endfor

let t = [
	    \ {
	    \ 'k': 'val',
	    \ },
	    \  ]

def Func()
    var d = dd
	->extend({
	})
    eval 0
enddef
" END_INDENT

" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 6

let cmd =
      \ 'some '
      \ 'string'

" END_INDENT

" START_INDENT
" INDENT_EXE let g:vim_indent_cont = 5

let list = [
     \ 'one',
     \ 'two']

" END_INDENT

" START_INDENT
" INDENT_EXE unlet g:vim_indent_cont

let list = [
    'one',
    'two',
]
echo

" END_INDENT

" START_INDENT
" INDENT_AT  this-line
func Some()
    let f = x " this-line
endfunc
" END_INDENT

" START_INDENT
" INDENT_NEXT  next-line
func Some()
    " next-line
    let f = x
endfunc
" END_INDENT

" START_INDENT
" INDENT_PREV  prev-line
func Some()
    let f = x
" prev-line
endfunc
" END_INDENT

" START_INDENT
let a =<< END
nothing
END
" END_INDENT

" START_INDENT
let a =<< trim END
    nothing
END
" END_INDENT

" START_INDENT
" INDENT_AT  this-line
let a=<< trim END
   blah
      blah
      blah this-line
END
" END_INDENT

" START_INDENT
if v:true
    echo 0
end
" END_INDENT

" START_INDENT
var result = Func(
    arg1,
    arg2
)
" END_INDENT

" START_INDENT
var result = Func(arg1,
    arg2)
" END_INDENT

" START_INDENT
filter(list, (k, v) =>
    v > 0)
" END_INDENT

" START_INDENT
filter(list, (k, v) => {
    const x = get(list, k, 0)
    return x > 0
})
" END_INDENT

" START_INDENT
if x > 0
    filter(list, (k, v) => {
	const x = get(list, k, 1)
	return x > 0
    })
endif
" END_INDENT

" START_INDENT
{
    var temp = 'temp'
}
" END_INDENT

" START_INDENT
var text = lead
    .. middle
    .. end
" END_INDENT

" START_INDENT
var text = lead ..
    middle ..
    end
" END_INDENT

" START_INDENT
var total = start +
    end -
    correction
" END_INDENT

" START_INDENT
var result = start
:+ print
" END_INDENT

" START_INDENT
var result = positive
    ? PosFunc(arg)
    : NegFunc(arg)
" END_INDENT

" START_INDENT
var result = GetBuilder()
    ->BuilderSetWidth(333)
    ->BuilderSetHeight(777)
    ->BuilderBuild()
" END_INDENT

" START_INDENT
var result = MyDict
    .member
" END_INDENT

" START_INDENT
autocmd BufNewFile *.match if condition
    |   echo 'match'
    | endif
" END_INDENT

" START_INDENT
set cpo+=C
var lines =<< trim END
    | this works
END
set cpo-=C
" END_INDENT

" START_INDENT
syn region Text
	    \ start='foo'
	    #\ comment
	    \ end='bar'
" END_INDENT

" START_INDENT
au CursorHold * echom 'BEFORE bar'
    #\ some comment
    | echom 'AFTER bar'
" END_INDENT

" START_INDENT
def MyFunc(text: string,
	separator = '-'
	): string
enddef
" END_INDENT

" START_INDENT
def MyFunc(
	text: string,
	separator = '-'
	): string
enddef
" END_INDENT

" START_INDENT
[var1, var2] =
    Func()
" END_INDENT

" START_INDENT
const list = ['one',
    'two']
" END_INDENT

" START_INDENT
const list = [
    'one',
    'two',
]
" END_INDENT

" START_INDENT
const dict = {one: 1,
    two: 2
}
" END_INDENT

" START_INDENT
const dict = {
    one: 1,
    two: 2
}
" END_INDENT

" START_INDENT
if true
    const dict =
	{
	    one: 1,
	    two: 2
	}
endif
" END_INDENT

" START_INDENT
def Func()
    return {
	one: 1
    }
enddef
" END_INDENT

" START_INDENT
echo {
    a: 0,
    # b
    # c
}
" END_INDENT

" START_INDENT
echo search(
    # comment
    '1'
    .. '2'
)
" END_INDENT

" START_INDENT
if true
    var v = (      # trailing "(" starts line continuation
	3 + 4      # nothing special
    )              # end of expression indicates continued line
    var x: number  # needs to align with previous "var"
endif
" END_INDENT

" START_INDENT
def Func() # {{{
    # comment
    if true
	return
    endif
enddef
" END_INDENT

" START_INDENT
echo {
    key:
	'value',
}
" END_INDENT

" START_INDENT
var id = time
    ->timer_start((_) => {
	n = 0
    })
" END_INDENT

" START_INDENT
augroup Name
    autocmd!
augroup END
" END_INDENT

" START_INDENT
var n =
    # comment
    1
    + 2

var s = ''
" END_INDENT

" START_INDENT
var keys = {
    J: 'j',
    "\<Home>": '1G',
    "\<End>": 'G',
    z: 'zz'
}
" END_INDENT

" START_INDENT
export def Func(
	n: number,
	s: string,
	...l: list<bool>
	)
enddef
" END_INDENT

" START_INDENT
var heredoc =<< trim ENDD
    var nested_heredoc =<< trim END
    END
ENDD
" END_INDENT

" START_INDENT
if true
else  " comment
endif
" END_INDENT

" START_INDENT
if true | echo 'one' | endif
if true | echo 'two' | endif
if true | echo 'three' | endif
" END_INDENT

" START_INDENT
if true
    :'<-1 mark <
else
    echo ''
endif
" END_INDENT

" START_INDENT
substitute/pat /rep /
echo
" END_INDENT

" START_INDENT
try
    echo 1
catch /pat /  # comment
    echo 2
endtry
" END_INDENT

" START_INDENT
def Func()
    Cmd %
enddef
" END_INDENT

" START_INDENT
if end == 'xxx' || end == 'yyy'
    echo
endif
" END_INDENT

" START_INDENT
if true
    popup_move(id, {col: 1,
	line: 2})
endif
setwinvar(id, 'name', 3)
" END_INDENT

" START_INDENT
var d = [
    {a: 'x',
	b: 'y'},
    FuncA(),
    FuncB(),
]
" END_INDENT

" START_INDENT
var ll = [[
    1,
    2,
    3], [
    4,
    5,
    6], [
    7,
    8,
    9]]
" END_INDENT

" START_INDENT
var ld = [{
    a: 'xxx',
    b: 'yyy'}, {
    c: 'xxx',
    d: 'yyy'}, {
    e: 'xxx',
    f: 'yyy'}, {
    }]
" END_INDENT

" START_INDENT
var d = {
    a: {
	b: {
	    c: [{
		d: 'e',
		f: 'g',
		h: 'i'
	    }],
	    j: 'k',
	},
    },
}
" END_INDENT

" START_INDENT
if true
    var end: any
    if true
	end = 0
    elseif true
	echo
    endif
endif
" END_INDENT

" START_INDENT
nunmap <buffer> (
nunmap <buffer> )
inoremap [ {
inoremap ] }
silent! xunmap i{
silent! xunmap a{
" END_INDENT

" START_INDENT
def Func(
	s: string,
	n = 1,
	m = 2
	)
enddef
" END_INDENT

" START_INDENT
var h =<< END
text
END

def Func()
    echo
enddef
" END_INDENT

" START_INDENT
def Func()
    var h =<< END
text
END
    echo 'test'
enddef
" END_INDENT

" START_INDENT
def Foo()
    lcd -
enddef
def Bar()
    echo
enddef
" END_INDENT

" START_INDENT
if true
    n = Func(1, 2,
	3)
endif
" END_INDENT

" START_INDENT
def Func(s: string,
	n: number): bool
    if true
	return false
    endif
enddef
" END_INDENT

" START_INDENT
def Func(
	n: number)
    #
    echo
enddef
" END_INDENT

" START_INDENT
" INDENT_AT  this-line
def Func(
	n: number)
    #
    echo  # this-line
enddef
" END_INDENT

" START_INDENT
if true
    if true
	normal! ==
    endif
endif
" END_INDENT

" START_INDENT
var d = {
    a: () => true,
    b: () => true
	&& true
	&& Foo(),
    c: () => Bar(),
    e: () => Baz(),
}
" END_INDENT

" START_INDENT
def Select(Cont: func(func(any)), Pred: func(any): bool): func(func(any))
    return (Emit: func(any)) => {
	Cont((t: any) => {
	    if Pred(t)
		Emit(t)
	    endif
	})
    }
enddef
" END_INDENT

" START_INDENT
" INDENT_EXE let g:vim_indent = {'more_in_bracket_block': v:true}
def Select(Cont: func(func(any)), Pred: func(any): bool): func(func(any))
    return (Emit: func(any)) => {
	    Cont((t: any) => {
		    if Pred(t)
			Emit(t)
		    endif
		})
	}
enddef
" END_INDENT

" START_INDENT
" INDENT_EXE unlet! g:vim_indent
" END_INDENT

" START_INDENT
g:lightline = {
    'active': {
	'left': [ [ 'mode', 'paste' ], [ 'readonly', 'relativepath', 'modified' ] ],
    },
    'inactive': {
	'left': [ [ 'readonly', 'relativepath', 'modified' ] ],
    }
}
" END_INDENT

" START_INDENT
if getline(1, 10)
	->map((_, v: string): number => strcharlen(v))
	->max() > 1'000
    &l:breakindent = false
    &l:linebreak = false
else
    &l:breakindent = true
    &l:linebreak = true
endif
" END_INDENT

" START_INDENT
var ext2cmd: dict<string> = {
    doc: $'antiword {fname}',
    docx: $'pandoc --from=docx --to=markdown {fname}',
    epub: $'pandoc --from=epub --to=markdown {fname}',
    odp: $'odt2txt {fname}',
    odt: $'odt2txt {fname}',
    pdf: $'pdftotext -nopgbrk -layout -q -eol unix {fname} -',
    rtf: 'unrtf --text',
}
" END_INDENT

" START_INDENT
const ptybuf: number = term_start(&shell, {
    hidden: true,
    exit_cb: (_, _) => {
	if true
	    close
	else
	    help
	endif
    }
})
" END_INDENT

" START_INDENT
var d = {
    a: 0,
    # a ' quote {{{
    #}}}
    b: 0,
}
" END_INDENT

" START_INDENT
echo printf('%s () %s',
    1,
    2
)
" END_INDENT

" START_INDENT
prop_add(1, col('.'), {
    length: 2,
    type: 'test'
})
" END_INDENT

" START_INDENT
echo (() => " string starting with space")()
echo
" END_INDENT

" START_INDENT
var variables = deepcopy(g:)
    ->filter((k: string, _): bool =>
	k =~ '\c\V' .. keyword->escape('\')
	&& k !~ '\%(loaded\|did_plugin_\)')
    ->items()
    ->map((_, v): string => v[0] .. ' = ' .. string(v[1]))
new
" END_INDENT

" START_INDENT
var d = freq
    ->map((_, v) =>
	v * (
	    1
	    + 2
	))
for item in d
	->items()
	->sort((a, b) => b[1] - a[1])
    echo
endfor
" END_INDENT

" START_INDENT
make_job = job_start([&shell, &shellcmdflag, make_cmd], {
    callback: function(MakeProcessOutput, [qfid]),
    close_cb: function(MakeCloseCb, [qfid]),
    exit_cb: MakeCompleted,
    in_io: 'null'
})
" END_INDENT

" START_INDENT
var matching_abbrev: list<dict<string>> = copy(ABBREV)
    ->filter((_, v: dict<string>): bool =>
	stridx(v.lhs, word_to_complete) == 0)
    ->map((_, v: dict<string>) => ({
	word: v.lhs,
	menu: AbbrevRhs(v.rhs)->stridx('expand_') >= 0
	    ?    AbbrevRhs(v.rhs)->matchstr('.*,\s*''\zs.*\ze'')')
	    :    AbbrevRhs(v.rhs)
    }))
" END_INDENT

" START_INDENT
def Func()
    if true
	vimgrep /^\C\s*\%(fu\%[nction]\|def\)\s\+/ file
    endif
enddef
" END_INDENT

" START_INDENT
setlocal iskeyword+=[
cword = expand('<cword>')
" END_INDENT

" START_INDENT
silent if true
    echo
endif
" END_INDENT

" START_INDENT
def Func()
    sort :^.*[\/]:
enddef
" END_INDENT

" START_INDENT
def Func()
    d = {
    }
    hd =<< trim END
	['
	]'
    END
enddef
" END_INDENT

" START_INDENT
def Func()
    if true
	var hd =<< trim END
	    if get(b:, 'current_syntax', '')
	    endif
	END
    elseif true
	echo
    endif
enddef
" END_INDENT

" START_INDENT
# test for control-flow keyword followed by commented fold marker {{{
if true
    echo
endif #}}}
" END_INDENT

" START_INDENT
if winsz == 0|let winsz= ""|endif
exe "noswapfile ".winsz."wincmd s"
" END_INDENT

" START_INDENT
if true
    if true
	windo if true | echo | endif
	augroup Name
	    autocmd WinLeave * if true | eval 1 + 2 | endif
	augroup END
    endif
endif
" END_INDENT

" START_INDENT
if true
    echo ' =<< trim END'
	->len()
endif
" END_INDENT

" START_INDENT
function Func()
    if true
	if true
	    if true | echo com | endif
	    if true | echo com | endif
	endif
    else
    endif
endfunction
" END_INDENT

" START_INDENT
function Func()
    if v:true
	+
	echo
	-
    endif
endfunction
" END_INDENT

" START_INDENT
var matchpairs: string = &matchpairs
var pairs: dict<list<string>>
for [opening: string, closing: string]
	in matchpairs
	->split(',')
	->map((_, v: string): list<string> => split(v, ':'))
    pairs[opening] = [escape(opening, '[]'), escape(closing, '[]'),  'nW', 'w$']
    pairs[closing] = [escape(opening, '[]'), escape(closing, '[]'), 'bnW', 'w0']
endfor
" END_INDENT

" START_INDENT
{
    echo []
	+ []
	+ [{a: 1,
	b: 2}]
}
" END_INDENT

" START_INDENT
silent! argdel *
edit file
" END_INDENT

" START_INDENT
def Foo()
    Bar(1,
	[]->filter((_, v) => {
	    return true
	}),
	() => {
	    echo
	})
enddef
" END_INDENT

" START_INDENT
echo {
    k: () => {
	if true
	    echo
	    popup_setoptions(id,
		{title: 'title'})
	endif
    }
}
" END_INDENT

" START_INDENT
if true
elseif
endif
" END_INDENT