Я ничего не знаю о 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()}
Поскольку он ничего не возвращает, когда он находится вне функции/класса, он не отображает ошибочный код в строке состояния, как это делает предлагаемый плагин.
Конечно, я вполне могу упрощать проблему, и в этом случае игнорируйте меня, но это кажется разумным подходом.
person
Prince Goulash
schedule
16.03.2012