设置runtimepath,从vim中的表达式添加目录?

Som*_*DOS 14 vim bash runtime

客栈~/script.vim,我有:

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

我有一个别名.bashrc:

alias vimscript="vim -S ~/script.vim"
Run Code Online (Sandbox Code Playgroud)

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

问题是在set runtimepath表达式中使用它时,当我调用vimscript终端调用时它不起作用script.vim.当我set rtp在被vimscript调用以检查运行时路径之后在vim中运行时,未显示所需的附加字符串(但其他字符串在那里).

ZyX*_*ZyX 21

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

  1. 还有«concat和assign»运算符:.=所以

    let foo=foo.bar
    
    Run Code Online (Sandbox Code Playgroud)

    可以改写为

    let foo.=bar
    
    Run Code Online (Sandbox Code Playgroud)
  2. let &runtimepath.=','.string(path)
    
    Run Code Online (Sandbox Code Playgroud)

    ,'/some/path'在您可能需要时追加到&runtimepath ,/some/path.

  3. 我想你想要将脚本的路径附加到runtimepath.如果是,那么您的代码应该写成

    let &runtimepath.=','.escape(expand('<sfile>:p:h'), '\,')
    
    Run Code Online (Sandbox Code Playgroud)

    在脚本中,或

    let &runtimepath.=','.escape(expand('%:p:h'), '\,')
    
    Run Code Online (Sandbox Code Playgroud)

    从当前编辑会话(假设您正在当前缓冲区中编辑脚本).


Lau*_*ves 5

命令的右侧位置set不是表达式,而是文字字符串。

set您可以通过使用let选项名称并在选项名称前添加前缀 来操作选项(事物集) &。例如:

let &runtimepath=substitute(expand("%:p"), 'script\.vim', '', 'g')
Run Code Online (Sandbox Code Playgroud)

要附加到runtimepathalet你可以这样做:

let &runtimepath=&runtimepath . ',' . substitute(expand("%:p"), 'script\.vim', '', 'g')
Run Code Online (Sandbox Code Playgroud)

(这.是字符串连接运算符。)