Vim:在空白行上进入插入模式时智能缩进?
Posted
技术标签:
【中文标题】Vim:在空白行上进入插入模式时智能缩进?【英文标题】:Vim: Smart indent when entering insert mode on blank line? 【发布时间】:2011-03-01 12:15:12 【问题描述】:当我打开一个新行(通过“o”)时,我的光标会跳到下一行的正确缩进位置。另一方面,当光标位于空白行时进入插入模式不会将光标移动到正确缩进的位置。
在空白行进入插入模式(通过 i)时,如何让 vim 正确缩进光标?
【问题讨论】:
【参考方案1】:cc
将替换当前行的内容并在正确的缩进处进入插入模式 - 所以在空白行上将完全符合您的要求。
我相信您描述的 i
的行为是正确的,因为在许多用例中您想要在空白行的特定位置插入,而不是跳到 vim 猜测的任何地方你想插入。
【讨论】:
好吧,我的解决方案只会让 'i' 在行为空时表现得那样——所以只有一个用例。 'i' 在所有其他情况下都会表现正常。话虽如此,cc是内置的,更适合imo。接受 我喜欢 vim 的地方在于,无论您使用多久,您仍然可以每天学习新东西。我每天都广泛使用 dd、yy 和 c 以及其他修饰符,我从未想过尝试 cc。 +1 对我来说,如果在上一行和要缩进的行之间有一个空行,这是行不通的。 (即你已经打了o
两次,因为你想要前一行和下一段代码之间的间距。)我仍然希望看到一种快速进入插入模式的方法,在 上一行实际代码.
这只是在激活cindent
后才开始为我工作,而smartindent
cc
没有按描述工作。【参考方案2】:
其实这并没有我想象的那么糟糕。启用此功能的一种方法是将以下内容添加到您的 ~/.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()
当您在插入模式下点击“i”时,它只会检查空行。如果您确实在空行上,它将删除它并打开一个新行,有效地利用工作中的“打开行”行为。
注意:“抄送之前的_确保您的寄存器不会被擦除
【讨论】:
我发现ccO
也不起作用,但是ddko
起作用了(删除当前行,转到上一行,添加新行)。
我不得不将"\"_ccO"
更改为"\"_cc"
,它正在插入O,我不确定它为什么会在那里。否则超级有用的功能,谢谢。
在使用了几天之后,我改变了这种行为以使用 a
而不是 i
,这对我来说更合乎逻辑,因为我认为它们在不同的方面隐式缩进。所以i
像以前一样在最左边插入,a
在自动缩进之后追加。【参考方案3】:
在空行中,要正确缩进进入插入模式,您可以简单地使用s
。
注意s
是cl
的同义词,所以如果您不是实际上是在一个空行上,它最终会删除一个字符而不是缩进。在这种情况下,您最好使用cc
,正如 sml 大约 18 个月前建议的那样。但是我经常通过使用这个快捷方式提高我在 VimGolf 的分数,所以我想我会提到它。 ;)
【讨论】:
感谢您的提示!我仍然每天都在学习有关 vim 的知识。 @DaneO'Connor 我们都是! :)以上是关于Vim:在空白行上进入插入模式时智能缩进?的主要内容,如果未能解决你的问题,请参考以下文章
复制/etc/profile至/tmp/目录,用查找替换命令删除/tmp/profile文件中的 行首的空白字符及在vim中设置tab缩进为4个字符