如何仅在安装了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():''}...
    
我的问题是,如果没有安装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():''}...
    

    • @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时没有加载插件的部分