vim - 为什么在 vim 插入模式下输入大括号会使该行向左缩进?

标签 vim

即使 .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.vimHtmlIndent()函数在那里定义。

这是答案的第一部分。第二部分回答了为什么通过输入 { 来触发缩进。特点。 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/

相关文章:

vim 更改热键的反斜杠键

vim - 在 Applications 文件夹中创建 macvim

vim - 带ctags的vim-7

vim - 我可以在 vim 中给快速修复窗口一个不同的状态行吗?

bash - 如何让 Vim 从 shebang 行检测文件类型?

regex - vim中的一个十进制数乘以一个固定的数

Vim 和 snipMate(插件)——添加新代码片段不起作用

regex - 如何在多个缓冲区/选项卡上运行命令以删除尾随空格?

svn:使用vim合并冲突

vim - 如何为插入模式创建映射,而不是为 Vim 中的自动完成子模式创建映射?