即使 .vimrc 为空,也会发生这种情况
当文件扩展名为 .html 时,如果当前处于此状态:
<p>
t
</p>
然后我将光标放在“t”上,按 a(追加)
<p>
t_
</p>
然后输入“{”,该行将向左缩进,结果如下:
<p>
t{_
</p>
我的光标仍处于插入模式“_”
我尝试在各种 vim 帮助文件中查找“indent”和“{”,但我找不到任何有关它自动向左缩进的原因的信息。
有什么方法可以禁用此自动左缩进吗?
最佳答案
您的缩进由名为 HtmlIndent()
的函数处理。如果你用vim --clean testIndent.html
打开vim从命令行,然后输入 :set indentexpr?
在 vim 中按 Enter 键,您将看到 indentexpr=HtmlIndent()
。请参阅:h indentexpr
阅读有关此设置含义的更多信息。至于这个函数的作用,你需要看看它是在哪里定义的。您可以输入:e $VIMRUNTIME/**/indent/html.vim
进入 vim 并(在按 Enter 键之前)按 Tab 键。 Vim 应该自动填充 vim 的 html 缩进文件的位置。对于我在 Ubuntu 上使用 vim 8.2 来说,这是 /usr/local/share/vim/vim82/indent/html.vim
。 HtmlIndent()
函数在那里定义。
这是答案的第一部分。第二部分回答了为什么通过输入 {
来触发缩进。特点。 HtmlIndent()
确定行的缩进应该是什么,但是 indentkeys
当键入某些键时,设置会触发对行的正确缩进进行评估和设置。请参阅:h indentkeys
。如果你再次打开vim vim --clean testIndent.html
并输入 :set indentkeys?
,您会看到类似 indentkeys=o,O,<Return>,<>>,{,},!^F
的内容。 {
该设置中的字符导致 vim 评估,通过 HtmlIndent()
,它认为是您每次键入 {
时所在行的正确缩进。 .
鉴于此,您有多种选择。您可以寻找对 vim 的 html 缩进设置进行了自己的添加的人。您可以简单地禁用此自动缩进。您可以尝试修改vim的HtmlIndent()
功能。对您来说,一个非常简单的选择是删除 {
来自 indentkeys
的字符环境。您可以使用:set indentkeys-={
来做到这一点。然后做:set indentkeys?
再次验证{
已被删除。您可以删除 }
一样的方法。请注意,这只会阻止 vim 在每次键入 {, }
时自动重新缩进一行。人物。它实际上不会改变 vim 关于该行缩进应该是什么的看法,因此在 vim 评估并设置行缩进的其他情况下,它仍然会以您不同意的方式这样做。
关于vim - 为什么在 vim 插入模式下输入大括号会使该行向左缩进?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66308843/