我的.vimrc
中有以下内容,它根据光标的位置显示一个函数名称(它使用taglist.vim中的函数)
set statusline=%<%f\ [%{Tlist_Get_Tagname_By_Line()}]\ %{fugitive#statusline()}\ %h%m%r%=%-14.(%l,%c%V%)\ %P
我的问题是,如果没有安装taglist.vim, Vim会在您打开程序时抱怨它,而且非常讨厌:
E117: Unknown function: Tlist_Get_Tagname_By_Line
Press ENTER or type command to continue
E15: Invalid expression: Tlist_Get_Tagname_By_Line()
问。如果Tlist_Get_Tagname_By_line()
存在,我该如何设置状态栏?
答案 0 :(得分:1)
我的问题是,如果没有安装taglist.vim,Vim会在你打开程序时抱怨它,而且非常烦人:
不,报告错误的系统从不问题。问题是导致错误的原因。
如果
Tlist_Get_Tagname_By_line()
存在,我该如何设置状态?
您可以使用:help exists()
测试功能的可用性。所以你可以......
将整个状态行定义放在条件中:
if exists('*Tlist_Get_Tagname_By_line')
set statusline=...
endif
或在状态栏中使用三元表达式:
...%{exists('*Tlist_Get_Tagname_By_line')?Tlist_Get_Tagname_By_line():''}...
答案 1 :(得分:1)
@ romainl的回答是完全正确的;我想提供一个具有较少重复('statusline'
定义)或复杂性(三元组)的具体解决方案:
如果taglist函数不存在,只需定义一个返回空字符串的虚拟函数。
另一个答案也没有提及,如果您在'statusline'
中设置~/.vimrc
,则尚未加载插件。要检查标记列表的可用性,您必须先显式加载它。三元表达式不会受此影响,但您需要增加运行时成本(必须在每个状态行更新时评估条件)。
" Try to load plugin now.
:runtime! plugin/taglist.vim
if !exists('*Tlist_Get_Tagname_By_line')
" Dummy stub for when taglist.vim isn't available.
function! Tlist_Get_Tagname_By_line()
return ''
endfunction
endif
或者,您也可以在~/.vim/after/plugin/taglist.vim
中定义虚拟存根,或通过:autocmd VimEnter * ...
定义虚拟存根,但两者都不如上面推荐的解决方案那样清晰和富有表现力。