VIM:在命令行中显示PHP函数/类?

时间:2012-02-26 21:07:05

标签: php vim ide ctags

有没有办法在VIM命令行中显示当前的PHP函数或类名?我发现了一个用于显示C function names in the status line的插件,但它不适用于PHP,无论如何我更喜欢使用命令行来节省宝贵的垂直线。

感谢。

2 个答案:

答案 0 :(得分:3)

修改

在寻找TagList帮助中完全不相关的东西时,我刚刚找到了这两个函数:

Tlist_Get_Tagname_By_Line()
Tlist_Get_Tag_Prototype_By_Line()

在状态栏中添加此功能非常有效:

%{Tlist_Get_Tagname_By_Line()}

另外,你读过Vim Wiki吗?它有一个bunch of tips试图满足相同的需求。还有this (untested) plugin

<强> EndEdit中

如果你的垂直空间不足,你可能不介意使用一些水平空间吗?

TagListTagBar都显示了当前缓冲区中使用的标记的垂直列表(以及TagList中的其他打开文档),可用于导航代码。

但是,我并不特别喜欢随时显示各种信息(文件列表,VCS状态,标签列表,缓冲区/标签列表......):能够读取名称你所在的函数只有 时才真正需要知道它,否则它就会变得杂乱无章。对我来说,Vim自己的[{后跟<C-o>就足够了。

答案 1 :(得分:2)

我对PHP一无所知,而且我不是试图踩到任何人的脚趾,但是看了一些PHP代码后我想出了这个函数,我觉得这个函数比插件更简单。提及。

我的假设是PHP函数是使用语法function MyFunction(){}声明的,而使用class MyClass{}声明的类(可能前面是public)。以下函数从光标位置向后搜索以查找最近声明的类或函数(并设置startline)。然后我们向前搜索第一个{,找到匹配的},设置endline。如果起始光标行位于startlineendline之间,则返回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()}

因为它在函数/类之外没有返回任何内容,所以它不会像建议的插件那样在状态行上显示错误的代码。

当然,我可能会过度简化问题,在这种情况下忽略我,但这似乎是一种明智的做法。