Problem: More functions can be used as methods.
Solution: Make various functions usable as a method.
Can also be used as a |method|, the base is used for the
second argument: >
- GetPattern()->histadd('search')
+ GetHistory()->histadd('search')
histdel({history} [, {item}]) *histdel()*
Clear {history}, i.e. delete all its entries. See |hist-names|
arbitrary number that can only be used to compare to the
attribute at other positions.
+ Can also be used as a |method|: >
+ GetRow()->screenattr(col)
+
screenchar({row}, {col}) *screenchar()*
The result is a Number, which is the character at position
[row, col] on the screen. This works for every possible
This is mainly to be used for testing.
Returns -1 when row or col is out of range.
+ Can also be used as a |method|: >
+ GetRow()->screenchar(col)
+
screenchars({row}, {col}) *screenchars()*
The result is a List of Numbers. The first number is the same
as what |screenchar()| returns. Further numbers are
This is mainly to be used for testing.
Returns an empty List when row or col is out of range.
+ Can also be used as a |method|: >
+ GetRow()->screenchars(col)
+
screencol() *screencol()*
The result is a Number, which is the current screen column of
the cursor. The leftmost column has number 1.
a Tab it would be the same as "endcol", while for a double
width character it would be the same as "col".
+ Can also be used as a |method|: >
+ GetWinid()->screenpos(lnum, col)
+
screenrow() *screenrow()*
The result is a Number, which is the current screen row of the
cursor. The top line has number one.
This is mainly to be used for testing.
Returns an empty String when row or col is out of range.
+ Can also be used as a |method|: >
+ GetRow()->screenstring(col)
+
search({pattern} [, {flags} [, {stopline} [, {timeout}]]]) *search()*
Search for regexp pattern {pattern}. The search starts at the
cursor position (you can use |cursor()| to set it).
without the 'e' flag if the cursor is on the "f" of "if".
The 'n' flag tells the function not to move the cursor.
+ Can also be used as a |method|: >
+ GetPattern()->search()
searchdecl({name} [, {global} [, {thisblock}]]) *searchdecl()*
Search for the declaration of {name}.
if searchdecl('myvar') == 0
echo getline('.')
endif
+<
+ Can also be used as a |method|: >
+ GetName()->searchdecl()
<
*searchpair()*
searchpair({start}, {middle}, {end} [, {flags} [, {skip}
< In this example "submatch" is 2 when a lowercase letter is
found |/\l|, 3 when an uppercase letter is found |/\u|.
+ Can also be used as a |method|: >
+ GetPattern()->searchpos()
+
server2client({clientid}, {string}) *server2client()*
Send a reply string to {clientid}. The most recent {clientid}
that sent a string can be retrieved with expand("<client>").
See also |clientserver|.
Example: >
:echo server2client(expand("<client>"), "HELLO")
+
+< Can also be used as a |method|: >
+ GetClientId()->server2client(string)
<
serverlist() *serverlist()*
Return a list of available server names, one per line.
{lnum} is not valid then 1 is returned. On success 0 is
returned.
+ Can also be used as a |method|: >
+ GetText()->setbufline(buf, lnum)
+
setbufvar({expr}, {varname}, {val}) *setbufvar()*
Set option or local variable {varname} in buffer {expr} to
{val}.
:call setbufvar("todo", "myvar", "foobar")
< This function is not available in the |sandbox|.
+ Can also be used as a |method|: >
+ GetValue()->setbufvar(buf, varname)
+
setcharsearch({dict}) *setcharsearch()*
Set the current character search information to {dict},
which contains one or more of the following entries:
:call setcharsearch(prevsearch)
< Also see |getcharsearch()|.
+ Can also be used as a |method|: >
+ SavedSearch()->setcharsearch()
+
setcmdpos({pos}) *setcmdpos()*
Set the cursor position in the command line to byte position
{pos}. The first position is 1.
Returns 0 when successful, 1 when not editing the command
line.
+ Can also be used as a |method|: >
+ GetPos()->setcmdpos()
+
setenv({name}, {val}) *setenv()*
Set environment variable {name} to {val}.
When {val} is |v:null| the environment variable is deleted.
See also |expr-env|.
+ Can also be used as a |method|, passing the value as the base: >
+ GetPath()->setenv('PATH')
+
setfperm({fname}, {mode}) *setfperm()* *chmod*
Set the file permissions for {fname} to {mode}.
{mode} must be a string with 9 characters. It is of the form
< Note: The '[ and '] marks are not set.
+ Can also be used as a |method|, passing the text as the base: >
+ GetText()->setline(lnum)
+
setloclist({nr}, {list} [, {action} [, {what}]]) *setloclist()*
Create or replace or add to the location list for window {nr}.
{nr} can be the window number or the |window-ID|.
#ifdef FEAT_RUBY
{"rubyeval", 1, 1, FEARG_1, f_rubyeval},
#endif
- {"screenattr", 2, 2, 0, f_screenattr},
- {"screenchar", 2, 2, 0, f_screenchar},
- {"screenchars", 2, 2, 0, f_screenchars},
+ {"screenattr", 2, 2, FEARG_1, f_screenattr},
+ {"screenchar", 2, 2, FEARG_1, f_screenchar},
+ {"screenchars", 2, 2, FEARG_1, f_screenchars},
{"screencol", 0, 0, 0, f_screencol},
- {"screenpos", 3, 3, 0, f_screenpos},
+ {"screenpos", 3, 3, FEARG_1, f_screenpos},
{"screenrow", 0, 0, 0, f_screenrow},
- {"screenstring", 2, 2, 0, f_screenstring},
- {"search", 1, 4, 0, f_search},
- {"searchdecl", 1, 3, 0, f_searchdecl},
+ {"screenstring", 2, 2, FEARG_1, f_screenstring},
+ {"search", 1, 4, FEARG_1, f_search},
+ {"searchdecl", 1, 3, FEARG_1, f_searchdecl},
{"searchpair", 3, 7, 0, f_searchpair},
{"searchpairpos", 3, 7, 0, f_searchpairpos},
- {"searchpos", 1, 4, 0, f_searchpos},
- {"server2client", 2, 2, 0, f_server2client},
+ {"searchpos", 1, 4, FEARG_1, f_searchpos},
+ {"server2client", 2, 2, FEARG_1, f_server2client},
{"serverlist", 0, 0, 0, f_serverlist},
- {"setbufline", 3, 3, 0, f_setbufline},
- {"setbufvar", 3, 3, 0, f_setbufvar},
- {"setcharsearch", 1, 1, 0, f_setcharsearch},
- {"setcmdpos", 1, 1, 0, f_setcmdpos},
- {"setenv", 2, 2, 0, f_setenv},
+ {"setbufline", 3, 3, FEARG_3, f_setbufline},
+ {"setbufvar", 3, 3, FEARG_3, f_setbufvar},
+ {"setcharsearch", 1, 1, FEARG_1, f_setcharsearch},
+ {"setcmdpos", 1, 1, FEARG_1, f_setcmdpos},
+ {"setenv", 2, 2, FEARG_2, f_setenv},
{"setfperm", 2, 2, FEARG_1, f_setfperm},
- {"setline", 2, 2, 0, f_setline},
+ {"setline", 2, 2, FEARG_2, f_setline},
{"setloclist", 2, 4, 0, f_setloclist},
{"setmatches", 1, 2, 0, f_setmatches},
{"setpos", 2, 2, 0, f_setpos},
let b = bufnr('%')
wincmd w
call assert_equal(1, setbufline(b, 5, ['x']))
- call assert_equal(1, setbufline(bufnr('$') + 1, 1, ['x']))
+ call assert_equal(1, ['x']->setbufline(bufnr('$') + 1, 1))
call assert_equal(0, setbufline(b, 4, ['d', 'e']))
call assert_equal(['c'], b->getbufline(3))
call assert_equal(['d'], getbufline(b, 4))
" check that setcharsearch() changes the settings.
3
normal! ylfep
- call setcharsearch({'char': 'k'})
+ eval {'char': 'k'}->setcharsearch()
normal! ;p
call setcharsearch({'forward': 0})
normal! $;p
call remote_send(name, ":call server2client(expand('<client>'), 'got it')\<CR>", 'g:myserverid')
call assert_equal('got it', g:myserverid->remote_read(2))
- call remote_send(name, ":call server2client(expand('<client>'), 'another')\<CR>", 'g:myserverid')
+ call remote_send(name, ":eval expand('<client>')->server2client('another')\<CR>", 'g:myserverid')
let peek_result = 'nothing'
let r = g:myserverid->remote_peek('peek_result')
" unpredictable whether the result is already available.
call assert_equal('"12ab', @:)
" setcmdpos() returns 1 when not editing the command line.
- call assert_equal(1, setcmdpos(3))
+ call assert_equal(1, 3->setcmdpos())
endfunc
func Test_cmdline_overstrike()
call assert_equal({'row': winrow,
\ 'col': wincol + 13,
\ 'curscol': wincol + 13,
- \ 'endcol': wincol + 13}, screenpos(winid, 1, 7))
+ \ 'endcol': wincol + 13}, winid->screenpos(1, 7))
call assert_equal({'row': winrow + 2,
\ 'col': wincol + 1,
\ 'curscol': wincol + 1,
call setline(1, ['One', '', 'Two', 'Three'])
diffthis
redraw
- call assert_notequal(normattr, screenattr(1, 1))
+ call assert_notequal(normattr, 1->screenattr(1))
diffoff!
redraw
call assert_equal(normattr, screenattr(1, 1))
func Test_setenv()
unlet! $TESTENV
- call setenv('TEST ENV', 'foo')
+ eval 'foo'->setenv('TEST ENV')
call assert_equal('foo', getenv('TEST ENV'))
call setenv('TEST ENV', v:null)
call assert_equal(v:null, getenv('TEST ENV'))
wincmd h
let wh = winheight('.')
let dummy_buf = bufnr('dummy_buf2', v:true)
- call setbufvar(dummy_buf, '&buftype', 'nofile')
+ eval 'nofile'->setbufvar(dummy_buf, '&buftype')
execute 'belowright vertical split #' . dummy_buf
call assert_equal(wh, winheight('.'))
" is invalid in that buffer.
call writefile(['just one line'], 'Xfuncrange2')
new
- call setline(1, 10->range())
+ eval 10->range()->setline(1)
write Xfuncrange1
call assert_fails('5,8call EditAnotherFile()', 'E16:')
func s:screenline(lnum) abort
let line = []
for c in range(1, winwidth(0))
- call add(line, nr2char(screenchar(a:lnum, c)))
+ call add(line, nr2char(a:lnum->screenchar(c)))
endfor
return s:trim(join(line, ''))
endfunc
sleep 700m
redraw
- let line = join(map(range(1, 5), 'screenstring(1, v:val)'), '')
+ let line = join(map(range(1, 5), '1->screenstring(v:val)'), '')
call assert_equal('hello', line)
call popup_create('on the command line', #{
normal gg
- call search('foobar', 'c')
+ eval 'foobar'->search('c')
call assert_equal([1, 1], [line('.'), col('.')])
normal j
set norl
endif
endfunc
+
+func Test_searchdecl()
+ let lines =<< trim END
+ int global;
+
+ func()
+ {
+ int global;
+ if (cond) {
+ int local;
+ }
+ int local;
+ // comment
+ }
+ END
+ new
+ call setline(1, lines)
+ 10
+ call assert_equal(0, searchdecl('local', 0, 0))
+ call assert_equal(7, getcurpos()[1])
+
+ 10
+ call assert_equal(0, 'local'->searchdecl(0, 1))
+ call assert_equal(9, getcurpos()[1])
+
+ 10
+ call assert_equal(0, searchdecl('global'))
+ call assert_equal(5, getcurpos()[1])
+
+ 10
+ call assert_equal(0, searchdecl('global', 1))
+ call assert_equal(1, getcurpos()[1])
+
+ bwipe!
+endfunc
call cursor(1, 1)
call assert_equal([1, 1, 2], searchpos('\%(\([a-z]\)\|\_.\)\{-}xyz', 'pcW'))
call cursor(1, 2)
- call assert_equal([2, 1, 1], searchpos('\%(\([a-z]\)\|\_.\)\{-}xyz', 'pcW'))
+ call assert_equal([2, 1, 1], '\%(\([a-z]\)\|\_.\)\{-}xyz'->searchpos('pcW'))
set cpo-=c
call cursor(1, 2)
call assert_equal([1, 2, 2], searchpos('\%(\([a-z]\)\|\_.\)\{-}xyz', 'pcW'))
call setline(1, ["ABC\u0308"])
redraw
call assert_equal([0x0041], screenchars(1, 1))
- call assert_equal([0x0042], screenchars(1, 2))
+ call assert_equal([0x0042], 1->screenchars(2))
call assert_equal([0x0043, 0x0308], screenchars(1, 3))
call assert_equal("A", screenstring(1, 1))
call assert_equal("B", screenstring(1, 2))
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 1993,
/**/
1992,
/**/