Я ничего не знаю о PHP, и я не пытаюсь наступить ни на кого, но, посмотрев на некоторый PHP-код, я пришел к этой функции, которая, как мне кажется, использует более простой подход, чем плагины, которые были упоминается.
Я предполагаю, что функции PHP объявляются с использованием синтаксиса function MyFunction(){}
, а классы объявляются с использованием class MyClass{}
(возможно, с предшествующим public
). Следующая функция выполняет поиск назад от позиции курсора, чтобы найти самый последний объявленный класс или функцию (и устанавливает startline
). Затем мы ищем первый {
и находим соответствующий }
, устанавливая endline
. Если начальная строка курсора находится между startline
и endline
, мы возвращаем текст startline
. В противном случае мы возвращаем пустую строку.
function! PHP_Cursor_Position()
let pos = getpos(".")
let curline = pos[1]
let win = winsaveview()
let decl = ""
let startline = search('^\s*\(public\)\=\s*\(function\|class\)\s*\w\+','cbW')
call search('{','cW')
sil exe "normal %"
let endline = line(".")
if curline >= startline && curline <= endline
let decl = getline(startline)
endif
call cursor(pos)
call winrestview(win)
return decl
endfunction
set statusline=%{PHP_Cursor_Position()}
Поскольку он ничего не возвращает, когда находится вне функции / класса, он не отображает ошибочный код в строке состояния, как это делает предложенный плагин.
Конечно, я вполне могу упростить проблему, в этом случае игнорировать меня, но это кажется разумным подходом.