例如,我通常先键入成对的大括号,然后将光标移动到块中,我期望的应该是这样的:
....{
....█
....}
但是vim会自动清空第二行,因为其中只有空格字符,所以结果如下:
....{
█
....}
我该如何解决这个问题?
(圆点用于空格字符,█表示光标的位置。)
答案 0 :(得分:6)
当您退出插入模式时,不要担心Vim会从空行中删除空格。正如其他人所评论的那样,这是一件好事。相反,当您在该行上调用插入模式时,寻找一种自动恢复缩进级别的方法。
当您进入插入模式时,i
,I
,a
和A
命令都会保留光标位置。但请查看: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步
光标是“|”。输入{
{|
第2步 键入Return
{
|
第3步
输入}
{
}|
第4步 按向上箭头
{|
}
第5步 键入Return
{
|
}
第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。 (如果我告诉你已经知道的东西,请道歉。)