如何在输入字符之前在 Vim 的新行上插入制表符

How to insert tabs on new line in Vim before a character is typed

如果我在我的C程序中写一个if语句,按三下回车,然后写一个注释,下面是我的输出。注意条件和注释之间的两行完全是空的。

if(my_condition) {


<Tab>// My comment here

我的问题是 Vim 不会在行首和光标位置之间插入任何制表符 直到键入一个字符 。这对我来说很烦人,因为我喜欢经常在代码块中上下移动光标。由于两行上没有真正的制表符,如果我向上移动一行,我的光标将转到该行的开头,而不是停留在同一列上。我来自 Sublime Text 和其他编辑器,这从来都不是问题。

是否有插件或设置可以实现以下功能?

if(my_condition) {
<Tab>
<Tab>
<Tab>// My comment here

感谢所有帮助。我研究过使用可视模式,但一直启用它会产生不良副作用。当然有一种简单的方法可以在我换行时自动添加制表符?

This is very annoying for me, because I like to move my cursor up and down the block of code often.

嗯,您可能已经注意到,切换到 vim 意味着您需要更改自己的编辑行为。这可能是最困难的,比学习新命令还难,因为习惯很难改掉!

不过,我并不是说您应该停止以无用的方式在函数中滚动,而是说您应该停止在插入模式下使用 "cursor" 键来回移动。

当你在插​​入模式下进行移动时,它会产生副作用 "inconvenient",但它也会破坏 "repeat" 命令(.).在插入模式下移动光标后,. 只会重复在该移动后键入的字符。

因此,您在编辑行为中应该考虑的是避免空行,避免尾随 spaces/tabs 并且永远不要在插入模式下四处移动。插入模式用于插入,普通模式用于移动和对文本进行操作。

在普通模式下有很多你可以滥用的移动命令(j/k, <C-e>/<C-y>, {/}, …).

话虽这么说,如果您遇到缩进的情况,您可能想继续编辑,而不关心缩进,一旦您回到正常模式,就会发出 =i{ 将在语法文件(和您的缩进设置)之后缩进块中的所有内容。