不读取~/.vimrc文件

76

我有一个~/.vimrc文件,但似乎vim没有读取它。

/etc/vimrc中有一个文件,看起来似乎是在使用那个文件。

据我理解,位于用户主目录下的文件应该覆盖那个文件,不是吗?

更新

cat vim_strace | grep .vimrc
    stat64("/etc/vimrc", {st_mode=S_IFREG|0644, st_size=1438, ...}) = 0
    open("/etc/vimrc", O_RDONLY|O_LARGEFILE) = 3
    stat64("/etc/vimrc", {st_mode=S_IFREG|0644, st_size=1438, ...}) = 0
    stat64("/root/.vimrc", {st_mode=S_IFREG|0644, st_size=35, ...}) = 0
    open("/root/.vimrc", O_RDONLY|O_LARGEFILE) = 3
    stat64("/root/.vimrc", {st_mode=S_IFREG|0644, st_size=35, ...}) = 0

1
它们都在运行。应该首先加载/etc/vimrc,然后再加载~/.vimrc。还有一些其他的东西被加载,其中大部分包含在您的~/.vim/目录中。不知道为什么你的没有加载。 - Jamie Wong
我修改了问题,包括strace输出...根目录的vimrc是否会覆盖/etc/vimrc中的设置? - NinjaCat
你是想使用/root/.vimrc还是想使用/home/ninjacat/.vimrc(或类似的文件)? - Roger Pate
/root/.vimrc是你情况下/.vimrc的意思(你在问题中没有描述),请检查HOME环境变量(printenv HOME或echo $HOME)。如果你想让/.vimrc表示其他东西(即/home/.../.vimrc),那么你需要在vim之外做出改变。 - Roger Pate
1
换句话说,vim确实正在读取/.vimrc文件,但是表示的是/root目录,这似乎不是您预期的结果。 - Roger Pate
显示剩余2条评论
16个回答

148

加载vim之后,:scriptnames命令将会准确告诉你Vim读取了哪些内容。

对我来说,它的输出类似于:

  1: /Applications/MacVim.app/Contents/Resources/vim/vimrc
  2: ~/.vimrc
  3: /Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/syntax.vim
  4: /Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/synload.vim
  5: /Applications/MacVim.app/Contents/Resources/vim/runtime/syntax/syncolor.vim

如果您想检查特定设置在哪里被设置,请使用“verbose set”。例如,:verbose set background 告诉我:

  background=light
        Last set from ~/.vimrc

我知道我的 ~/.vimrc 文件中的设置已经被读取,并且后续的任何文件都没有覆盖它。


2
这很有用 +1。不幸的是,由于某种原因,尽管 syntax.vim 出现在我的 scriptnames 中,但它仍然是我 vimrc 中唯一未被读取或出现在 :verbose set 中的命令,有什么想法吗? - Magpie
8
这很有帮助,但并没有解决问题。现在我知道~/.vimrc没有被读取,但这是为什么呢? - skyuuka
1
也许可以查看:h MYVIMRC获取更多关于vim读取配置文件的信息。 - tron5
“scriptnames” 命令告诉我有 24 个文件正在被读取,大多数来自我的 \vim82\ 安装目录。为什么会这么多?我以为它只读取一个 VIMRC 文件? - Owen

78

如果你正在使用Linux,并且想知道启动时Vim是否访问了你的~/.vimrc文件,你可以使用strace来启动它:

strace -o vim_strace vim

然后退出vim。打开vim_strace文件并在其中搜索"vimrc"。你应该会找到一行像这样的内容。

stat64("/home/youruser/.vimrc", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0

这意味着至少vim看到了这个文件。


4
这是一个巧妙的方法来解决这个问题。 - Koobz
1
请注意,某些virmrc文件不在您的主目录中。我正在运行Raspbian,我的文件位于/usr/share/vim/vimrc - Daniel
1
我希望多年前就知道strace命令。这非常有用,谢谢。 - aggregate1166877

47

如果有人在使用neovim时遇到这个问题,你应该知道(在你开始拔光头发之前),.vimrc文件是从~/.config/nvim/init.vim加载的。

mkdir -p ~/.config/nvim; ln -s ~/.vimrc ~/.config/nvim/init.vim

14
请注意,在~/.config/nvim/init.vim中添加source ~/.vimrc即可在不依赖符号链接的情况下源化配置。 - Ari
1
非常感谢,你帮我节省了很多时间。 - Moshe
1
谢谢分享。这对我很有帮助。 - Alex Coetzee
1
这对我也有帮助。 - Apit John Ismail
很高兴知道NeoVim的这个警告。这对我有所帮助(接受的答案对我没有用,因为我在vim的跟踪中看到了~/.vimrc,但vim没有加载它)。谢谢! - Temak
显示剩余2条评论

24

我遇到了这个问题,只需将以下内容添加到文件~/.bash_profile中:

alias vim="vim -S ~/.vimrc"

12
真正的问题是,你为什么会有这个问题(我也一样)。 - nowox
3
如果你真的在使用neovim但是将其别名为vim,那么这种情况可能会发生。 - E. Sundin
我有neovim,并且为vim创建了一个符号链接(可能应该使用别名),并遇到了这个问题。GuestUser123456789的解决方案解决了它。 - TheProletariat
11
鉴于这个回答吸引了NeoVIM用户: 您的默认配置位于 ~/.config/nvim/init.vim 请添加 source ~/.vimrc 以渲染 .vimrc 的设置。 - Ari

10

如果其他人也遇到了这个问题,并且像我一样发现 vimrc 没有被读取是因为使用了 sudo,请尝试使用 sudo -E。它可以保留命令的环境变量,$HOME 将指向您自己的主目录。请注意,在使用了 rootsquash 挂载了 /home 的环境中可能无法正常工作。


谢谢!sudo -E 对我不起作用,但是我也改变了 root 用户的颜色方案 :-) - user2923322
这对我有用。请注意,-E之间没有空格,但即使-E不起作用,将自己的.vimrc文件复制到/root也可以解决问题! - Craig Silver
非常感谢你。每次那个铃声响起,就像是一把小铁锤敲击在我的额叶皮层上。 - undefined

5

补充一下hellvinz的指示。

在你创建vim_strace文件之后。

cat vim_strace | grep .vimrc

会使生活变得更加轻松 :)


10
grep .vimrc vim_strace 更好。 - Lynch

5

看到这篇文章,其中的建议都不适用于我。以下是一些有用的内容,没有在这里提到:

  1. vim --version 命令可以给你一些有用的信息,包括启动文件。我的列表中有几个地方列出了“virc”(而不是 vimrc)
  2. 如果你的 vim 不是真正的 vim,则可能会查找 ~/.exrc 而不是 .vimrc 文件(我的 vim 先查找某些系统 vircs,然后是某些用户 vircs,最后查找 $HOME/.exrc)
  3. 如果你的文件(无论哪个文件)具有 DOS 行结尾,则可能会导致错误

......所以即使我有一个真正的 vim,它也在寻找“virc”


是的,在CentOS 7上运行vim --version命令会显示以下位置: 系统vimrc文件: "/etc/vimrc" 用户vimrc文件: "$HOME/.vimrc" 第二个用户vimrc文件: "~/.vim/vimrc" - DavidXYZ

3

检查是否已设置$VIMINIT。这可能会阻止读取您的~/.vimrc文件。请参见:help VIMINIT

 c. Four places are searched for initializations.  The first that exists
    is used, the others are ignored.  [...]
    -  The environment variable VIMINIT [...]

对我来说,取消设置VIMINIT就可以了,我的~/.vimrc现在被读取了。


3
在OSX 10.8.0上,vimrc文件的位置是:/usr/share/vim/vimrc。我只需将更改添加到文件底部即可。当然,这会使所有用户都受到更改的影响。但我无论如何都无法弄清楚如何让它读取~/.vimrc。在10.6.x上,我从未遇到过这个问题。无论如何,这是一个快速修复方法,即使有点不太干净。祝好!

1
10.8?我在2012年使用的是10.7.3版本...我想知道你去年是怎么升级到10.8的。 - Justin Herrick

3
在检查了上述建议中的scriptnamesverbose之后,我注意到我的设置确实被加载了,但被另一个插件覆盖了,因此给人的印象是它没有读取/加载.vimrc
如果发生这种情况,并且您想要覆盖插件中的特定设置,而不完全消除该插件带来的其他好处,您可以创建一个配置文件在插件加载后进行加载,方法是在~/.vim/after/<path>/<plugin_name>中创建一个文件。有关参考,请参见此其他问题

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接