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.