在Vim中按Esc键后如何保持缩进
我已在Vim中按Esc键后如何保持缩进,vim,Vim,我已设置自动缩进 我走到一行,按a键,然后进入下一行并插入缩进。但是,如果按Esc键,光标会跳到行首,缩进消失。 我必须四处走动,按tabs键才能再次到达正确的位置 我知道帮助说: If you do not type anything on the new line except <BS> or CTRL-D and then type <Esc>, CTRL-O or <CR>, the indent is deleted again. 如果在新行中键入
设置自动缩进
我走到一行,按a键,然后
进入下一行并插入缩进。但是,如果按Esc键,光标会跳到行首,缩进消失。
我必须四处走动,按tabs键才能再次到达正确的位置
我知道帮助说:
If you do not type anything on the new line except <BS> or CTRL-D and then type
<Esc>, CTRL-O or <CR>, the indent is deleted again.
如果在新行中键入除或CTRL-D之外的任何内容,然后键入
,CTRL-O或,再次删除缩进。
有没有办法禁用此功能,或者至少有一个解决方法?一个简单的方法是按“.”(或任何字符),escape,然后按x删除字符。缩进应该保留。键入文本,然后在正常模式下按该行的=
,直到两天前我才遇到这个问题
没有方法可以禁用此功能,但幸运的是,您不需要这样做,因为:
使用S
或cc
进入插入模式。使用S
再次进入插入模式将进入具有适当缩进级别的插入模式,使得Vim删除缩进的事实不重要
注意:我发现这个技巧在大多数地方都适用。但由于某些原因,它不能与Python文件一起工作。我猜这是因为Python文件类型弄乱了它自己的缩进函数,或者是类似的东西
编辑:
另一个技巧是,您可以定义cpoptions,如果您在一条有缩进的线上并移动光标,它将保留缩进。这并不能解决您立即按下Esc键的问题,但这是一个相关的问题,可能也会困扰您。好吧,我解决了这个问题
根据Edan Maor的回答,s或cc应以适当的缩进级别进入插入模式。
…除非它没有:)
这在两种情况下起作用
- 当设置了
cindent
时,它将根据C格式规则插入缩进
在编辑非C类文件时,这可能会很烦人
- 当设置了
indentexpr
时
我发现最好的解决方案是让这是我的。vimrc
set autoindent
set indentexpr=GetIndent()
function GetIndent()
let lnum = prevnonblank(v:lnum - 1)
let ind = indent(lnum)
return ind
endfunction
现在,当我按下S或cc时,它将插入与前一个非空行相同的缩进。可能值得注意的是,使用正确的插件S
和cc
似乎再次正常工作。很可能是python模式解决了这个问题
我本想达到同样的效果,但因为我想正常工作。这是我的解决方法:我发现在正常模式下
几乎是无用的。它只将光标向下移动一行,这可以通过j
实现
所以我在我的.vimrc
中添加了这个:
nmap <cr> o.<c-h><esc>
nmapo。
每当我需要一个空行作为缩进时,我都会使用
。考虑使用“o”开始换行。我在_vimrc中添加了以下配置(注意:set autoindent)
“丑陋的黑客开始换行并保持缩进
诺雷奥克斯地图
诺雷奥克斯地图
我不喜欢它,但如果没有更好的方法……我想我会坚持这种方法。这种方法似乎一直有效,而公认答案中描述的“cc”方法似乎不适用于Python文件。s或cc……不起作用(如果我已经按下Esc键)。我仍然停留在行的开头。是否有特定的设置?不,应该是开箱即用。您确实需要自动缩进,我从问题开始就假设您需要自动缩进。我在10小时前错误地否决了此答案(我的意图是向上投票),现在在编辑答案之前,我无法切换我的投票:(Argh.+1对于这个,这真的很烦人。来吧,维姆。我们不再是1985年了,我们有千兆字节的RAM和太字节的存储空间,我们可以在文本文件的空行上留出一些字节的额外空间,以避免程序员的一些麻烦。
" ugly hack to start newline and keep indent
nnoremap o ox<BS>
nnoremap O Ox<BS>