[Vim-latex-devel] Feature request: find current environment
Brought to you by:
srinathava,
tmaas
From: Alan S. <ala...@po...> - 2004-03-15 10:00:56
|
Hi, It would be very useful to be able to know what the current environment=20 is, for instance to insert a closing tag, or to have a more precise=20 behavior of the Tex_InsertItem() function (right now it guesses the=20 environment according to the "begin" that occurs before, but it might=20 guess wrong: \begin{itemize} \item ... \item ... \begin{description} \item[Static] ... \item[Dynamic] ... \end{description} % HERE it thinks it is in a description, and alt-i insert the=20 % wrong \item \end{itemize} ) Such a thing could reuse matchit, which is already able to match begin=20 and end environments. Or we could rewrite it from scratch (a simple=20 implementation that does not try to check whether the environments are=20 correctly opened and closed is: function! Tex_GetCurrentEnv() " WARNING: this modifies the cursor position let i =3D 0 while 1 let env_line =3D search('^[^%]*\\\%(begin\|end\){', 'bW') if env_line =3D=3D 0 " we reached the beginning of the file, so we return the empty string return '' endif if match(getline(env_line), '^[^%]*\\begin{') =3D=3D -1 " we found a \\end, so we keep searching let i =3D i + 1 continue else " we found a \\begin if i =3D=3D 0 "this is the one we want let env =3D matchstr(getline(env_line), '\\begin{\zs.\{-}\ze}') return env else " this begin closes a \\end let i =3D i - 1 continue endif endif endwhile endfunction function! Tex_InsertItem() " Get current enclosing environment let pos =3D line('.').' | normal! '.virtcol('.').'|' let env =3D Tex_GetCurrentEnv() exe pos if exists('g:Tex_ItemStyle_'.env) return IMAP_PutTextWithMovement(g:Tex_ItemStyle_{env}) else return '' endif endfunction ) Alan Schmitt --=20 The hacker: someone who figured things out and made something cool happen. =2EO. =2E.O OOO |