我在状态栏中添加了以下精细功能,以显示当前正在使用C语言编辑的功能:
set statusline+=%{WhatFunctionAreWeIn()}
fun WhatFunctionAreWeIn()
let strList = ["while", "foreach", "ifelse", "if else", "for", "if", "else", "try", "catch", "case"]
let foundcontrol = 1
let pos=getpos(".") " This saves the cursor position
let view=winsaveview() " This saves the window view
while (foundcontrol)
let foundcontrol = 0
" Go to the character before the last open {
normal [{
call search('\S','bW')
" If the character is a ) then go to the character
" preceding the () section
let tempchar = getline(".")[col(".") - 1]
if (match(tempchar, ")") >=0 )
normal %
call search('\S','bW')
endif
let tempstring = getline(".")
for item in strList
if( match(tempstring,item) >= 0 )
let foundcontrol = 1
break
endif
endfor
if(foundcontrol == 0)
call cursor(pos)
call winrestview(view)
return tempstring
endif
endwhile
call cursor(pos)
call winrestview(view)
return tempstring
endfun
但是,VIM挂了几分钟后。禁用该功能可以防止挂起,所以我确信这个功能是罪魁祸首。那里有什么可能挂起VIM吗?有没有更好的方法来完成在状态栏中显示当前编辑的功能的任务?
感谢。
答案 0 :(得分:1)
问题在于,您决定是否继续使用周围支撑的策略过于激进:
f
中的#endif
上。{
没有不匹配的[{
可以跳转到,因此光标不会移动。match()
strList
if
点击了#endif
中的{{1}},导致循环继续。我怀疑像@Gowtham建议的基于ctags的方法会更好,即使它需要一些自定义。