Vim:在空行上进入插入模式时智能缩进?

Dan*_*nor 39 vim customization indentation

当我打开一个新行(通过'o')时,我的光标跳到下一行的正确缩进位置.另一方面,当光标位于空行时进入插入模式不会将光标移动到正确缩进的位置.

在空行上进入插入模式(通过i)时,如何使vim正确缩进光标?

sml*_*sml 74

cc 将替换当前行的内容并在正确的缩进处进入插入模式 - 因此在空行上将完全按照您的要求进行操作.

我相信i您描述的行为是正确的,因为有许多用例在空白行上的特定位置插入,而不是跳到要插入的vim猜测的任何位置.

  • 好吧,我的解决方案只有当行为空时才会使'i'表现出来 - 所以只有一个用例.'我'将在所有其他情况下正常行事.话虽这么说,cc是内置的,更合适的imo.验收 (2认同)
  • 对我来说,*如果上一行和要缩进的行之间有空行*,这不起作用。(即,您已经按了两次“o”,因为您希望在上一行和下一段代码之间留出间距。)我仍然希望看到一种在 * 的缩进级别上跳入插入模式的快速方法实际代码的上一行*。 (2认同)

Dan*_*nor 15

那实际上并没有我想象的那么糟糕.实现此目的的一种方法是将以下内容添加到〜/ .vimrc中

"smart indent when entering insert mode with i on empty lines
function! IndentWithI()
    if len(getline('.')) == 0
        return "\"_ccO"
    else
        return "i"
    endif
endfunction
nnoremap <expr> i IndentWithI()
Run Code Online (Sandbox Code Playgroud)

当您从插入模式点击"i"时,它只会检查空行.如果你确实是一个空行,它将删除它并打开一个新行,有效地利用工作的"开放行"行为.

注意:"_在cc之前确保您的注册表没有被删除


Tre*_*ell 7

在空行上,要正确缩进进入插入模式,您可以简单地使用s.

请注意,s是一个代名词cl,所以如果你没有真正在一个空行,它最终会删除单个字符,而不是缩进.在那种情况下,你最好使用cc,就像18个月前sml建议的那样.但是我经常使用这个快捷方式提高我在VimGolf的得分,所以我想提到它.;)

  • 谢谢你的提示!我每天都在学习关于vim的事情. (2认同)