vundle“文件类型插件缩进”与tabwidth混乱


9

昨天我安装了vundle,自从我安装了vundle以来,我在vimrc中配置的tabwidth被忽略,并设置回4而不是2。

我发现在vundle段落之后的以下行是引起该错误的原因:

filetype plugin indent on

我的缩进设置如下:

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=2
exec 'set tabstop='    .s:tabwidth
exec 'set shiftwidth=' .s:tabwidth
exec 'set softtabstop='.s:tabwidth

您可以在此处查看我的完整vimrc 。

我使用python脚本测试了缩进问题(缩进确实很重要)。

我已经尝试过更改filetype plugin indent on为,filetype plugin on但这并没有改变任何内容。仅注释掉该行会有所帮助。
现在,vundle安装指南说,这条线是必需的。

如何解决缩进问题?我可以省略文件类型行还是将其保留在vimrc中是强制性的?

解:

感谢@ChristianBrabandt和@romainl,我现在找到了一个解决方案,该解决方案也可以驻留在单个vimrc文件中:

filetype plugin indent on

[...]

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

" Set the tab width
let s:tabwidth=2
au Filetype * let &l:tabstop = s:tabwidth
au Filetype * let &l:shiftwidth = s:tabwidth
au Filetype * let &l:softtabstop = s:tabwidth

即使它不能回答您的问题,我还是用vim-plug而不是Vundle进行了尝试,并且效果很好……
nobe4

2
查看常见问题
解答

您还可以使用新的OptionSet自动命令来重置shiftwidth和
softtabstop

Answers:


10

首先是第一件事;下面的行与Vundle或插件管理完全无关

filetype plugin indent on

该命令执行三件事:

  • 启用文件类型检测,
  • 启用特定于文件类型的脚本(ftplugins),
  • 启用特定于文件类型的缩进脚本。

出现这一行是因为某些插件管理器必须确保在执行魔术之前禁用文件类型检测,并且如果没有ftplugins和适当的缩进,使用Vim进行编程会更加困难。我认为他们应该只在内部处理文件类型检测,但是很好…

无论如何,您的问题是由过多的ftplugins导致的,这些ftplugins会用其替换缩进设置。python ftplugin是最常见的罪魁祸首,因为不久前就决定应执行PEP8。

最简单的方法是避免完全采购ftplugins:

filetype indent on

但是它们通常带有有用的内容,因此实际上不建议使用该方法。

最干净的解决方案是使该filetype行保持其“最佳”状态:

filetype plugin indent on

并使用您自己的替代它们的替代after/ftplugin/python.vim

setlocal noexpandtab
setlocal shiftround
setlocal autoindent

let s:tabwidth=2
let &l:tabstop = s:tabwidth
let &l:shiftwidth = s:tabwidth
let &l:softtabstop = s:tabwidth

笔记:

  • 我删除了smartindent它,是因为它一开始并不聪明,而且对于特定于文件类型的缩进脚本还是不推荐使用。
  • :execute用更干净的:let命令替换了您的命令,以避免不必要的串联。

1
如果您设置shiftwidth为零和softtabstop-1,它将遵循制表位设置。
克里斯蒂安·布拉班德

感谢您的解释。我想在vimrc中保留大多数设置,因为我想将它们同步到多台计算机。我在vimrc中使用了您的解决方案,并在问题下方使用了常见问题链接@ChristianBrabandt,它可以正常工作。我将编辑问题以包括我的解决方案。
wullxz 2015年

4

缩进问题来​​自ftplugin,它会加载一个.vim文件,/usr/share/vim/vim-version-/ftplugin/-filetype-.vim该文件会覆盖.vimrc文件中的所有内容。您可以通过在vim中运行以下命令来找出该文件的位置:verbose set tabstop?。输出将使您指向覆盖您的配置的文件。

就我而言,我的python缩进配置存在问题。

解决此问题的一种简单方法是执行以下操作:

在您的主文件夹中创建一个.vim文件夹(如果没有)

cd ~/.vim
mkdir -p after/ftplugin/
cd ~/.vim/after/ftplugin/
vim python.vim

添加以下内容:

setlocal noexpandtab shiftwidth=4 softtabstop=4 tabstop=4

修改命令中您想要的任何内容。我的看起来像是因为我使用制表符而不是空格。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.