Vim忽略在.vimrc中指定的shiftwidth

10
我正在使用Linux Mint 12 "Lisa"(x64)上的Vim 7.3.154 cli。 我喜欢使用2列的tabstopshiftwidth。 我的.vimrc文件包含以下内容:
:set ts=2
:set sw=2
这样可以实现相同的效果。每当我打开一个新的Vim实例时,tabstop值会保留,因此现有的制表符会根据.vimrc进行呈现。但是,一些情况下shiftwidth值会变为3。这将导致自动缩进为3个字符。
在新的Vim实例上运行:set sw=2可以解决此问题。请问为什么Vim会忽略/更改来自.vimrcshiftwidth值?我已尝试禁用所有插件,但无济于事。
Vim编译选项|.vimrc

确保您正在编辑的文件不包含特定于文件的设置。:h modeline - greduan
1
同时,在您的 .vimrc 文件开头设置 nocompatible,它应该是绝对第一件事。 - greduan
此外,你真的应该看一下这个关于标签等的视频:http://vimcasts.org/episodes/tabs-and-spaces/ 这是我自己的解决方案:https://github.com/Greduan/dotfiles/blob/6cba02d63a12d3aa313ebe1f0787af55a4e76900/vim/vimrc.vim#L274-L278 - greduan
@Eduan,感谢您的回复。问题确实是由文件特定设置引起的——在“plugin”目录中存在“php.vim”。但是,我仍然不清楚为什么Vim也会为其他文件类型加载“php.vim”。它并不存在于“pathogen”或“autoload”目录中。 - Jitesh
这是因为它在/plugin目录中。该目录中的任何内容都会在Vim完成加载时被加载。请查看此链接以获取更多信息:http://learnvimscriptthehardway.stevelosh.com/chapters/42.html#vimplugin。我将发布一个答案,以便可以关闭此主题。 :) - greduan
2
:verbose set sw? 应该会告诉你当前设置是在哪里进行的。 - Aaron Thoma
2个回答

6

这个答案总结了我们在评论中讨论的内容。 :)

最可能的原因是您启用了文件特定的设置。查看 :h modeline 以获取更多信息。确保那些出现问题的文件中没有这行。


除了设置 tabstopshiftwidth 之外,您还应该设置一些与空格和制表符有关的其他设置。

set noexpandtab " Make sure that every file uses real tabs, not spaces
set shiftround  " Round indent to multiple of 'shiftwidth'
set smartindent " Do smart indenting when starting a new line
set autoindent  " Copy indent from current line, over to the new line

" Set the tab width
let s:tabwidth=4
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

观看此视频以获取更多信息:http://vimcasts.org/episodes/tabs-and-spaces/


所以这是您能够解决的实际问题的答案。那个php.php文件在/plugin目录中。每次Vim启动时都会加载该目录。请检查:http://learnvimscriptthehardway.stevelosh.com/chapters/42.html#vimplugin

如果您想让该文件仅在PHP文件中加载,则应将其放入/ftplugin文件夹中:http://learnvimscriptthehardway.stevelosh.com/chapters/42.html#vimftplugin

阅读那里的文档,它应该是一个.vim文件,换句话说,在这种情况下,它将被称为php.vim

Pathogen或Vundle所做的就是修改runtimepath(:h runtimepath),没有更多也没有更少。

因此,您现在可以通过单击此答案左侧的小绿色箭头来接受此答案。:)


感谢提供详细信息,尤其是链接。 - Jitesh
@Jitesh 没问题。 :) Vim 充满了文档,找到它并不总是容易的。所以我很高兴能够帮助你。 :) - greduan
2
回顾这篇回答,我肯定它是我有史以来最好的答案。 - greduan
我在VIm中无法让任何东西正常工作。Ruby文件没问题,但是我打开的每个JS文件都会变成4个空格。使用这个模板并将其更改为我的规格非常完美。 - jarodtaylor

2

您可以运行以下命令:

verbose set shiftwidth ? 

要检查是哪个插件设置了shiftwidth的值。您也可以选择在那里修改该值。


这并没有回答问题。一旦你拥有足够的声望,你就能够评论任何帖子;相反,提供不需要询问者澄清的答案。- 来自评论审核 - Leandro Bardelli

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