Thank you Christian. I test your advises and added answers below.

Le jeudi 2 avril 2020 08:57:15 UTC+2, Christian Brabandt a écrit :
>
>
> On Di, 31 Mär 2020, Ni Va wrote: 
>
> > Hi, 
> > 
> > I use this func to switch filetype when cursor is moving outside/inside 
> embed 
> > section: 
> > 
> > 
> >     fun! helper#SwitchFileType() "{{{ 
> >       if !exists('b:busy') 
> >       let b:busy=1 
> >     let start = str2nr(search( '^\w\+\s\+<<\s\+EOF', 'n' )) 
> >     if start > 0 
> >       let end    = str2nr(search( '^EOF', 'n' )) 
> >       let curpos = getcurpos()[1] 
> >       let lang   = split(getline(start), '<<')[0]->substitute('\s', '', 
> "g")  
> >       if (curpos > start) && (curpos < end) 
> >     exe 'set ft='.lang 
> >       else 
> >     exe 'set ft=vim' 
> >       end 
> >     "echo 'Filetype switched to ' . &ft 
> >     end 
> >       unlet b:busy 
> >       end 
> >     endfun "}}} 
> > 
> > 
> >   autocmd CursorMoved    *.vim   call helper#SwitchFileType() 
> >   autocmd CursorMovedI   *.vim   call helper#SwitchFileType() 
> >   
> > 
> > 
> > The func is called on event cursormoved and lag cursor effectively 
> moving 
> > action. 
> > 
> > how to avoid this lag ? 
>
> I am not exactly sure, but a couple of things to check: 
>
> - Loading filetypes every time you move (even for single letters): 
>
>   :set ft=<filetype> 
>
>   this will cause vim to load several runtime files (ftplugin, syntax and 
>   indent scripts) and although vim usually checks whether they have been 
>   already loaded using some buffer local variables, the files have to be 
>   read (and loaded from your harddisk). This might make vim slow, 
>   especially, if Vim is installed on a slow hard disk (or even worse: a 
>   network share). 
>
>   Better here is to cache the current filetype and only call `:set ft=` if 
>   you detect that you are already in a different filetype.  it's better, 
> less slow
>
> - Second, the searching for the regions of different filetypes happens 
>   every time you move your cursor (even when moving horizontal). This 
>   might slow down vim, although the regular expression does not look 
>   very expansive). 
>   I believe the builtin vim syntax file, already has support for 
>   different syntax regions so you could simply check the name of the 
>   current syntax region using synid()/synidattr() and only load your 
>   filetype scripts then.  

 

> >> echo synID(line('.'), col('.'), 1)->synIDtrans()->synIDattr("name") 
> just give me "Comment" or other info not related to lang ruby, vim etc... 
> so how to switch good highlight with that ??
>

 

>   However, as mentioned, the vim syntax script already has support for 
>   embedding of a couple of languages, so first check `:h g:vimsyn_embed`  

 

> >> g:vimsyn_embed is set to 'r' in my case even if cursor is out of EOF 
> section.. ??

but how do you explain that without my script, syntax highlight is not well 
> as it is done with my script that set ft=ruby

 

>
>   and see if setting this variable can do what you like to achieve. 
>
>
> Best, 
> Christian 
> -- 
> Rus, Ute: 
>   leistete fruchtbare Beiträge zur Entwicklung der Gebärdensprache 
>

-- 
-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_use/05f3b7b0-6b1d-4bef-b79b-f4b4bb9f15b1%40googlegroups.com.

Reply via email to