1

我愿意vim -u ~/.my_custom_vimrc some_file。.my_custom_vimrc 的第一行是:call pathogen#infect(). 我收到以下错误:

Error detected while processing .my_custom_vimrc:
line    1:
E117: Unknown function: pathogen#infect

vim 手册:h -u说:

-u {vimrc} 读取文件 {vimrc} 进行初始化。大多数其他初始化被跳过......

我假设未加载定义病原体的插件。如果我将 .my_custom_vimrc 重命名为 .vimrc,错误就会消失。这就是我真正想要的:几个 .vimrc 文件,这样我就可以决定使用哪一个。

4

3 回答 3

6

我相信关键是在文档中:h -u,接近尾声:

使用“-u”参数的副作用是默认情况下会启用“兼容”选项。

我的猜测是,由于pathogen#infect()使用了绝对与vi不兼容的自动加载功能,因此函数调用失败。或者,该目录甚至不被视为兼容模式。无论根本原因是什么,在使用插件时,兼容模式绝对不是您想要的。.vim

-N解决方案是使用标志强制不兼容模式:

vim -Nu ~/.myvimrc myfile
于 2013-02-15T20:00:39.157 回答
3

为此,您可以使用自己的变量启动 VIM,然后.vimrc根据该变量获取不同的文件。

在您的.vimrc(显示一些不同的使用方式)中:

"# this is _not_ an error if env. variable 'what_to_do' isn't used
let WhatToDo = $what_to_do

if WhatToDo == "this"
  "# Use 'source'
  source $HOME/.vim/.vimrc_this
  "# This should not do 'common stuff'
  finish

elseif WhatToDo == "that"
  "# ...or use 'runtime', finds and sources the first file with the given
  "# name looking in folders in 'runtimepath' (default includes e.g. ~/.vim)
  runtime .vimrc_that

else
  runtime .vimrc_default
endif

"# common stuff...

然后在 Unix 命令行中使用它:

$ vim text.txt                  # will use '.vimrc_default'
$ what_to_do=that vim text.txt  # will use '.vimrc_that'
$ # what_to_do is not defined after that line

当在同一行使用 Unix 环境变量作为命令时,该变量仅对该命令有效。注意!=设置 Unix 变量前后不能有空格
或者你可以在之前设置它:

$ what_to_do=that
$ vim text.txt                  # will use '.vimrc_that'
$ # what_to_do has still the value "that" here

或者在脚本(startvim)中:

what=$1
shift
what_to_do=$what vim "$@"

并将其与
$ startvim that <whatever flags you want> text.txt

或者最好的方法可能是为每个选项使用一个别名:
$ alias vim_that='what_to_do=that vim'然后您可以使用与使用相同的方式使用它vim,并使用您想要的标志。例如
$ vim_that <whatever flags you want> text.txt


使用环境变量还有一个替代方法,使用标志--cmd

--cmd {command} --cmd {command} 将在处理任何 vimrc 文件之前执行。否则,它的作用类似于 -c {command}。您最多可以使用这些命令中的 10 个,独立于“-c”命令。{Vi 无此功能}

并 以
$ vim --cmd 'let WhatToDo = "that"' text.txt. _ _ _ _

$ alias vi_that='vi --cmd "let WhatToDo = \"that\""'

if ! exists("WhatToDo") | let WhatToDo = "" | endif.vimrc$what_to_do

您当然可以使用-c "source the_file_you_want"并拥有一个空的.vimrc,但是在开始序列中的采购可能与在.vimrc.


帮助:
:h runtime
:h runtimepath
:h --cmd

于 2013-02-17T14:25:12.300 回答
0

您可以使用-c它来加载它:

vim -c "so ~/.my_custom_vimrc some_file"
于 2013-02-09T22:25:24.600 回答