我想修改 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)
自从提出这个问题以来,我想出了另一个加载外部文件的用例:特定于机器的调整。
因为我可能需要也可能不需要在给定的机器上进行调整,所以我使用 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)
回答最后一个问题,里面的文件~/.vim不会自动加载,但是里面的所有文件都会自动加载~/.vim/plugin。
您可以使用该: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'。