在Vim中使用smartindent的问题

时间:2009-07-07 19:48:16

标签: vim auto-indent

在使用smartindent的vim中:

  1. 在说出if-statement
  2. 后按 Enter
  3. 输入 {
  4. 输入两次
  5. 输入}
  6. 如果您点击并转到上一行,则会从空行中删除缩进。
  7. 甚至vim文档都说:

    如果您没有在<BS>CTRL-D以外的新行中输入任何内容,然后输入<Esc>CTRL-O<CR>,缩进再次删除。

    有没有办法保留这个缩进而不删除它?

4 个答案:

答案 0 :(得分:8)

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


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

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

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

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

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

(添加到:时删除前导vimrc。)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

文章here谈到你是一个非常相同的问题,以及要在vimrc中修复它的内容。

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

我没有完全测试过这个。

同一篇文章也链接到较短的alternate solution

答案 3 :(得分:1)

我首选的方法是{<CR>}<esc>shift+o,因为它超过{<CR><CR>}<esc>k shift+s几笔。不过,当我使用S时,我最终会使用o或O来获取新的,正确缩进的线条。

也就是说,设置你的支撑结构并打开上面的行:

if (true) {
}//cursor here, press shift-o

你得到了你期望的缩进。

上面开放的技巧不是<up><end><cr>以外的按键,但是如果重新映射转义并且转换为chorded,你可以非常快速地抛出它。

另外,不要忘记您的手动缩进重置和块移动。如果你在一个受损的花括号内,只需使用={(或=i{,如果你在其中一个大括号上)。当我有一个需要尽快看文本的好主意时,我会使用它,并且在我休息之前我不担心任何格式化。