如何在插入模式下返回到先前的缩进级别?

7
有时候,当你按下回车键后,vim的智能缩进并不能选择正确的缩进级别。此时,你可能希望回到上一行的缩进级别,并从那里继续。我知道你可以按几次ctrl-d来实现这个目的,但是如果有一个快捷键能够立即跳转到上一行的缩进级别,那将更加方便。

你应该放弃使用 smartindent,因为你的文件类型可能有更好的默认 indentexpr - romainl
我实际上不使用smartindent,而是像你建议的那样使用文件类型的插件缩进规则。然而它们并不完全准确... - rgrinberg
4个回答

3

我不知道是否纯属巧合,但是Alexey Radev刚刚发布了prev_indent插件,它提供了一个插入模式映射和:PrevIndent命令,可以将当前行移动到前一级缩进。


1
如果您不想为这样一个简单的任务安装插件(我也不想),可以尝试这个简单的映射:
:inoremap <C-D> <Esc>:call setline(".",substitute(getline(line(".")),'^\s*',matchstr(getline(line(".")-1),'^\s*'),''))<CR>I

现在在插入模式下,按下CtrlD将完成此操作:使当前行缩进与上一行相同。最好在开始输入新行之前执行此操作,因为它会将光标重置为缩进后的位置。

谢谢,这是最直接和最简单的答案。不过我实际上选择了Ingo发布的插件。 - rgrinberg

1
在正常模式下,您可以使用<>来增加或减少缩进。它们与移动、视觉选择以及当前行的>> <<一样有效。您还可以使用=选择“正确”的缩进级别,同样与移动等方面的操作一样有效。
所以我通常在编辑完成后使用块选择和=的组合来修复正常模式下的缩进错误,然后使用<<>>来修复单个行的缩进。

= 对我没用。 - dekuShrub

0
你可以在插入模式下使用<C-O>=G将光标缩进到文件末尾。或者使用<C-O><<删除一个缩进级别。

4
在插入模式下使用 Ctrl+d 和 Ctrl+t 更加方便。 - jbr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接