【问题标题】:Not reading ~/.vimrc不读 ~/.vimrc
【发布时间】:2011-03-30 12:52:20
【问题描述】:

我有一个 vim 似乎没有读取的 ~/.vimrc 文件。 /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

【问题讨论】:

  • 他们都在运行。 /etc/vimrc 应该首先被加载,然后~/.vimrc 应该被加载。还加载了一些其他内容,其中大部分包含在您的~/.vim/ 目录中。不知道为什么你的没有加载。
  • 我修改了问题以包含 strace 输出...根文件夹 vimrc 是否覆盖 /etc/vimrc 中的设置?
  • 你的意思是使用 /root/.vimrc 还是你想使用 /home/ninjacat/.vimrc (或类似的)?
  • 好吧,对于这个用户来说,/root/.vimrc 没问题。我还没有和其他用户一起玩过。
  • 换句话说,vim 读取 ~/.vimrc,但是 ~ 表示 /root,你似乎没有想到。

标签: vim


【解决方案1】:

一旦你加载了 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 background 告诉我:

  background=light
        Last set from ~/.vimrc

所以我知道我在 ~/.vimrc 中的设置正在被读取,并且后面的文件都没有破坏它。

【讨论】:

  • 这很有用 +1。不幸的是,由于某种原因,虽然 syntax.vim 出现在我的 scriptnames 上,但它仍然是我的 vimrc 中唯一没有被读取或出现在 :verbose set 中的命令,有什么想法吗?
  • 这很有帮助,但不能解决问题。现在我知道 ~/.vimrc 还没有被读取,但是为什么会这样呢?
  • 也许看看:h MYVIMRC 了解更多关于vim如何读取他的配置的信息。
【解决方案2】:

如果您在 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 可以看到该文件。

【讨论】:

  • 这是一种巧妙的解决方法。
  • 请注意,某些 virmrc 文件不在您的主目录中。我正在运行 Raspbian,我在 /usr/share/vim/vimrc
  • 我希望我几年前对 strace 命令有了新的了解。这非常有用;谢谢。
【解决方案3】:

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

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

【讨论】:

  • 注意,您可以简单地将source ~/.vimrc 中的~/.config/nvim/init.vim 添加到源配置中,而无需依赖符号链接。
  • 非常感谢您为我节省了很多时间。
  • 感谢分享。这对我有帮助。
  • 这对我也有帮助
  • 很高兴知道 NeoVim 的这个警告。这对我有帮助(接受的答案没有用,因为我在 vim 的跟踪中看到 ~/.vimrc,但 vim 没有加载它)。谢谢!
【解决方案4】:

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

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

【讨论】:

  • 真正的问题是为什么你有这个问题(我也有)
  • 如果你真的在使用 neovim 但将其别名为 vim 可能会发生这种情况
  • 我有 neovim 并且有一个 vim 的符号链接(可能应该有别名),并且遇到了这个问题。 GuestUser123456789 的解决方案修复了它。
  • 由于此答案吸引了 NeoVIM 用户:您的默认配置位于 ~/.config/nvim/init.vim 请添加 source ~/.vimrc 以呈现 .vimrc 设置。
【解决方案5】:

如果其他人遇到这个问题,并且像我一样意识到 .vimrc 因为 sudo 而没有被读取,请尝试使用 sudo -E。它保留了您的命令环境,$HOME 将指向您自己的主目录。请注意,这可能不适用于 /home 使用 rootsquash 挂载的环境。

【讨论】:

  • 谢谢! sudo - E 对我不起作用,但我也只是更改了 root 用户的配色方案:-)
  • 这对我有用。注意-E 之间没有空格,但是即使-E 不起作用,将自己的.vimrc 文件复制到/root 也可以解决问题!
【解决方案6】:

只是补充一下 hellvinz 的指示。

在你制作 vim_strace 文件之后。

猫 vim_strace | grep .vimrc

让生活变得轻松:)

【讨论】:

  • grep .vimrc vim_strace 更好。
【解决方案7】:

在 OSX 10.8.0 上,vimrc 文件的位置是:/usr/share/vim/vimrc

我只是将我的更改添加到文件的底部。

当然,这会为所有用户进行更改。对于我的生活,我似乎无法弄清楚如何让它阅读〜/ .vimrc。在 10.6.x 上,这对我来说从来都不是问题

无论如何这是一个快速修复,即使它有点脏。

干杯

【讨论】:

  • 10.8?我是 2012 年的 10.7.3……我想知道你去年是如何达到 10.8 的。
【解决方案8】:

在 Ubuntu 中使用文件 /etc/vim/vimrc.local

【讨论】:

    【解决方案9】:

    检查是否设置了$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 现在已被读取。

    【讨论】:

      【解决方案10】:

      偶然发现这篇文章,但没有任何建议对我有用。这里没有提到的一些有用的东西:

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

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

      【讨论】:

        【解决方案11】:

        按照上面的建议检查scriptnamesverbose 后,我注意到我的设置确实正在加载,但被另一个插件覆盖,因此给人的印象是它没有读取/加载.vimrc

        如果您遇到这种情况,并且您想覆盖插件的特定设置,而不完全消除来自该插件的所有其他好处,您可以创建一个配置文件以在 之后加载通过在~/.vim/after/<path>/<plugin_name> 中创建一个文件来加载插件。如需参考,请参阅this other question

        【讨论】:

          【解决方案12】:

          /etc/vim/vimrc 现在被 defaults.vim 覆盖,除非有 ~/.vimrc,显然。 https://github.com/vim/vim/issues/2042

          【讨论】:

            【解决方案13】:

            对我来说,错误是我将配置设置为~/.vim/.vimrc。 在阅读了一些文档后,我发现正确的路径是~/.vim/vimrc

            更改文件就可以了。

            【讨论】:

              【解决方案14】:

              TL;DR 检查您的 .vimrc 中没有任何内联 cmets

              在这个问题下所有有用的答案之后,我仍然被困住了。我的~/vimrc

              set mouse-=a
              set tabstop=4     " Indents will have a width of 4
              set shiftwidth=4
              set softtabstop=4 " Sets the number of columns for a TAB
              set expandtab     " Expand TABs to spaces
              syntax on
              set paste
              " set compatible
              set t_ti= t_te= "stop ^z clearing the screen
              " remember line
              if has("autocmd")
                au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
              endif
              " unless gitcommit
              autocmd FileType gitcommit call setpos('.', [0, 1, 1, 0])
              

              被 vim 定位并且 strace 显示它已被读取。原来我系统上的 vim.basic 似乎忽略了 整行 if 它包含评论。 (因此内联 cmets 禁用同一行上的设置。)

              我将“将 TAB 扩展为空格”注释移至上一行,并在下次运行 vim -c :set 时立即出现 expandtab

              【讨论】:

                猜你喜欢
                • 2014-06-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2020-09-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多