设置运行时路径,从vim表达式中添加一个目录?

21

在 Inn ~/script.vim 文件中,我有以下内容:

set runtimepath+=string(substitute(expand("%:p"), 'script\.vim', '', 'g'))

我在.bashrc中设置了一个别名:

alias vimscript="vim -S ~/script.vim"

运行 string(substitute(expand("%:p"), 'script\.vim', '', 'g')) 可以按预期工作。

问题出现在将其用于设置 runtimepath 表达式时,在终端中调用 vimscript 并调用 script.vim 时,它不起作用。当被 vimscript 调用后在 vim 中运行 set rtp 检查 runtimepath 时,所需的附加字符串未显示(但其他字符串已经存在)。

3个回答

28

我对@Laurence Gonsalves的回答有一些补充:

  1. 还有一个“连接并赋值”运算符:.=,所以

    let foo=foo.bar
    

    可以被重写为

    let foo.=bar
    
  2. 代码

    let &runtimepath.=','.string(path)
    

    ,'/some/path'添加到&runtimepath,但你可能需要的是,/some/path

  3. 我猜你想将路径追加到你的脚本到runtimepath中。如果是这样,那么你应该这样写:

  4. let &runtimepath.=','.escape(expand('<sfile>:p:h'), '\,')
    
    在脚本内部,或者。
    let &runtimepath.=','.escape(expand('%:p:h'), '\,')
    
    从当前编辑会话中获取(假设您正在当前缓冲区中编辑脚本)。

你的方法在我看来更好,使用 expand 参数比使用 substitute 要好得多。谢谢。 - Somebody still uses you MS-DOS
或者如果您已经将路径保存到变量中,例如 let dein_path = <my-path>,那么您可以使用 let &runtimepath.=','..dein_path(点点表示连接)来设置运行时路径。 - Pavel Sapehin

5
set 命令的右侧不是表达式,而是一个字面字符串。您可以使用 let 命令并在选项名称前加上 & 来操作选项(set 命令设置的内容)。例如:
let &runtimepath=substitute(expand("%:p"), 'script\.vim', '', 'g')

要使用let追加到runtimepath中,你可以这样做:
let &runtimepath=&runtimepath . ',' . substitute(expand("%:p"), 'script\.vim', '', 'g')

(“。”是字符串连接运算符。)

我认为我需要阅读所有vim文档和一些书来理解所有这些概念。我尝试了第二个选项,但仍然不起作用:现在,当我运行set rtp时,代替string(substitute(expand()的部分是''。我错过了什么? - Somebody still uses you MS-DOS
@某人,你所包含的表达式中有 string(),这是不应该有的。(我只是将你的表达式原封不动地复制到正确的模式中。)我已经更新了答案,使用了你的表达式的正确形式。它可能仍然可以像ZyX一样简化,但至少可以让你走上正确的轨道。 - Laurence Gonsalves
@某人 BTW,我从未读过vim的书。“:help”在vim中实际上非常好,但是有很多细节需要注意。我已经使用Vim十多年了,仍然会定期了解它的新内容。 - Laurence Gonsalves
删除脚本没有起作用。我认为这是一个设置问题。我已经在我的问题中更新了更多信息。无论如何,谢谢,+1! - Somebody still uses you MS-DOS
@Somebody,你更新后的问题显示出另一个问题,那就是你错误地使用了expand()函数。你正在使用%,它会扩展为缓冲区的文件名,但你需要的是sfile。此外,你把这行代码放在哪里,是在script.vim还是在你的vimrc中?如果是后者,它将无法正常工作。 - Laurence Gonsalves

0

到2022年我使用了这个:

if ( isdirectory($some_shell_variable)  )
    set runtimepath+=$vi
endif

你可以使用普通的vim变量或其他任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接