3

一个很简单的例子:我想写一个函数,已经有好几级缩进(“函数”这个词之前的制表符)。我先写:

1     function doCoolStuff() {
2 
3     }

然后从第 3 行上升到第 2 行并开始输入函数的内容。但是,vim 不允许我在第 3 行键入括号并向上移动一行后删除第 2 行的自动插入选项卡。因此,每次编写新函数时,我都必须手动插入选项卡。事情是这样的:

当我输入函数的头部并按回车时,它看起来像这样:

1     function doCoolStuff() {
2     ▊
3     

Vim 在第 2 行正确插入自动制表符。

但!

然后我按 Enter 键,键入右括号并向上移动一行。我希望它是这样的:

1     function doCoolStuff() {
2     ▊
3     }

但结果是这样的,第 2 行没有任何选项卡:

1     function doCoolStuff() {
2 ▊
3     }

似乎是 vim 看到有一行完全由制表符组成并删除了制表符。如何禁止 vim 删除尾随制表符?

4

3 回答 3

4

答案是在该行输入一些内容并再次删除它,因为在这种情况下 ViM不会自动删除制表符:

:inoremap <CR> <CR>x<BS>

做这项工作。有关更多信息,请参阅线程。

于 2012-08-24T23:08:50.407 回答
3

您所看到的很可能是某种autoindent 或 cindent的结果。在您输入内容之前,那里实际上没有任何选项卡或空格。因此,当您离开该行时,它实际上并没有剥离制表符或空格,因为它一开始就不存在。

我通常做的是向上移动到我要开始输入的行,然后按下o以在下一行开始编辑(并且自动缩进会正确处理定位)。

于 2012-08-24T23:19:42.450 回答
1

您可以在类似问题上使用 DelimitMate 或其他一些自动配对脚本或类似我的这个答案。

于 2012-08-25T07:55:46.913 回答