我刚刚花了几个小时处理JavaScript的缩进问题,得出的结论是
不要从vimrc中删除filetype indent on
!
这个设置为多种文件类型提供最佳的智能缩进。如果你发现结果很糟糕,那么很可能是配置问题。
特定文件的缩进设置
所以如果你像我一样,在你的vimrc中有
filetype indent on
并且不知道它在做什么。
这个设置只是告诉vim查找具有特定文件类型的缩进规则的文件。它会寻找几个地方,但可能只有两个地方是你感兴趣的。
$VIMRUNTIME/indent/
~/.vimrc/after/indent/
第一个位置包含vim默认的缩进规则。如果你在全新的vim安装中设置了
filetype indent on
,所有智能缩进都将来自此处。例如,当你打开名为
index.html
的文件时,它会从
$VIMRUNTIME/indent/html.vim
获取规则。
根据我的经验,这些默认规则非常好,但是其他设置可能会破坏它们。
第二个位置(
after
目录)允许你添加覆盖第一个位置设置的设置。这很好,因为你不必编辑默认文件以定制它们。
缩进方式有几种选项,它们并不总是兼容的。来自
Vim wiki:的介绍如下:
autoindent
"autoindent"仅仅是从上一行复制缩进,在开始新行时。它对于结构化文本文件或者想要手动控制大部分缩进而不受Vim干扰的情况非常有用。'autoindent'不会影响其他缩进设置,一些基于文件类型的缩进脚本甚至会自动启用它。
我在我的vimrc中使用"filetype indent on"和"set autoindent",因为它们能很好地配合使用。我没有设置其他的选项。
"smartindent"和"cindent"
"smartindent"会在某些情况下自动插入一个额外的缩进级别,适用于类C文件。 "cindent"更具可定制性,但在语法方面也更严格。 "smartindent"和"cindent"可能会干扰基于文件类型的缩进,并且不应与之同时使用。
当涉及到C和C ++时,基于文件类型的缩进会自动设置“cindent”,因此对于这些文件没有必要手动设置“cindent”。 在这些情况下,“cinwords”,“cinkeys”和“cinoptions”选项仍然适用。
通常情况下,只有在不满意基于文件类型的缩进方式时才应手动设置“smartindent”或“cindent”。
"indentexpr"
运行在(vimfolder)\ indent \\(indentscripts)中找到的文件类型缩进脚本。 它在
vim documentation中提到了文件类型,以及刚才提到的其他内容(而且它是我遇到问题的原因)。
重置'autoindent'、'cindent'、'smartindent'和/或'indentexpr'以禁用打开文件时的缩进。
故障排除
有可能某些流氓插件正在更改您的缩进设置,这就是您得到不良结果的原因。幸运的是,verbose
会告诉您最后更改相关选项的文件。
:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?
您可能会得到这样的结果
indentexpr=SomeMessedUpValue
Last set from ~/.vim/bundle/some_plugin/indent/plaintex.vim
如果出现这种情况,您可以移动该文件,关闭并重新打开vim,查看是否解决了问题。
关闭TeX的缩进设置
也许默认设置对您来说不够好,您想禁用TeX的缩进设置,但保留所有其他文件类型的设置。您可以通过在
after
目录中的文件中将这些值设置为其默认值来轻松实现。
我不太了解Tex或LaTex,但是当我创建一个扩展名为
.tex
的文件并运行
:filetype
时,它的文件类型为
plaintex
。假设这是正确的,您需要创建一个名为
~ / .vim / after / indent / plaintex.vim
的文件。在那个文件里:
set autoindent&
set cindent&
set smartindent&
set indentexpr&
每当您打开一个
.tex
文件时,这将将所有这些值设置为它们的默认值。
{
,}
)的一个相对较少使用的术语;在欧洲比在美国更为常见。 - Keith Thompsonnoautoindent
,nocindent
和smartindent
。我不太确定为什么这样做效果最好,但是试错表明这是最令人满意的方法。 - romeovs