mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
Problem: Using \{xxx} for encoding a modifier is not nice. Solution: Use \<*xxx> instead, since it's the same as \<xxx> but producing a different code.
152 lines
4.3 KiB
VimL
152 lines
4.3 KiB
VimL
" Tests for 'backspace' settings
|
|
|
|
func Exec(expr)
|
|
let str=''
|
|
try
|
|
exec a:expr
|
|
catch /.*/
|
|
let str=v:exception
|
|
endtry
|
|
return str
|
|
endfunc
|
|
|
|
func Test_backspace_option()
|
|
set backspace=
|
|
call assert_equal('', &backspace)
|
|
set backspace=indent
|
|
call assert_equal('indent', &backspace)
|
|
set backspace=eol
|
|
call assert_equal('eol', &backspace)
|
|
set backspace=start
|
|
call assert_equal('start', &backspace)
|
|
set backspace=nostop
|
|
call assert_equal('nostop', &backspace)
|
|
" Add the value
|
|
set backspace=
|
|
set backspace=indent
|
|
call assert_equal('indent', &backspace)
|
|
set backspace+=eol
|
|
call assert_equal('indent,eol', &backspace)
|
|
set backspace+=start
|
|
call assert_equal('indent,eol,start', &backspace)
|
|
set backspace+=nostop
|
|
call assert_equal('indent,eol,start,nostop', &backspace)
|
|
" Delete the value
|
|
set backspace-=nostop
|
|
call assert_equal('indent,eol,start', &backspace)
|
|
set backspace-=indent
|
|
call assert_equal('eol,start', &backspace)
|
|
set backspace-=start
|
|
call assert_equal('eol', &backspace)
|
|
set backspace-=eol
|
|
call assert_equal('', &backspace)
|
|
" Check the error
|
|
call assert_equal(0, match(Exec('set backspace=ABC'), '.*E474'))
|
|
call assert_equal(0, match(Exec('set backspace+=def'), '.*E474'))
|
|
" NOTE: Vim doesn't check following error...
|
|
"call assert_equal(0, match(Exec('set backspace-=ghi'), '.*E474'))
|
|
|
|
" Check backwards compatibility with version 5.4 and earlier
|
|
set backspace=0
|
|
call assert_equal('0', &backspace)
|
|
set backspace=1
|
|
call assert_equal('1', &backspace)
|
|
set backspace=2
|
|
call assert_equal('2', &backspace)
|
|
set backspace=3
|
|
call assert_equal('3', &backspace)
|
|
call assert_false(match(Exec('set backspace=4'), '.*E474'))
|
|
call assert_false(match(Exec('set backspace=10'), '.*E474'))
|
|
|
|
" Cleared when 'compatible' is set
|
|
set compatible
|
|
call assert_equal('', &backspace)
|
|
set nocompatible viminfo+=nviminfo
|
|
endfunc
|
|
|
|
" Test with backspace set to the non-compatible setting
|
|
func Test_backspace_ctrl_u()
|
|
new
|
|
call append(0, [
|
|
\ "1 this shouldn't be deleted",
|
|
\ "2 this shouldn't be deleted",
|
|
\ "3 this shouldn't be deleted",
|
|
\ "4 this should be deleted",
|
|
\ "5 this shouldn't be deleted",
|
|
\ "6 this shouldn't be deleted",
|
|
\ "7 this shouldn't be deleted",
|
|
\ "8 this shouldn't be deleted (not touched yet)"])
|
|
call cursor(2, 1)
|
|
|
|
set compatible
|
|
set backspace=2
|
|
|
|
exe "normal Avim1\<C-U>\<Esc>\<CR>"
|
|
exe "normal Avim2\<C-G>u\<C-U>\<Esc>\<CR>"
|
|
|
|
set cpo-=<
|
|
inoremap <c-u> <left><c-u>
|
|
exe "normal Avim3\<*C-U>\<Esc>\<CR>"
|
|
iunmap <c-u>
|
|
exe "normal Avim4\<C-U>\<C-U>\<Esc>\<CR>"
|
|
|
|
" Test with backspace set to the compatible setting
|
|
set backspace= visualbell
|
|
exe "normal A vim5\<Esc>A\<C-U>\<C-U>\<Esc>\<CR>"
|
|
exe "normal A vim6\<Esc>Azwei\<C-G>u\<C-U>\<Esc>\<CR>"
|
|
|
|
inoremap <c-u> <left><c-u>
|
|
exe "normal A vim7\<*C-U>\<*C-U>\<Esc>\<CR>"
|
|
|
|
call assert_equal([
|
|
\ "1 this shouldn't be deleted",
|
|
\ "2 this shouldn't be deleted",
|
|
\ "3 this shouldn't be deleted",
|
|
\ "4 this should be deleted3",
|
|
\ "",
|
|
\ "6 this shouldn't be deleted vim5",
|
|
\ "7 this shouldn't be deleted vim6",
|
|
\ "8 this shouldn't be deleted (not touched yet) vim7",
|
|
\ ""], getline(1, '$'))
|
|
|
|
" Reset values
|
|
set compatible&vim
|
|
set visualbell&vim
|
|
set backspace&vim
|
|
|
|
" Test new nostop option
|
|
%d_
|
|
let expected = "foo bar foobar"
|
|
call setline(1, expected)
|
|
call cursor(1, 8)
|
|
exe ":norm! ianotherone\<c-u>"
|
|
call assert_equal(expected, getline(1))
|
|
call cursor(1, 8)
|
|
exe ":norm! ianothertwo\<c-w>"
|
|
call assert_equal(expected, getline(1))
|
|
|
|
let content = getline(1)
|
|
for value in ['indent,nostop', 'eol,nostop', 'indent,eol,nostop', 'indent,eol,start,nostop']
|
|
exe ":set bs=".. value
|
|
%d _
|
|
call setline(1, content)
|
|
let expected = " foobar"
|
|
call cursor(1, 8)
|
|
exe ":norm! ianotherone\<c-u>"
|
|
call assert_equal(expected, getline(1), 'CTRL-U backspace value: '.. &bs)
|
|
let expected = "foo foobar"
|
|
call setline(1, content)
|
|
call cursor(1, 8)
|
|
exe ":norm! ianothertwo\<c-w>"
|
|
call assert_equal(expected, getline(1), 'CTRL-W backspace value: '.. &bs)
|
|
endfor
|
|
|
|
" Reset options
|
|
set compatible&vim
|
|
set visualbell&vim
|
|
set backspace&vim
|
|
close!
|
|
endfunc
|
|
|
|
" vim: shiftwidth=2 sts=2 expandtab
|