在带有 smartindent 的 vim 中:
- Enter说出 if 语句后按
- 输入{
- 按Enter两次
- 输入}
- 如果您点击↑并转到上一行,则会从空白行中删除缩进。
甚至 vim 文档也说:
<BS>
如果您在新行中除了or之外没有键入任何内容CTRL-D
,然后键入<Esc>
, CTRL-O
or <CR>
,缩进将再次被删除。
有什么办法可以保留这个缩进而不是删除它?
在带有 smartindent 的 vim 中:
甚至 vim 文档也说:
<BS>
如果您在新行中除了or之外没有键入任何内容CTRL-D
,然后键入<Esc>
, CTRL-O
or <CR>
,缩进将再次被删除。
有什么办法可以保留这个缩进而不是删除它?
使用Shift+S在空白行上开始编辑(显然是从命令模式)。这将以预期的缩进级别开始您的光标。
另一个没有回答问题,但总体上是一个更好的解决方案:
在插入模式下键入左大括号时,这将插入一组匹配的大括号并将光标留在中间的新行上。
:imap { {<CR>}<Esc>O
同样,这将自动插入匹配的括号和方括号。
:imap ( ()<Left>
:imap [ []<Left>
:
(添加到时去掉前导vimrc
。)
正如我对 Victor 的回答所评论的那样,更改 Vim 的缩进行为将在整个文件中留下包含无关空格的“空”行。IMO,这是完全不能容忍的。
当这种情况发生在我身上时,我有时会使用ddko
(或ddO
) 删除没有足够空格的行并使用正确的缩进打开一个新行。或者,我只需按A
,然后按Tab
足够的时间来获得正确的缩进。
我首选的方法是{<CR>}<esc>shift+o
因为它超过{<CR><CR>}<esc>k shift+s
了几笔。不过,我习惯了它,当我应该使用 S 时,最终只使用 o 或 O 从空白处抓取新的、正确缩进的行。
也就是说,设置您的支撑结构并打开上面的行:
if (true) {
}//cursor here, press shift-o
你得到你期望的缩进。
open-above 技巧并不比 更少的按键次数<up><end><cr>
,但是通过重新映射转义和转换为和弦,您可以很快将其投入使用。
另外,不要忘记您的手动缩进重置和块移动。如果你在一个错位的花括号内,只需使用={
(或者=i{
如果你在一个大括号的顶部)。当我有一个需要尽快查看文本的好主意时,我会使用它,并且在我喘口气之前我不担心任何格式的浮夸。