禁用vim中的所有自动缩进

时间:2011-08-13 21:59:31

标签: vim indentation file-type

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

\[
    x=\frac{y}{z}  
\]

x前面的空格是一个标签。

当我开始输入公式时,我首先输入\[\]标记,然后在它们之间返回,键入标签然后输入其余的公式。

Vim没有做任何错误,直到我必须使用包含花括号的东西(例如\frac{})。当我输入结束}时,vim会自动将整行的缩进移到左侧,这会撤消我键入的标签。

这很烦人,如何禁用它?

我的.vimrc包含:

"indentation
set smartindent
set autoindent
set tabstop=5
set shiftwidth=5
filetype indent on

5 个答案:

答案 0 :(得分:24)

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

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

文件特定缩进设置

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

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

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

    根据我的经验,这些默认规则相当不错,但它们可能会被其他设置弄乱。

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

    缩进的味道

    您可以看到一些不同的缩进选项,并且它们并不能很好地协同工作。来自Vim wiki:

    自动缩进

      

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

    我在我的vimrc中使用filetype indent onset 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文件时,都会将所有这些值设置为默认值。

答案 1 :(得分:18)

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

还有另外两种自动缩进版本,cindentsmartindent。同样,如果您要停用它们,请使用set nocindentset nosmartindent

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

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

答案 2 :(得分:2)

删除行set autoindentset smartindent以删除所有vim自动注释。

答案 3 :(得分:2)

对于其他有类似问题的人来说,一个对我有用的解决方案是:

  1. 使用:verbose set indentexpr?查找导致去缩进的文件
  2. 查找indentexpr的更改位置(对我来说是setlocal indentexpr=GetTeXIndent()
  3. 将该行更改为setlocal indentexpr&以关闭indentexpr
  4. 这删除了括号,括号和大括号中的所有去缩进。

答案 4 :(得分:0)

如果您使用的是vim-latex插件,请设置以下选项:

let g:tex_indent_brace=0

对于其他插件,如果您不想像上述答案中那样关闭indentexpr,则可以找到设置indentkeys的位置并注释掉这些行。当您键入右括号时,这应该会停止触发重新缩进。

:verbose set indentkeys?