Vim的预览窗口由:ptag等命令触发,可用于预览函数定义。但在缺省情况下,预览窗口的高度是固定的,对于注释信息较多的函数,往往不能完全显示注释,而对于注释较少的函数,又会有多余的行浪费屏幕空间。

下面的函数用于解决这个问题:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
" 调用:ptag命令预览光标所在<word>的定义
" 对类C语言风格的函数/方法定义和注释有效,对其余情况仍沿用:ptag的原有效果
function! PTagIt()
exec "ptag ".expand("<cword>")
let cwin = winnr()
silent! wincmd P
let lnr = line('.')
if lnr < 3
return
endif

if foldlevel('.')>0
normal zo
endif

let chead = 0
let linestr = getline(lnr-1)
if linestr =~ '^\s*\*/'
let ptr = lnr-2
while ptr>0
let linestr = getline(ptr)
if linestr =~ '^\s*/\*'
let chead = ptr
break
endif
let ptr = ptr-1
endwhile
endif

if chead>0
exec 'resize '.(lnr-chead+1)
exec 'normal '.chead."z\<CR>"
exec 'normal '.lnr.'G'
endif

exec cwin.'wincmd w'
endfunction
nmap <leader>pp :call PTagIt()<CR>
nmap <leader>pc :pclose<CR>

例如对于如下的函数定义:

1
2
3
4
5
6
7
/*
* 我是一个测试函数
* @param int 我是整型形参
* @param string 我是字符串形参
* @param array 我是返回值
*/
function foo($bar1, $bar2) {...}

实际效果为打开的预览窗口将完全显示并只显示以上内容。

Posted via UltraBlog.vim.