VIM: показать функцию / класс PHP в командной строке? - PullRequest
4 голосов
/ 27 февраля 2012

Есть ли способ показать текущую функцию PHP или имя класса в командной строке VIM? Я нашел плагин для отображения имен функций C в строке состояния , но он не работает для PHP, и в любом случае я предпочитаю использовать командную строку для сохранения ценных вертикальных линий.

Спасибо.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

РЕДАКТИРОВАТЬ

При поиске чего-то совершенно не связанного с помощью TagList, я только что нашел эти две функции:

Tlist_Get_Tagname_By_Line()
Tlist_Get_Tag_Prototype_By_Line()

Добавление этого в мою строку состояния прекрасно работает:

%{Tlist_Get_Tagname_By_Line()}

Кроме того, вы читали Vim Wiki?У него есть связка из подсказок , пытающихся удовлетворить ту же потребность.Существует также этот (непроверенный) плагин .

ENDEDIT

Если у вас мало места по вертикали, возможно, вы не будете возражать против использования немногогоризонтального пространства?

TagList и TagBar оба показывают вертикальный список тегов, используемых в текущем буфере (и других открытых документах в случае TagList), которые вы можетеиспользуйте для навигации по своему коду.

Тем не менее, я не особенно поклонник того, чтобы всякая информация (список файлов, состояние VCS, список тегов, список буферов / вкладок ...) отображалась постоянно: возможность прочитать название функции, в которой вы находитесь, полезна только , когда вам действительно нужно знать это, иначе это беспорядок.Мне достаточно Vim [{ и <C-o>.

2 голосов
/ 17 марта 2012

Я ничего не знаю о 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()}

Поскольку он ничего не возвращает, когда находится вне функции / класса, он не отображает ошибочный код в строке состояния, как это делает предложенный плагин.

Конечно, я вполне могу упростить проблему, в этом случае игнорировать меня, но это кажется разумным подходом.

...