如果我没有输入与插入的自动选项卡一致的任何内容,Vim将删除自动选项卡

时间:2012-08-24 22:53:08

标签: vim

一个非常简单的例子:我想写一个函数,并且已经有几个级别的缩进(单词“function”之前的选项卡)。我先写:

1     function doCoolStuff() {
2 
3     }

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

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

1     function doCoolStuff() {
2     ▊
3     

Vim在第2行正确插入自动标签。

但是!

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

1     function doCoolStuff() {
2     ▊
3     }

但事实证明是这样,第2行没有任何标签:

1     function doCoolStuff() {
2 ▊
3     }

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

3 个答案:

答案 0 :(得分:3)

答案是在线上输入内容并再次删除,因为在这种情况下,ViM将自动删除制表符:

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

完成这项工作。有关详细信息,请参阅this主题。

答案 1 :(得分:3)

您所看到的很可能是某种autoindent or cindent的结果。在输入内容之前,确实没有任何标签或空格。因此,当你离开那条线时,它实际上并没有剥离标签或空格,因为它首先不在那里。

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

答案 2 :(得分:1)

您可以使用DelimitMate或其他一些自动配对脚本或类似this answer of mine on a similar problem.

的内容