在 .vimrc 文件中设置 expandtab 无效。

20

由于某些原因,我的.vimrc文件中的set expandtab命令没有任何效果。

这是我的.vimrc文件:

" tab settings
set expandtab
set smarttab
set softtabstop=2
set tabstop=2
set shiftwidth=2
set paste

然而,当我运行vi(没有文件名)时,:set命令会发出:

:set
--- Options ---
  helplang=en         shiftwidth=2        ttyfast
  paste               tabstop=2           ttymouse=xterm2
  fileencodings=ucs-bom,utf-8,default,latin1

这表明未设置expandtab选项。通过执行:set expandtab?进一步确认,该命令返回noexpandtab

我正在使用OSX 10.10,vi --help的返回结果为:

$ vi --version
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Jun 20 2016 11:11:25)
MacOS X (unix) version
Included patches: 1-1847
Compiled by Homebrew

为什么我的 .vimrc 文件中的某些设置被执行了,但是 set expandtab 没有生效呢?


当您在vim中使用命令“:set expandtab”时会发生什么?可能是一些插件覆盖了expandtab设置。 - sudo bangbang
如果我启动后运行:set expandtab,它就能工作,但我发布的是我的整个.vimrc文件,并且我没有指定任何文件名,所以我怀疑没有运行任何插件。 - ErikR
8
阅读 :help paste。更广泛地说,不要在你的 vimrc 中加入任何你不完全理解的内容。 - romainl
@romainl 为什么你把一个可以接受的答案发表成了评论? - yolenoyer
1
@yolenoyer,我没时间再解释了。Eugene的回答很完美。 - romainl
2个回答

46

从关于expandtab的文档中:

当设置了paste选项时,此选项会被重置,并在paste选项被取消设置时恢复。

顺便说一句,你可能不希望一直开启paste选项。它通常用于粘贴到终端Vim中,以避免破坏缩进等。

为了方便地通过一个按键打开和关闭paste,可以添加以下快捷方式(将<F2>更改为所需的任何键):

set pastetoggle=<F2>

4
您可以考虑使用 bracketed-paste 来完全避免此问题。Unimpaired.vim 还提供 yo/yO 命令,用于临时设置 'paste' - Peter Rincker
set paste in ~/.vimrcoverride set expandtab - firelyu

6

我也遇到了Neovim的这个问题,无论我尝试什么方法都无法解决。结果发现一个父目录下有一个.editorconfig文件,并设置了indent_style=tab。最终通过在我的目录中添加一个新的.editorconfig文件并设置root=true来解决(另一种选择是删除或编辑父级目录下的.editorconfig文件)。


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