繁体   English   中英

在Vim中使用smartindent的问题

[英]Issue with smartindent in Vim

在使用smartindent的vim中:

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

甚至vim文档都说:

如果除了<BS>CTRL-D之外没有在新行上键入任何内容,然后键入<Esc>CTRL-O<CR> ,则会再次删除缩进。

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

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


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

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

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

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

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

(剥离前导:添加到vimrc 。)

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

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

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

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

我没有完全测试过这个。

同一篇文章也链接到一个较短的替代解决方案

我首选的方法是{<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{如果你在其中一个大括号上面)。 当我有一个需要尽快看文本的好主意时,我会使用它,而且在我休息之前我不担心任何格式化。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM