Я добавил следующую тонкую функцию в мою строку состояния, чтобы показать, какая функция в настоящее время редактируется на языках, производных от 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? Есть ли лучший способ выполнить задачу отображения редактируемой в данный момент функции в строке состояния?
Спасибо.