如果只有空格,vim中的Autoindent总是清空该行,我能改变吗?

xzh*_*zhu 12 vim

例如,我通常先键入成对的大括号,然后将光标移动到块中,我期望的应该是这样的:

....{
....?
....}
Run Code Online (Sandbox Code Playgroud)

但是vim会自动清空第二行,因为其中只有空格字符,因此结果如下:

....{
?
....}
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

(点用于空格字符,█表示光标的位置.)

nel*_*rom 6

当您离开插入模式时,不要担心Vim会从空行中剥离空格.正如其他人所评论的那样,这是一件好事.相反,当您在该行上调用插入模式时,寻找一种自动恢复缩进级别的方法.

i,I,aA命令把你置于插入模式时,所有保存的光标位置.但请查看以下文档:help cc:

["x]cc    Delete [count] lines [into register x] and start
          insert linewise. If 'autoindent' is on, preserve
          the indent of the first line.
Run Code Online (Sandbox Code Playgroud)

如果该autoindent选项处于启用状态,则cc在空白行上运行将切换到插入模式并恢复适当的缩进级别,并根据需要进行设置:

....{
    |
....}
Run Code Online (Sandbox Code Playgroud)

请注意,S键是cc(:help S)的同义词.


sid*_*yll 3

如果你真的想要这样(尽管我同意@ThiefMaster),那么只需改变你的输入方式即可。

\n\n

这里有2个解决方案:

\n\n

解决方案 1:如果您喜欢方向键

\n\n

步骤 1 \n光标为“|”。键入{

\n\n
{|\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 2 \n输入 Return

\n\n
{\n    |\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 3 \n键入}

\n\n
{\n}|\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 4 \n按向上箭头

\n\n
{|\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 5 \n输入 Return

\n\n
{\n    |\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

解决方案2

\n\n

步骤 1 \n键入{

\n\n
{|\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 2 \n输入 Return

\n\n
{\n    |\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 3 \n键入}

\n\n
{\n}|\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 4 \n退出插入模式

\n\n
{\n}\xe2\x96\x88\n
Run Code Online (Sandbox Code Playgroud)\n\n

步骤 5 \n键入O

\n\n
{\n    |\n}\n
Run Code Online (Sandbox Code Playgroud)\n