Solved by this prevent conditionnal test if !exists('*MyFunction') fun MyFunction ... endfun endif as described https://stackoverflow.com/questions/31663750/function-already-exists-vim
Le vendredi 14 octobre 2022 à 22:25:29 UTC+2, N V a écrit : > Hi, > > I got reentrancy side effect with a bufenter autocommand on header > considering these feature. > > > - First def func1 is processing current buffer (cpp, h) to add > text_prop on header file and underline them. => works Fin > - Inside this func1 declare func2 to search and open underlined > header double cliked. > > > The vim9script that do the job : > *export def* UnderLineHeaders(): void > > var *headers*: dict<string> = {} > .. some stuff > .. some stuff > > > *def* *g:OpeningHeader*(): void > .. some stuff > .. some stuff > *enddef* > > nnoremap <buffer> <2-Leftmouse> :call *g:OpeningHeader*()<CR> > *enddef* > > > > The error I got when double clik on header : > Error detected while processing function OpeningHeader[21]..BufEnter > Autocommands for "*.h"..function nvhelper#UnderLineHeaders: > line 28: > *E122: *Function OpeningHeader *already exists, add ! *to replace it > > > > How can I force the g:OpeningHeader def func ? > Thank you > Nicolas > > > *The complete code * > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > *export def UnderLineHeaders(): void var patterns: dict<string> = { > 'header': '\w\+\.h' } var headers: dict<string> = {} var list_of_line: > list<string> = getline(1, '$') var lineno: number = 1 var res: string = > '' # identify headers' lines for line in list_of_line res = > matchstr(line, patterns.header) if res != "" headers[lineno] = res > endif lineno = lineno + 1 endfor # some declarations before adding > text prop call prop_type_delete('header') hi Underlined_Header > ctermbg=NONE ctermfg=NONE cterm=UNDERLINE guibg=NONE guifg=NONE > gui=UNDERLINE call prop_type_add('header', {'highlight': > 'Underlined_Header'}) # add prop on headers var col: number = -1 for key > in keys(headers) lineno = key->str2nr() col = stridx(getline(lineno), > headers[key]) + 1 call prop_add(lineno, col, {'length': > headers[key]->len(), 'type': 'header'}) endfor def g:OpeningHeader(): > void var curlnum: number = getcurpos()[1] var key: string = > getcurpos()[1]->string() if has_key(headers, key) var searchedfile: > string = headers[getcurpos()[1]->string()] echomsg 'File to search for > is ' .. searchedfile var currentpath: list<string> = > expand("%:p:h")->split('\\') var idxfolder: number = 1 var > maxfolders: number = currentpath->len() var foundedfile: string = '' > while idxfolder < maxfolders foundedfile = globpath( > currentpath[ : -1 * idxfolder ]->join('\'), "**/" .. searchedfile ) > if foundedfile != '' break endif idxfolder += 1 > endwhile echomsg foundedfile exe 'e ' .. foundedfile else > echomsg 'Sorry no File to search for.' endif enddef # add double > clickable feature => opening header nnoremap <buffer> <2-Leftmouse> :call > g:OpeningHeader()<CR>enddef* > > -- -- You received this message from the "vim_use" maillist. Do not top-post! Type your reply below the text you are replying to. For more information, visit http://www.vim.org/maillist.php --- You received this message because you are subscribed to the Google Groups "vim_use" group. To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/vim_use/d9c2d713-3ac5-4977-878f-65419f29ef49n%40googlegroups.com.