6

在带有 smartindent 的 vim 中:

  1. Enter说出 if 语句后按
  2. 输入{
  3. Enter两次
  4. 输入}
  5. 如果您点击并转到上一行,则会从空白行中删除缩进。

甚至 vim 文档也说:

<BS>如果您在新行中除了or之外没有键入任何内容CTRL-D,然后键入<Esc>, CTRL-Oor <CR>,缩进将再次被删除。

有什么办法可以保留这个缩进而不是删除它?

4

4 回答 4

8

使用Shift+S在空白行上开始编辑(显然是从命令模式)。这将以预期的缩进级别开始您的光标。


另一个没有回答问题,但总体上是一个更好的解决方案:

在插入模式下键入左大括号时,这将插入一组匹配的大括号并将光标留在中间的新行上。

:imap { {<CR>}<Esc>O

同样,这将自动插入匹配的括号和方括号。

:imap ( ()<Left>
:imap [ []<Left>

:(添加到时去掉前导vimrc。)

正如我对 Victor 的回答所评论的那样,更改 Vim 的缩进行为将在整个文件中留下包含无关空格的“空”行。IMO,这是完全不能容忍的。

于 2009-07-07T19:53:41.843 回答
2

当这种情况发生在我身上时,我有时会使用ddko(或ddO) 删除没有足够空格的行并使用正确的缩进打开一个新行。或者,我只需按A,然后按Tab足够的时间来获得正确的缩进。

于 2009-07-07T19:55:30.777 回答
1

我首选的方法是{<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{如果你在一个大括号的顶部)。当我有一个需要尽快查看文本的好主意时,我会使用它,并且在我喘口气之前我不担心任何格式的浮夸。

于 2009-07-10T23:32:30.430 回答
1

这里的文章谈到你是同样的问题,以及在 vimrc 中放入什么来解决它。

inoremap <CR> <CR><Space><BS>
nnoremap o o<Space><BS>
nnoremap O O<Space><BS>

我还没有完全测试过这个。

同一篇文章还链接到更短的替代解决方案

于 2009-07-07T20:22:09.540 回答