如何让 .vimrc 从外部文件中读取?

Nat*_*ong 28 vim vimrc

我想修改 my.vimrc以从外部文件中读取变量的值。我怎样才能做到这一点?

具体来说,我和一个朋友与我们的.vim文件共享一个 git repo ,但是我们在配置中想要的内容有一些小的差异。所以大部分文件都是通用的,但是我们使用 if 语句来确定是否加载用户特定的部分,如下所示:

let whoami = "user2"
if whoami == "user1"
...
Run Code Online (Sandbox Code Playgroud)

在检查我们共同.vimrc的源代码控制之后,我们每个人都必须更改let whoami分配,以便加载我们自己的部分。相反,我想保留一个单独的文件,每个人的文件都可能不同,vim 将从中加载该变量值。

也许另一个角度是:vim 会自动读取我.vim目录中的所有文件吗?如果是这样,我们每个人都可以在其中放置一个名为 username.vim 的符号链接,并将其链接到一个对我们每个人来说都不同的外部文件。

Rob*_*cio 38

在您的主 .vimrc 文件中:

source otherVimScriptFilePath.vim
Run Code Online (Sandbox Code Playgroud)

然后只需将您的变量语句放在该文件中:

" otherVimScriptFilePath.vim
let whoami = "user1"
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考 - 在我的情况下,在 `source` 行之前执行 `let whoami = ""` 很有帮助,这样如果无法加载外部文件,变量存在,我会收到我们设置的错误消息之前为未设置的变量。 (2认同)
  • @GorillaSandwich:我用它来在我的 Windows 机器上获取我的 vimrc,因为 Windows 没有符号链接。我有一个 SVN 文件夹,其中包含这个和我所有其他点文件。所以我只有一个 _vimrc 来获取 svn 文件夹中的真实版本。 (2认同)

Nat*_*ong 6

使用 try/catch

自从提出这个问题以来,我想出了另一个加载外部文件的用例:特定于机器的调整。

因为我可能需要也可能不需要在给定的机器上进行调整,所以我使用 atry/catch来加载外部文件;如果没有这样的文件,我让它静默失败。

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 
Run Code Online (Sandbox Code Playgroud)


Hep*_*ite 5

回答最后一个问题,里面的文件~/.vim不会自动加载,但是里面的所有文件都会自动加载~/.vim/plugin

  • 以及 ~/.vim 下的其他一些地方(`after`、`autoload`) (3认同)

gar*_*ohn 5

您可以使用该:source命令让 ~/.vimrc 加载另一个文件。例如,您可以将每个独特的命令放入 ~/.myvimrc 中,并使用以下命令加载这些命令

source ~/.myvimrc
Run Code Online (Sandbox Code Playgroud)

或者,正如您所想,您可以将自己的名字放入该文件中,如下所示:

let user = "user1"
Run Code Online (Sandbox Code Playgroud)

然后将其放入 ~/.vimrc 中:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif
Run Code Online (Sandbox Code Playgroud)

不过,您可以按照 akira 建议使用 $USER ,或者设置userusing whoami,而不是将您的名字放入文件中,如下所示:

let user = substitute(system('whoami'), '\n', '', '')
Run Code Online (Sandbox Code Playgroud)

需要 replacement() 函数,因为 system() 的输出通常在末尾添加一个 '\n'。