有没有办法在VIM命令行中显示当前的PHP函数或类名?我发现了一个用于显示C function names in the status line的插件,但它不适用于PHP,无论如何我更喜欢使用命令行来节省宝贵的垂直线。
感谢。
答案 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中强>
如果你的垂直空间不足,你可能不介意使用一些水平空间吗?
TagList和TagBar都显示了当前缓冲区中使用的标记的垂直列表(以及TagList中的其他打开文档),可用于导航代码。
但是,我并不特别喜欢随时显示各种信息(文件列表,VCS状态,标签列表,缓冲区/标签列表......):能够读取名称你所在的函数只有 时才真正需要知道它,否则它就会变得杂乱无章。对我来说,Vim自己的[{
后跟<C-o>
就足够了。
答案 1 :(得分:2)
我对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()}
因为它在函数/类之外没有返回任何内容,所以它不会像建议的插件那样在状态行上显示错误的代码。
当然,我可能会过度简化问题,在这种情况下忽略我,但这似乎是一种明智的做法。