如果只有空格,vim中的Autoindent总是清空该行,我能改变吗?

时间:2011-05-14 09:06:24

标签: vim

例如,我通常先键入成对的大括号,然后将光标移动到块中,我期望的应该是这样的:

....{
....█
....}

但是vim会自动清空第二行,因为其中只有空格字符,所以结果如下:

....{
█
....}

我该如何解决这个问题?

(圆点用于空格字符,█表示光标的位置。)

3 个答案:

答案 0 :(得分:6)

当您退出插入模式时,不要担心Vim会从空行中删除空格。正如其他人所评论的那样,这是一件好事。相反,当您在该行上调用插入模式时,寻找一种自动恢复缩进级别的方法。

当您进入插入模式时,iIaA命令都会保留光标位置。但请查看:help cc的文档:

["x]cc    Delete [count] lines [into register x] and start
          insert linewise. If 'autoindent' is on, preserve
          the indent of the first line.

如果启用了autoindent选项,则在空白行上运行cc将切换到插入模式并恢复适当的缩进级别,并根据需要进行设置:

....{
    |
....}

请注意,S密钥是cc:help S)的同义词。

答案 1 :(得分:3)

如果你真的想要(虽然我同意@ThiefMaster),这只是改变你输入方式的问题。

以下是2个解决方案:

解决方案1:如果您喜欢箭头键

第1步 光标是“|”。输入{

{|

第2步 键入Return

{
    |

第3步 输入}

{
}|

第4步 按向上箭头

{|
}

第5步 键入Return

{
    |
}

解决方案2

第1步 输入{

{|

第2步 键入Return

{
    |

第3步 输入}

{
}|

第4步 退出插入模式

{
}█

第5步 输入O

{
    |
}

答案 2 :(得分:0)

以下是另外两个解决方案:http://vim.wikia.com/wiki/Get_the_correct_indent_for_new_lines_despite_blank_lines

第一个可能有用。这很简单有效:

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

然而,这使得使用Vim的自动完成(&lt; C-n&gt;)更难以使用。它还与依赖于默认行为的插件发生冲突,例如supertab

第二个,将自定义函数(请参阅代码链接)添加到插件or.vimrc似乎是不必要的,因为使用o(如described by @sidyll above)或O进行缩进你:{<Return>}<Esc>O

另一种方法是创建一个代码段模板。这样,您可以{<Tab>,然后您就不必输入其他按键。有different snippets plugins。 (如果我告诉你已经知道的东西,请道歉。)