禁用vim中的所有自动缩进

rom*_*ovs 19 vim file-type indentation

在TeX vim中,通常会搞砸我的缩进.主要是当我在一个显示的方程式中,我认为应该是这样的:

\[
    x=\frac{y}{z}  
\]
Run Code Online (Sandbox Code Playgroud)

其中的空白x是一个标签.

当我开始输入方程式时,我先键入\[\]标记,然后在它们之间返回,键入选项卡,然后输入等式的其余部分.

在我必须使用包含花括号的东西(\frac{}例如)之前,Vim没有做任何错误.当我键入关闭}vim时,会自动将整行的缩进移到左侧,这会撤消我键入的选项卡.

这很烦人,如何禁用它?

我的.vimrc包含:

"indentation
set smartindent
set autoindent
set tabstop=5
set shiftwidth=5
filetype indent on
Run Code Online (Sandbox Code Playgroud)

Dea*_*ean 26

我只花了几个小时来处理使用javascript的缩进痛苦,我得出的结论是不要filetype indent on从你的vimrc中删除!

此设置为多种文件类型提供最佳智能缩进.如果你的结果不好,可能会出现配置问题.

文件特定缩进设置

所以,如果你像我一样,你可能已经filetype indent on在你的vimrc中,并且不知道它在做什么.

所有这些设置都告诉vim查找具有特定于文件类型的缩进规则的文件.它看起来有几个地方,但可能只有两个你感兴趣的地方.

  1. $VIMRUNTIME/indent/
  2. ~/.vimrc/after/indent/

第一个位置包含vim附带的默认缩进规则.如果你要filetype indent on安装一个新的vim安装,这就是所有智能缩进的来源.例如,当您打开一个名为index.htmlin 的文件时,将从中获取规则$VIMRUNTIME/indent/html.vim.

根据我的经验,这些默认规则非常好,但它们可能会被其他设置弄乱.

第二个位置(after目录)允许您添加首先取代这些设置的设置.这很好,因为您不必编辑默认文件以自定义它们.

缩进的味道

你已经看到了一些不同的缩进选项,并且它们并不是一起玩得很好.来自Vim维基:

自动缩进

'autoindent'只是在开始换行时复制上一行的缩进.它对于结构化文本文件很有用,或者当您想要手动控制大部分缩进时,没有Vim干扰.'autoindent'不会干扰其他缩进设置,一些基于文件类型的缩进脚本甚至会自动启用它.

我用filetype indent onset autoindent我的vimrc,因为它们很好地协同工作.我没有其他设置.

smartindent&cindent

'smartindent'在某些情况下会自动插入一个额外级别的缩进,适用于类似C的文件.'cindent'更可定制,但在语法方面也更严格.'smartindent'和'cindent'可能会干扰基于文件类型的缩进,并且永远不应与它一起使用.

对于C和C++,基于文件类型的缩进会自动设置'cindent',因此,不需要为这些文件手动设置'cindent'.在这些情况下,'cinwords','cinkeys'和'cinoptions'选项仍然适用.

通常,如果您对基于文件类型的缩进的工作方式不满意,则只能手动设置"smartindent"或"cindent".

indentexpr

运行在中找到的文件类型缩进脚本(vimfolder)\indent\\(indentscripts).在vim文档中提到了filetype,以及刚刚提到的其他文件(也是我遇到的问题的原因):

重置'autoindent','cindent','smartindent'和/或'indentexpr'以禁用打开文件中的缩进.

故障排除

有些流氓插件可能会改变你的缩进设置,这就是你得到糟糕结果的原因.幸运的是verbose会告诉你哪个文件是最后一个更改有问题的选项.

:verbose set autoindent?
:verbose set cindent?
:verbose set smartindent?
:verbose set indentexpr?
Run Code Online (Sandbox Code Playgroud)

你可能得到一个结果,如

indentexpr=SomeMessedUpValue
Last set from ~/.vim/bundle/some_plugin/indent/plaintex.vim
Run Code Online (Sandbox Code Playgroud)

如果发生这种情况,您可以移动该文件,关闭并打开vim,看看它是否解决了您的问题.

关闭TeX的缩进设置

也许默认设置只是没有为你做,你想要禁用TeX的缩进设置,但保留所有其他文件类型.您可以通过在after目录中的文件中将这些值设置为其默认值来轻松完成此操作.

我对Tex或LaTex知之甚少,但是当我创建一个带.tex扩展名的文件并运行时,:filetype它的文件类型为plaintex.假设这是正确的,你想要创建一个文件~/.vim/after/indent/plaintex.vim.在该文件中:

set autoindent&
set cindent&
set smartindent&
set indentexpr&
Run Code Online (Sandbox Code Playgroud)

无论何时打开.tex文件,这都会将所有这些值设置为默认值.


Roo*_*ook 18

您的问题似乎有一些混合的术语.在vim中,术语autoindent指向一种特殊的缩进,它简单地跟随前一行的缩进级别(有时非常方便).要set noautoindent手动删除它,或将其写入_vimrc.

还有另外两种自动缩进,cindentsmartindent.同样,如果你想禁用它们,请使用set nocindentset nosmartindent

如果你寻求帮助(help autoindent,...),他们都会得到很好的解释.您喜欢(或不喜欢)哪一个主要取决于您的编程风格和习惯.所以,尝试一下,看看你最喜欢哪一个.

不幸的是,我不再那么多使用LaTeX了,所以我不熟悉它的内部文件类型缩进规则.

  • 对我来说,**cindent**是通常导致问题的那个 (2认同)
  • 对我来说,从我的 .vimrc 中删除 `filetype plugin indent on` 有帮助。 (2认同)