在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
答案 0 :(得分:24)
我花了几个小时来处理使用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'只是在开始换行时复制上一行的缩进。它对于结构化文本文件很有用,或者当您想要手动控制大部分缩进时,没有Vim干扰。 'autoindent'不会干扰其他缩进设置,一些基于文件类型的缩进脚本甚至会自动启用它。
我在我的vimrc中使用filetype indent on
和set autoindent
,因为它们可以很好地协同工作。我没有其他的设置。
'smartindent'在某些情况下会自动插入一个额外级别的缩进,并且适用于类似C的文件。 'cindent'更可定制,但在语法方面也更严格。 'smartindent'和'cindent'可能会干扰基于文件类型的缩进,并且永远不应与其一起使用。
对于C和C ++,基于文件类型的缩进会自动设置'cindent',因此,不需要为这些文件手动设置'cindent'。在这些情况下,'cinwords','cinkeys'和'cinoptions'选项仍然适用。
通常,如果您对基于文件类型的缩进的工作方式不满意,则只能手动设置'smartindent'或'cindent'。
运行(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的缩进设置,但保留所有其他文件类型。您可以通过在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。
还有另外两种自动缩进版本,cindent
和smartindent
。同样,如果您要停用它们,请使用set nocindent
和set nosmartindent
如果你寻求帮助(help autoindent
,...),他们都会得到很好的解释。您喜欢(或不喜欢)哪一个主要取决于您的编程风格和习惯。所以,试一试,看看你最喜欢哪一个。
不幸的是,我不再那么多使用LaTeX了,所以我不熟悉它的内部文件类型缩进规则。
答案 2 :(得分:2)
删除行set autoindent
和set smartindent
以删除所有vim自动注释。
答案 3 :(得分:2)
对于其他有类似问题的人来说,一个对我有用的解决方案是:
:verbose set indentexpr?
查找导致去缩进的文件indentexpr
的更改位置(对我来说是setlocal indentexpr=GetTeXIndent()
)setlocal indentexpr&
以关闭indentexpr
这删除了括号,括号和大括号中的所有去缩进。
答案 4 :(得分:0)
如果您使用的是vim-latex插件,请设置以下选项:
let g:tex_indent_brace=0
对于其他插件,如果您不想像上述答案中那样关闭indentexpr,则可以找到设置indentkeys的位置并注释掉这些行。当您键入右括号时,这应该会停止触发重新缩进。
:verbose set indentkeys?