如何仅在安装了taglist.vim或存在Tlist_Get_Tagname_By_Line()函数时设置statusline?
我的如何仅在安装了taglist.vim或存在Tlist_Get_Tagname_By_Line()函数时设置statusline?,vim,Vim,我的.vimrc中有以下内容,它根据光标的位置显示函数名(它使用taglist.vim中的函数) Q.如果存在Tlist\u Get\u Tagname\u By\u line(),如何仅设置状态行? 我的问题是,如果没有安装taglist.vim,当您打开程序时,vim会对此进行投诉,这非常烦人: E117: Unknown function: Tlist_Get_Tagname_By_Line Press ENTER or type command to continue E15: Inva
.vimrc
中有以下内容,它根据光标的位置显示函数名(它使用taglist.vim中的函数)
Q.如果存在Tlist\u Get\u Tagname\u By\u line()
,如何仅设置状态行?
我的问题是,如果没有安装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\u Get\u Tagname\u By\u line()
存在,如何仅设置状态行
您可以使用:help exists()
测试函数的可用性。所以你可以
- 将整个statusline定义置于条件中:
if exists('*Tlist_Get_Tagname_By_line') set statusline=... endif
- 或者在状态行中使用三元表达式:
...%{exists('*Tlist_Get_Tagname_By_line')?Tlist_Get_Tagname_By_line():''}...
E117: Unknown function: Tlist_Get_Tagname_By_Line
Press ENTER or type command to continue
E15: Invalid expression: Tlist_Get_Tagname_By_Line()
否,报告错误的系统从不出现问题。问题是错误的原因
如果Tlist\u Get\u Tagname\u By\u line()
存在,如何仅设置状态行
您可以使用:help exists()
测试函数的可用性。所以你可以
- 将整个statusline定义置于条件中:
if exists('*Tlist_Get_Tagname_By_line') set statusline=... endif
- 或者在状态行中使用三元表达式:
...%{exists('*Tlist_Get_Tagname_By_line')?Tlist_Get_Tagname_By_line():''}...
- @Romaill的回答完全正确;我想提供一个具体的解决方案,它具有较少的重复(对
'statusline'
定义的重复)或复杂性(对三元组的重复):
如果标记列表函数不存在,只需定义一个返回空字符串的伪函数。
另一个答案也没有提到的是,如果在~/.vimrc
中设置'statusline'
,插件还没有加载。为了检查标记列表的可用性,必须先显式加载它。三元表达式不受此影响,但您需要支付增加的运行时成本(必须在每次statusline更新时计算条件)
或者,您也可以在
~/.vim/after/plugin/taglist.vim
中定义虚拟存根,或者通过:autocmd-vimcenter*.
定义它,但两者都不如上面推荐的解决方案那样清晰和富有表现力;我想提供一个具体的解决方案,它具有较少的重复(对'statusline'
定义的重复)或复杂性(对三元组的重复):
如果标记列表函数不存在,只需定义一个返回空字符串的伪函数。
另一个答案也没有提到的是,如果在~/.vimrc
中设置'statusline'
,插件还没有加载。为了检查标记列表的可用性,必须先显式加载它。三元表达式不受此影响,但您需要支付增加的运行时成本(必须在每次statusline更新时计算条件)
或者,您也可以在
~/.vim/after/plugin/taglist.vim
中定义虚拟存根,或者通过:autocmd vimcenter*.
定义虚拟存根,但两者都不如上面推荐的解决方案那样清晰和富有表现力。谢谢!三元表达式可以工作…但是exists()表达式不行,我想是因为Ingo指出^,以前没有加载插件。vimrc是经过计算的谢谢!三元表达式可以工作…但是exists()表达式不行,我想是因为Ingo指出^,插件以前没有加载过。vimrc已经被评估过了谢谢提示!特别是关于~/.vimrc被评估时插件没有被加载的部分谢谢你的提示!特别是关于在评估~/.vimrc时没有加载插件的部分