Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 如何在插入模式下返回到以前的缩进级别?_Vim - Fatal编程技术网

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

Vim 如何在插入模式下返回到以前的缩进级别?,vim,Vim,有时,当您点击回车键时,vim的smartindent不会为下一行选择正确的缩进级别,您希望返回到上一行的缩进级别,然后从那里开始。我知道你可以按几次ctrl-d键来实现这一点,但如果一个键能立即进入上面那行的缩进级别,那就更有用了。在正常模式下,你可以使用来增加或减少缩进。它们在移动、视觉选择和方面都能正常工作。您可以使用=G在插入模式下从光标缩进到文件末尾。或者我不知道这是否纯粹是巧合,但Alexey Radev刚刚发布了,它提供了一个插入模式映射和:prevendent命令,将当前行移动到

有时,当您点击回车键时,vim的smartindent不会为下一行选择正确的缩进级别,您希望返回到上一行的缩进级别,然后从那里开始。我知道你可以按几次ctrl-d键来实现这一点,但如果一个键能立即进入上面那行的缩进级别,那就更有用了。

在正常模式下,你可以使用
来增加或减少缩进。它们在移动、视觉选择和
方面都能正常工作。您可以使用
=G
在插入模式下从光标缩进到文件末尾。或者
我不知道这是否纯粹是巧合,但Alexey Radev刚刚发布了,它提供了一个插入模式映射和
:prevendent
命令,将当前行移动到上一个缩进级别。

如果您不愿意为这么简单的任务安装插件(我不能),请尝试这个简单的映射:

:inoremap <C-D> <Esc>:call setline(".",substitute(getline(line(".")),'^\s*',matchstr(getline(line(".")-1),'^\s*'),''))<CR>I
:inoremap:callsetline(“.”),substitute(getline(line(“.”),“^\s*”,matchstr(getline(line(“.”-1),“^\s*”),”)I
现在,插入模式下的CtrlD将执行契约:像前一行一样缩进当前行


这在你开始在新行上键入之前效果最好,因为它会将光标重置为刚好超过缩进。

你应该删除
smartindent
对于你的文件类型,可能有一个更好的默认值
indentexpr
。我并没有像你建议的那样使用smartindent和使用文件类型的插件缩进规则。但是,它们并不完全准确……在插入模式下,Ctrl+d和Ctrl+t更易于使用。谢谢,这是最直接、最简单的答案。实际上,我已经使用了Ingo发布的插件。
=
对我没有任何帮助。