初始化不一致

Inconsistent initialization

MacVim 8.0:

如果没有.vimrc文件,set显示:

:set
--- Options ---
  autoindent          scroll=18           ttymouse=xterm2
  helplang=en         showmatch           wrapmargin=10
  langmenu=none       ttyfast           nowrapscan
  backspace=indent,eol,start
  fileencodings=ucs-bom,utf-8,default,latin1
  pythondll=/usr/local/Frameworks/Python.framework/Versions/2.7/Python
  pythonhome=/usr/local/Frameworks/Python.framework/Versions/2.7

如果我创建一个空的 .vimrc 文件,set 显示:

set
--- Options ---
  helplang=en         scroll=18           ttymouse=xterm2
  langmenu=none       ttyfast
  backspace=indent,eol,start
  fileencodings=ucs-bom,utf-8,default,latin1
  pythondll=/usr/local/Frameworks/Python.framework/Versions/2.7/Python
  pythonhome=/usr/local/Frameworks/Python.framework/Versions/2.7

这与第一种情况的不同之处在于缺少 autoindentshowmatchwrapscan。为什么会有差异?这些选项似乎没有在 /Applications/MacVim.app/Contents/Resources/vim/vimrc.

中设置

-u file 启动 vim 应该使用 file 作为启动文件。因此,如果我删除空的 .vimrc——所以现在我没有 .vimrc——并使用 -u emptyfile,其中 emptyfile 是一个空文件,我希望 set 将显示上面列出的内容。然而,set 显示了一些非常不同的东西:

:set
--- Options ---
  helplang=en         scroll=18           ttyfast             ttymouse=xterm
  fileencodings=ucs-bom,utf-8,default,latin1
  iskeyword=@,48-57,_,192-255

为什么这与之前的案例不同?

(我为什么要关心?因为我想弄清楚为什么初始化文件在 .vimrc 时可以正确执行,但在我 运行 它与 -u.)

我找到了部分答案。 (我会 post 在这里为任何有类似问题的人提供,但我不希望对问题或答案进行投票。)

help initialization 说,除此之外:

If Vim was started with "-u filename", the file "filename" is used. All following initializations until 4. are skipped. $MYVIMRC is not set.

那一点和 4. 之间的大部分内容与我的情况无关;这些是仅在特殊情况下才会发生的步骤。但是,该点和 4 之间的一项是:

b. For Unix, MS-DOS, MS-Windows, OS/2, VMS, Macintosh, RISC-OS and Amiga the system vimrc file is read for initializations. The path of this file is shown with the ":version" command.

所以使用-u时系统初始化文件不是运行。 (这仍然没有完全回答我的第一个问题,它提到了我系统上的系统初始化文件。)

在任何预期位置都没有 vimrc,Vim 来源:

$VIM/vimrc
$VIMRUNTIME/defaults.vim
...

这是 Vim 8.0 中的新功能。在该版本之前,Vim 只会在这种情况下获取 $VIM/vimrc。据称,该新功能背后的原因是为不常使用的用户提供更有用的默认值,而不要求他们编写自己的 vimrc.

参见 :help defaults.vim


在预期位置之一有一个 vimrc(假设 ~/.vimrc 但它可以是 ~/.vim/vimrc),Vim 来源:

$VIM/vimrc
$HOME/.vimrc
...

对于频繁使用的用户(无论是否有经验)来说,这是最佳方案:您可以获得基本行为以及所有您喜欢的东西。


当使用 -u 将 Vim 指向特定的 vimrc 时,Vim 仅来源特定的 vimrc.

这是绝对主义场景,让您可以完全控制 Vim 的设置。我不会向没有经验的用户推荐它。