当我通过'o'打开新行时,我的光标跳转到下一行的正确缩进位置。另一方面,当我的光标在空行上进入插入模式时,它不会移动到正确的缩进位置。
如何使vim在空行上进入插入模式(通过i)时正确缩进我的光标?
当我通过'o'打开新行时,我的光标跳转到下一行的正确缩进位置。另一方面,当我的光标在空行上进入插入模式时,它不会移动到正确的缩进位置。
如何使vim在空行上进入插入模式(通过i)时正确缩进我的光标?
cc
会替换当前行的内容并在正确的缩进位置进入插入模式 - 因此在空行上将完全做到你想要的效果。
我认为你描述的i
的行为是正确的,因为有许多情况下,你希望在空行的特定位置插入,而不是跳转到vim猜测你要插入的任何位置。
实际上这并不像我想象中的那么糟糕。启用此功能的一种方法是将以下内容添加到您的 ~/.vimrc 中。
"smart indent when entering insert mode with i on empty lines
function! IndentWithI()
if len(getline('.')) == 0
return "\"_ccO"
else
return "i"
endif
endfunction
nnoremap <expr> i IndentWithI()
当你从插入模式按下'i'键时,它会简单地检查一个空行。如果你确实在一个空行上,则会删除该行并打开一个新行,有效地利用了"开放行"的工作行为。
注意:"_在cc之前可以确保你的寄存器不被清除。
ccO
也不起作用,但是 ddko
可以(删除当前行,跳转到上一行,添加新行)。 - Edward Hughes"\"_ccO"
更改为"\"_cc"
,它会插入字母O,我不确定为什么会出现这种情况。除此之外,这个函数非常有帮助,谢谢。 - Connora
而不是 i
,因为对我来说这更符合逻辑,我认为它们是在隐式缩进的不同侧。所以 i
仍然在最左边插入,而 a
在自动缩进后附加。 - Connor在空行上,要正确缩进地进入插入模式,您可以简单地使用s
。
请注意,s
是cl
的同义词,因此如果您实际上不在空行上,它会删除一个字符而不是缩进。在这种情况下,最好使用cc
,就像18个月前sml建议的那样。但是我经常使用这个快捷方式来提高我的VimGolf得分,所以想提一下。;)
o
,因为你想在前一行和下一段代码之间留出空格。)我仍然希望能够快速进入插入模式,并且缩进到实际代码的前一行的缩进级别。 - ELLIOTTCABLEcindent
后,这才开始对我起作用,使用smartindent
时cc
的工作方式并不像描述的那样。 - pcworld