如何使Vim忽略所有用户配置,就像它是全新安装的一样?


21

为了确保行为不受我的个人配置的影响,我想以一种忽略所有用户安装的配置文件的方式启动Vim ,就好像Vim刚刚是第一次全新安装并且用户已经在运行它一样立即。

在FAQ中得到解决,该FAQ提示答案是使用以下命令启动Vim:

vim -u NONE -U NONE -N -i NONE

这可以解决大部分问题,但是该runtimepath选项仍然包含~/.vim,尤其是,~/.vim/after(例如,如果我随后打开文件类型检测并更改文件类型,~/.vim/after/syntax/the_relevant_filetype.vim则将执行其中的代码)。

我可以通过在启动时调用以下命令来解决此特定问题:

:set runtimepath-=~/.vim
:set runtimepath-=~/.vim/after

...但是我不确定是否:

  1. 这是一个可靠的解决方案:是那些唯一可以使用户配置生效的路径吗?还有什么我没想到的吗?
  2. 有一种实现所需结果的更好方法。

*通过使用--cmd-u vimrcshell参数,或仅通过手动键入它们。

编辑:这是我要解决的这类问题的一个具体示例。(尽管我希望该解决方案可以解决我可能尚未遇到的任何其他可能的问题。):

  1. 创建一个文件〜/ .vim / after / ftplugin / c.vim,其中包含以下内容:

    noremap i :echom "This is not default behaviour"<CR>
    

    现在,我们有一些要忽略的用户安装配置。让我们测试常见问题解答建议的解决方案。

  2. 使用以下命令运行Vim:

    vim -u NONE -U NONE -N -i NONE
    
  3. 输入命令:

    :filetype plugin on
    :set ft=c
    i
    

期望的行为:Vim应该进入插入模式。如果不存在用户配置,将执行此操作。

观察到的行为:Vim打印出“这不是默认行为”


在类Unix系统中,如果你做了什么:HOME=/dev/null vim -u NONE
muru

@muru不错的主意,可能值得补充一下,但这并不完美。您显然失去了例如的能力:cd ~,但是viminfo文件的默认位置在$ HOME中,这可能会导致E138。我猜创建一个新的空目录并将其用于$ HOME可能是最好的解决方案。
丰富

@muru刚想到,如果您要设置$ HOME,那么大概也不需要指定-u NONE
Rich

1
在这种情况下/tmp可能会更好,这是我的第一个想法,但是后来我选择了/ dev / null作为黑洞。...或类似的东西HOME=$(mktemp -d) vim ...
muru

如果不使用,它不会读取系统vimrc -u NONE吗?我想这取决于您需要的行为。
muru

Answers:


16

从Vim 8.0.1554开始(不幸的是,还没有Neovim),您可以使用vim --clean。推荐使用此方法:help bugs

:help --clean docs:

类似于“ -u DEFAULTS -U NONE -i NONE”:
-跳过文件和环境变量的初始化
-将“ runtimepath”和“ packpath”设置为排除主目录条目(对于-u DEFAULTS不会发生)。
-| defaults.vim | 脚本被加载,这意味着“
不兼容”:使用Vim默认值-no | gvimrc | 脚本被加载
-没有读取或写入viminfo文件


1
真好!这比弄乱$HOME变量要简单得多。Goodjob Vim开发人员。并感谢您的回答!
Rich

1
--cleanneovim现在也可以在master上使用(github.com/neovim/neovim/commit/…,包含在0.4.0中),但是不排除主目录。
克里斯蒂安·克拉森

(不过,该补丁正在等待移植)
Christian Clason

11

消除用户特定文件的一种方法是使用不同的值$HOME。为了不让任何东西被读取或写入(例如viminfo),可以使用/dev/null

HOME=/dev/null vim -u NONE

这将导致有关的错误viminfo,因此,您可以创建一个临时文件夹,或使用现有的文件夹(如/tmp):

HOME=$(mktemp -d) vim -u NONE

使用这样的$HOME-u NONE可能不需要,具体取决于管理员在系统范围内添加的内容vimrc。例如,在所有实验室系统我管理,我添加了一个/etc/vim/vimrc.local(由包装Vim的默认来源/etc/vim/vimrc)有nocompatiblesyntax等,集,filetype on也是如此。


3
vim -i无阻止加载viminfo
Christian Brabandt

1

我无法回答太多,但我没有提到一个要点,并重新回答了标题中的解释。

如何使Vim忽略所有用户配置,就像它是全新安装的一样?

有些建议vim -u NONEvim -u NORC

在某些方面,这比没有vimrc文件还多。当我键入“ i”时,它不会说“插入”。您可能希望它仍然说“插入”。如果您以空白的vimrc文件启动vim,则它将显示insert

这是因为vim首先加载默认配置。

您可以将vim指向该默认文件,以获取vimrc文件为空白的效果。检查您是否有/etc/vim/vimrc,并且可以执行操作,vim -u /etc/vim/vimrc 或者在osx上,默认文件为/usr/share/vim/vicmrc


我认为这正是vim --clean将为您做的。
quemeraisc

@quemeraisc vim --clean将加载defaults.vim。这个答案是指系统vimrc(请参阅参考资料:help system-vimrc),我认为该系统由加载vim --clean
Rich

@barlap:要使用defaults.vim(见避免混淆:help defaults.vim),可能会更好的措辞改变default config,以system vimrc在这个答案。甚至更好的是,在答案中讨论两者!
Rich

0

Vim-FAQ 2.5

2.5。我在Vim中遇到“ xyz”(某些)问题。如何确定我的安装程序或Vim存在问题?/我是否在Vim中发现错误?

首先,您需要找出错误是在实际的运行时文件中还是在与Vim一起分发的任何插件中发生,或者这是来自.vimrc或.gvimrc中任何配置选项的简单副作用。所以首先,像这样启动vim:

vim -u NONE -U NONE -N -i NONE

这将以不兼容模式(-N)启动Vim,而不读取viminfo文件(-i NONE),不读取任何配置文件(-u NONE表示不读取.vimrc文件,-U NONE表示不读取.gvimrc文件)或甚至插件。


1
尽管出现在FAQ中,但由于问题中提到的原因,这实际上不起作用。
Rich

@Rich在您对问题的评论中:ensure that none of the behaviour I'm seeing is caused by user config-看来您正在尝试按照本常见问题解答中的说明进行操作。我已经重新阅读了您的问题,但仍然不明白您提到的原因是什么。
mMontu

我确实确实在尝试完全按照FAQ中的说明进行操作。但是由于runtimepath设置,它提供的解决方案不起作用。
丰富

到底有什么问题runtimepath?似乎是此选项的默认设置,如中所述:help rtp。这个值如何影响您的测试?
mMontu

@Rich我的意思是,打开文件类型检测后,与全新安装相比有什么区别吗?
mMontu
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.